@tom_doerr: 生成67个恶意PDF测试文件,旨在揭露PDF解析器…中的SSRF、XSS、XXE以及凭证窃取漏洞

X AI KOLs Timeline 工具

摘要

生成67个恶意PDF测试文件用于安全测试,涵盖PDF解析器和Web应用中的SSRF、XSS、XXE以及凭证窃取漏洞。

生成67个恶意PDF测试文件,旨在揭露PDF解析器和Web应用中的SSRF、XSS、XXE以及凭证窃取漏洞。 https://t.co/oc0IxjrMo1 https://t.co/ZHH4yQLABh
查看原文
查看缓存全文

缓存时间: 2026/08/26 13:25

生成67个恶意PDF测试文件,用于暴露PDF解析器和Web应用程序中的SSRF、XSS、XXE和凭证窃取漏洞。 https://t.co/oc0IxjrMo1 https://t.co/ZHH4yQLABh — # jonaslejon/malicious-pdf 来源:https://github.com/jonaslejon/malicious-pdf malicious-pdf.png made-with-python (https://www.python.org/) OpenSSF最佳实践 (https://www.bestpractices.dev/projects/9599) # 恶意PDF生成器 ☠️ 生成67个恶意PDF测试文件,用于测试PDF查看器、转换器和Web应用程序中的回调、SSRF、XSS、XXE、NTLM凭证窃取和数据渗出。可与Burp Collaborator (https://portswigger.net/burp/documentation/collaborator) 或 Interact.sh (https://github.com/projectdiscovery/interactsh) 配合使用。 用于渗透测试、漏洞赏金猎捕和/或红队演练等。我创建此工具是因为我需要一个能生成大量带有各种链接的PDF文件的工具。仅用于教育和专业目的。 ## 用法 pip install -r requirements.txt python3 malicious-pdf.py burp-collaborator-url 输出将被写入 output/ 目录,命名为:test1.pdf, test2.pdf, test3.pdf 等。 ### 选项 --output-dir DIR 用于保存生成PDF文件的目录(默认:output/) --no-credit 不在生成的PDF中嵌入署名/归属元数据 --obfuscate LEVEL 混淆级别(0-3):0 = 无(默认) 1 = PDF文件名十六进制编码 + 字符串八进制/十六进制编码 2 = 级别1 + JS方括号表示法 + javascript: URI大小写/空白混淆 3 = 级别2 + FlateDecode流压缩 使用混淆的示例: python3 malicious-pdf.py https://your-interact-sh-url --obfuscate 2 最大混淆(级别4将JS有效载荷包装在base64解码器存根中,使原始API调用永远不会作为字面子字符串出现): python3 malicious-pdf.py https://your-interact-sh-url --obfuscate 4 ## 用途 - 测试接受PDF文件的网页/服务 - 测试安全产品 - 测试PDF阅读器 - 测试PDF转换器 - 测试服务端PDF处理库(PDFBox, iText等) - 测试PDF静态分析工具——分阶段的JS有效载荷(表单字段 /V, base64解码器)可击败简单的 /JS 正则扫描器 - 漏洞赏金猎捕——有助于在文件上传端点、PDF转图片转换器以及接受PDF输入的程序中的文档处理管道中发现SSRF、XXE、盲回调和NTLM泄露 ## 致谢 - PDF中的不安全特性 (https://web-in-security.blogspot.com/2021/01/insecure-features-in-pdfs.html) - Burp Suite UploadScanner (https://github.com/modzero/mod0BurpUploadScanner/) - Bad-Pdf (https://github.com/deepzec/Bad-Pdf) - 对恶意PDF文档的深入探索 (https://www.scitepress.org/Papers/2020/89923/89923.pdf) - 在Black Hat USA 2020上的演讲 “Portable Document Flaws 101” (https://github.com/RUB-NDS/PDF101) - Adobe Reader - 通过XFA中的XSLT样式表实现PDF回调 (https://insert-script.blogspot.com/2019/01/adobe-reader-pdf-callback-via-xslt.html) - Foxit PDF Reader PoC, DoHyun Lee (https://twitter.com/l33d0hyun/status/1448342241647366152) - Stas Yakobov的Eicar测试文件 (https://github.com/fire1ce/eicar-standard-antivirus-test-files) - 多种PDF漏洞 - FormCalc 和 XXE (https://insert-script.blogspot.com/2014/12/multiple-pdf-vulnerabilites-text-and.html) - PDF - 搅乱网络 - FormCalc头部注入 (https://insert-script.blogspot.com/2015/05/pdf-mess-with-web.html) - Adobe Reader PDF - 客户端请求注入 (https://insert-script.blogspot.com/2018/05/adobe-reader-pdf-client-side-request.html) - ImageMagick - 通过PDF密码实现Shell注入 (https://insert-script.blogspot.com/2020/11/imagemagick-shell-injection-via-pdf.html) - 便携式数据渗出 - PortSwigger Research (https://portswigger.net/research/portable-data-exfiltration) - CVE-2024-4367 - PDF.js中的任意JS执行 (https://codeanlabs.com/2024/05/cve-2024-4367-arbitrary-js-execution-in-pdf-js/) - PDF文件格式安全性 - Philippe Lagadec (https://www.decalage.info/hugo/file_formats_security/pdf/) - CVE-2016-2175 - Apache PDFBox XXE (https://nvd.nist.gov/vuln/detail/CVE-2016-2175) - CVE-2017-9096 - iText XXE (https://nvd.nist.gov/vuln/detail/CVE-2017-9096) - CVE-2020-29075 - Acrobat Reader静默DNS跟踪 (https://nvd.nist.gov/vuln/detail/CVE-2020-29075) - CVE-2022-28244 - Acrobat Reader CSP绕过 (https://nvd.nist.gov/vuln/detail/CVE-2022-28244) - CVE-2018-5158 - Firefox PDF.js PostScript计算器注入 (https://nvd.nist.gov/vuln/detail/CVE-2018-5158) - CVE-2018-20065 - PDFium URI操作无需用户手势 (https://nvd.nist.gov/vuln/detail/CVE-2018-20065) - ExpMon - 精细的Adobe Reader 0日分析(2026年4月) (https://justhaifei1.blogspot.com/2026/04/expmon-detected-sophisticated-zero-day-adobe-reader.html) — 启发了test33_13/14/15和混淆级别4 ## 媒体报道 - Brisk Infosec (https://www.briskinfosec.com/tooloftheday/toolofthedaydetail/Malicious-PDF) - Daily REDTeam (https://www.linkedin.com/posts/daily-red-team_github-jonaslejonmalicious-pdf-generate-activity-7096476604016582656-d9xM/) - 恶意PDF文件 | 红队 | 渗透测试 (https://www.youtube.com/watch?v=hf3p_t8CPWs) - John Hammond - PDF文件能是恶意软件吗? (https://www.youtube.com/watch?v=TP4n8fBl6DA) - Black Hat Ethical Hacking (https://www.blackhatethicalhacking.com/tools/malicious-pdf/) - 0x1渗透测试集合 (https://0x1.gitlab.io/pentesting/malicious-pdf/) - Security Toolkit / WADComs (https://securitytoolkit.github.io/wadcoms/malicious-pdf/) - unsafe.sh (https://unsafe.sh/go-111577.html) - Cristi Zot on LinkedIn (https://www.linkedin.com/posts/cristivlad_github-jonaslejonmalicious-pdf-generate-activity-7026575045871239169-RKFK) - Siva R. on LinkedIn (https://al.linkedin.com/posts/siva-rajendran_github-jonaslejonmalicious-pdf-generate-activity-7026634093891059712-PDcl) ## 完整测试矩阵 点击展开所有70个测试用例 | 测试文件 | 函数 | CVE/参考 | 攻击向量 | 方法 | 影响 | |———–|–––––|—————|—————|———|———| | test1.pdf | create_malpdf() | CVE-2018-4993 | 外部文件访问 | 使用UNC路径的/GoToE操作 | 通过文件系统进行网络回调 | | test1_1.pdf | create_malpdf() | CVE-2018-4993 | 外部文件访问 | 使用HTTPS URL的/GoToE操作 | 通过HTTPS进行网络回调 | | test2.pdf | create_malpdf2() | XFA表单提交 | 表单数据渗出 | 带有提交事件的XDP表单 | 自动表单提交 | | test3.pdf | create_malpdf3() | JavaScript注入 | 代码执行 | 使用app.openDoc()的/OpenAction | 外部文档加载 | | test4.pdf | create_malpdf4() | CVE-2019-7089 | XSLT注入 | 带有外部XSLT样式表的XFA | UNC路径回调 | | test5.pdf | create_malpdf5() | PDF101研究 | URI操作 | /URI操作类型 | DNS预取/HTTP请求 | | test6.pdf | create_malpdf6() | PDF101研究 | 启动操作 | 带外部URL的/Launch | 外部资源执行 | | test7.pdf | create_malpdf7() | PDF101研究 | 远程PDF | /GoToR操作 | 加载远程PDF | | test8.pdf | create_malpdf8() | PDF101研究 | 表单提交 | 带HTML标志的/SubmitForm | 表单数据提交 | | test9.pdf | create_malpdf9() | PDF101研究 | 数据导入 | /ImportData操作 | 导入外部数据 | | test10.pdf | create_malpdf10() | CVE-2017-10951 | JavaScript执行 | Foxit this.getURL()回调 | 通过Foxit Reader进行网络回调 | | test11.pdf | create_malpdf11() | EICAR测试 | 病毒检测 | 嵌入的EICAR字符串 | 防病毒测试 | | test12.pdf | create_malpdf12() | CVE-2014-8453 | FormCalc数据渗出 | XFA FormCalc Post()函数 | 带Cookie的同源数据渗出 | | test13.pdf | create_malpdf13() | 请求注入 | CRLF头部注入 | XFA提交textEncoding CRLF | HTTP头部操作 | | test14.svg | create_malpdf14() | ImageMagick shell注入 | 通过SVG/MSL的Shell注入 | SVG-MSL多格式文件authenticate属性 | 通过ImageMagick执行远程代码 | | test15.pdf | create_malpdf15() | PDF规范 | FormCalc头部注入 | 带有自定义头部的XFA FormCalc Post() | 任意HTTP头部注入 | | test16.pdf | create_malpdf16() | PDF规范 | 通过GotoE的JavaScript | 使用javascript: URI的/GoToE | 通过<iframe>嵌入PDF时的浏览器XSS | | test17.pdf | create_malpdf17() | CVE-2014-8452 | XXE注入 | XMLData.parse()外部实体 | XML外部实体解析 | | test18.pdf | create_malpdf18() | PortSwigger研究 | 注释URI注入 | 未转义的括号通过重复的/A键注入JS操作 | 通过PDF-Lib/jsPDF输出的XSS | | test19.pdf | create_malpdf19() | PortSwigger研究 | PV自动执行 | /AA /PV屏幕注释在页面可见时触发JS | 自动代码执行(Acrobat) | | test20.pdf | create_malpdf20() | PortSwigger研究 | PC关闭触发器 | /AA /PC注释在页面关闭时触发JS | 关闭时代码执行(Acrobat) | | test21.pdf | create_malpdf21() | PortSwigger研究 | SubmitForm SubmitPDF | 带标志256的/SubmitForm发送整个PDF | 完整PDF内容渗出 | | test22.pdf | create_malpdf22() | PortSwigger研究 | JS submitForm() | this.submitForm()带cSubmitAs: "PDF" | PDF内容提交(Acrobat) | | test23.pdf | create_malpdf23() | PortSwigger研究 | 控件按钮注入 | 覆盖页面的不可见/Btn控件,点击时执行JS | 代码执行(Chrome/PDFium) | | test24.pdf | create_malpdf24() | PortSwigger研究 | 文本字段SSRF | 带submitForm() POST的/Tx控件 | 通过表单数据的盲SSRF | | test25.pdf | create_malpdf25() | PortSwigger研究 | 内容提取 | getPageNthWord()读取所有文本并渗出 | 渲染文本渗出 | | test26.pdf | create_malpdf26() | PortSwigger研究 | 鼠标悬停触发器 | /AA /E注释在鼠标进入时触发JS | 悬停时代码执行(PDFium) | | test27 | — | — | 已移除 | test3(Acrobat OpenAction JS)和test23(Chrome Widget Btn)的重复 | — | | test28.pdf | create_malpdf28() | PortSwigger研究 | URL劫持 | 未转义的括号注入新的/URI操作 | 通过PDF-Lib/jsPDF点击重定向 | | test29.pdf | create_malpdf29() | CVE-2024-4367 | FontMatrix注入 | Type1字体FontMatrix字符串突破c.transform() | PDF.js中的任意JS执行(Firefox < 126) | | test30.pdf | create_malpdf30() | PDF101研究 | 外部XObject流 | 图像XObject通过/FS /URL从远程URL获取数据 | 通过页面渲染的静默回调(无操作/JS) | | test31.pdf | create_malpdf31() | PDF101研究 | 线程操作 | 带有远程FileSpec的/S /Thread | 通过线程引用的网络回调 | | test32.pdf | create_malpdf32() | PDF101研究 | 带打印的启动 | 带/Win << /O /print >>的/Launch强制远程获取 | 通过打印操作的网络回调 | | test33_1.pdf | create_malpdf33_1() | PDF101研究 | JS: this.submitForm() | Acrobat JS表单提交回调 | Acrobat Reader | | test33_2.pdf | create_malpdf33_2() | PDF101研究 | JS: this.getURL() | Acrobat JS URL获取 | Acrobat Reader | | test33_3.pdf | create_malpdf33_3() | PDF101研究 | JS: app.launchURL() | Acrobat JS启动URL | Acrobat Reader | | test33_4.pdf | create_malpdf33_4() | PDF101研究 | JS: app.media.getURLData() | Acrobat JS媒体获取 | Acrobat Reader | | test33_5.pdf | create_malpdf33_5() | PDF101研究 | JS: SOAP.connect() | Acrobat JS SOAP连接 | Acrobat Reader | | test33_6.pdf | create_malpdf33_6() | PDF101研究 | JS: SOAP.request() | Acrobat JS SOAP请求 | Acrobat Reader | | test33_7.pdf | create_malpdf33_7() | PDF101研究 | JS: this.importDataObject() | Acrobat JS数据导入 | Acrobat Reader | | test33_8.pdf | create_malpdf33_8() | PDF101研究 | JS: app.openDoc() | Acrobat JS打开文档 | Acrobat Reader | | test33_9.pdf | create_malpdf33_9() | PDF101研究 | JS: fetch() | Web API回调(PDF.js/浏览器) | Firefox/PDF.js | | test33_10.pdf | create_malpdf33_10() | PDF101研究 | JS: XMLHttpRequest | Web API回调(PDF.js/浏览器) | Firefox/PDF.js | | test33_11.pdf | create_malpdf33_11() | PDF101研究 | JS: new Image() | Web API图像回调(PDF.js/浏览器) | Firefox/PDF.js | | test33_12.pdf | create_malpdf33_12() | PDF101研究 | JS: WebSocket | Web API WebSocket回调(PDF.js/浏览器) | Firefox/PDF.js | | test33_13.pdf | create_malpdf33_13() | Adobe 0日博客(2026年4月) | JS: RSS.addFeed() | Acrobat JS RSS订阅回调 | Acrobat Reader | | test33_14.pdf | create_malpdf33_14() | Adobe 0日博客(2026年4月) | JS: util.readFileIntoStream() + SOAP.request() | 本地文件读取 + 渗出链(try/catch错误路径也回调) | Acrobat Reader | | test33_15.pdf | create_malpdf33_15() | Adobe 0日博客(2026年4月) | 表单字段分阶段JS加载器 | /Tx控件/V中的base64载荷,通过getField() + util.stringFromStream解码 | Acrobat Reader | | test34_1.pdf | create_malpdf34_1() | PDF101研究 | UNC: XObject流 | 带有UNC路径的图像XObject | 通过页面渲染的NTLM窃取 | | test34_2.pdf | create_malpdf34_2() | PDF101研究 | UNC: GoToR | 带有UNC FileSpec的/GoToR操作 | 通过远程PDF的NTLM窃取 | | test34_3.pdf | create_malpdf34_3() | PDF101研究 | UNC: Thread | 带有UNC FileSpec的/Thread操作 | 通过线程引用的NTLM窃取 | | test34_4.pdf | create_malpdf34_4() | PDF101研究 | UNC: URI | 带有UNC路径的/URI操作 | 通过URI操作的NTLM窃取 | | test34_5.pdf | create_malpdf34_5() | PDF101研究 | UNC: JS submitForm | 带有UNC路径的this.submitForm() | 通过JS表单提交的NTLM窃取 | | test34_6.pdf | create_malpdf34_6() | PDF101研究 | UNC: JS getURL | 带有UNC路径的this.getURL() | 通过JS URL获取的NTLM窃取 | | test34_7.pdf | create_malpdf34_7() | PDF101研究 | UNC: JS launchURL | 带有UNC路径的app.launchURL() | 通过JS启动的NTLM窃取 | | test34_8.pdf | create_malpdf34_8() | PDF101研究 | UNC: JS SOAP | 带有UNC路径的SOAP.connect() | 通过JS SOAP的NTLM窃取 | | test34_9.pdf | create_malpdf34_9() | PDF101研究 | UNC: JS openDoc | 带有UNC路径的app.openDoc() | 通过JS打开文档的NTLM窃取 | | test35.pdf | create_malpdf35() | PDF101研究 | 名称字典 | 目录级别的/Names /JavaScript自动执行触发器 | 替代的JS执行触发器 | | test36.pdf | create_malpdf36() | CVE-2016-2175 / CVE-2017-9096 | XMP元数据中的XXE | /Metadata XMP流中的XXE | 服务端回调(PDFBox, iText) | | test37.pdf | `create_malpdf37()` | CVE-2016-2175 / CVE-2017-9096 | XFA表单数据中的XXE | `/AcroForm /XFA`流中的XXE | 服务端回调(PDFBox, iText) | | test38.pdf | create_malpdf38() | CVE-2020-29075 | 静默DNS跟踪 | 带有/WC、/WS、/DS触发器的目录/AA | 无提示的DNS回调(Acrobat) | | test39.pdf | create_malpdf39() | CVE-2022-28244 | CSP绕过 | 带有嵌入HTML/JS的RichMedia注释 | 跨源请求(Acrobat) | | test40.pdf | create_malpdf40() | CVE-2018-5158 | PostScript计算器注入 | 图像XObject中的/FunctionType 4 JS注入 | PDF.js worker中的JS执行(Firefox) | | test41.pdf | create_malpdf41() | CVE-2018-20065 | 无需用户手势的URI | 带有/S /URI自动导航的/OpenAction | 静默导航(PDFium/Chrome) | | test42.pdf | create_malpdf42() | CVE-2025-66516 | XFA中的XXE OOB参数实体 | /AcroForm /XFA中的%xxe;参数实体强制DTD获取 | 服务端盲XXE(Tika, Confluence, Jira) | | test43.pdf | create_malpdf43() | CVE-2025-70401 | 注释/T字段XSS | 文本注释/T(作者)字段中的``标签 | XSS回调(Apryse WebViewer, web viewers) | | test44.pdf | create_malpdf44() | CVE-2024-12426

相似文章