PDF 文件分析
Reading time: 8 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
有关更多详细信息,请查看: https://trailofbits.github.io/ctf/forensics/
PDF 格式因其复杂性和隐藏数据的潜力而闻名,使其成为 CTF 取证挑战的焦点。它结合了纯文本元素和二进制对象,这些对象可能被压缩或加密,并且可以包含 JavaScript 或 Flash 等语言的脚本。要理解 PDF 结构,可以参考 Didier Stevens 的 入门材料,或使用文本编辑器或 PDF 专用编辑器如 Origami。
对于 PDF 的深入探索或操作,可以使用 qpdf 和 Origami 等工具。PDF 中隐藏的数据可能隐藏在:
- 隐形层
- Adobe 的 XMP 元数据格式
- 增量生成
- 与背景颜色相同的文本
- 图像后面的文本或重叠图像
- 不显示的注释
对于自定义 PDF 分析,可以使用 Python 库如 PeepDF 来制作定制的解析脚本。此外,PDF 隐藏数据存储的潜力非常巨大,尽管 NSA 关于 PDF 风险和对策的指南不再托管在其原始位置,但仍提供了有价值的见解。可以参考 该指南的副本 和 Ange Albertini 的 PDF 格式技巧集合 以获取更多阅读材料。
常见恶意构造
攻击者通常滥用特定的 PDF 对象和在打开或与文档交互时自动执行的操作。值得寻找的关键字:
- /OpenAction, /AA – 在打开或特定事件时执行的自动操作。
- /JS, /JavaScript – 嵌入的 JavaScript(通常被混淆或分散在对象中)。
- /Launch, /SubmitForm, /URI, /GoToE – 外部进程 / URL 启动器。
- /RichMedia, /Flash, /3D – 可以隐藏有效负载的多媒体对象。
- /EmbeddedFile /Filespec – 文件附件(EXE, DLL, OLE 等)。
- /ObjStm, /XFA, /AcroForm – 常被滥用以隐藏 shell-code 的对象流或表单。
- 增量更新 – 多个 %%EOF 标记或非常大的 /Prev 偏移可能表明在签名后附加的数据以绕过 AV。
当任何前面的标记与可疑字符串(powershell, cmd.exe, calc.exe, base64 等)一起出现时,PDF 值得进行更深入的分析。
静态分析备忘单
# Fast triage – keyword statistics
pdfid.py suspicious.pdf
# Deep dive – decompress/inspect the object tree
pdf-parser.py -f suspicious.pdf # interactive
pdf-parser.py -a suspicious.pdf # automatic report
# Search for JavaScript and pretty-print it
pdf-parser.py -search "/JS" -raw suspicious.pdf | js-beautify -
# Dump embedded files
peepdf "open suspicious.pdf" "objects embeddedfile" "extract 15 16 17" -o dumps/
# Remove passwords / encryptions before processing with other tools
qpdf --password='secret' --decrypt suspicious.pdf clean.pdf
# Lint the file with a Go verifier (checks structure violations)
pdfcpu validate -mode strict clean.pdf
额外有用的项目(2023-2025年积极维护):
- pdfcpu – Go库/CLI,能够lint、decrypt、extract、compress和sanitize PDF文件。
- pdf-inspector – 基于浏览器的可视化工具,渲染对象图和流。
- PyMuPDF (fitz) – 可脚本化的Python引擎,可以安全地将页面渲染为图像,以在加固的沙箱中引爆嵌入的JS。
最近的攻击技术(2023-2025年)
- PDF多语言中的MalDoc(2023) – JPCERT/CC观察到威胁行为者在最后的**%%EOF**后附加了一个基于MHT的Word文档,包含VBA宏,生成一个既是有效PDF又是有效DOC的文件。仅解析PDF层的AV引擎会错过宏。静态PDF关键字是干净的,但
file
仍然打印%PDF
。将任何同时包含字符串<w:WordDocument>
的PDF视为高度可疑。 - Shadow增量更新(2024) – 对手利用增量更新功能插入第二个**/Catalog**,并带有恶意的
/OpenAction
,同时保持良性的第一个修订版已签名。仅检查第一个xref表的工具被绕过。 - 字体解析UAF链 – CVE-2024-30284(Acrobat/Reader) – 一个易受攻击的CoolType.dll函数可以通过嵌入的CIDType2字体访问,允许在打开经过精心制作的文档时以用户的权限进行远程代码执行。已在APSB24-29中修补,2024年5月。
YARA快速规则模板
rule Suspicious_PDF_AutoExec {
meta:
description = "Generic detection of PDFs with auto-exec actions and JS"
author = "HackTricks"
last_update = "2025-07-20"
strings:
$pdf_magic = { 25 50 44 46 } // %PDF
$aa = "/AA" ascii nocase
$openact = "/OpenAction" ascii nocase
$js = "/JS" ascii nocase
condition:
$pdf_magic at 0 and ( all of ($aa, $openact) or ($openact and $js) )
}
防御提示
- 快速修补 – 保持 Acrobat/Reader 在最新的连续版本上;大多数在野外观察到的 RCE 链利用了几个月前修复的 n-day 漏洞。
- 在网关处剥离活动内容 – 使用
pdfcpu sanitize
或qpdf --qdf --remove-unreferenced
从入站 PDF 中删除 JavaScript、嵌入文件和启动操作。 - 内容解除与重构 (CDR) – 在沙箱主机上将 PDF 转换为图像(或 PDF/A),以保留视觉保真度,同时丢弃活动对象。
- 阻止不常用的功能 – Reader 中的企业“增强安全”设置允许禁用 JavaScript、多媒体和 3D 渲染。
- 用户教育 – 社会工程(发票和简历诱饵)仍然是初始向量;教员工将可疑附件转发给 IR。
参考文献
- JPCERT/CC – “MalDoc in PDF – 通过将恶意 Word 文件嵌入 PDF 文件来绕过检测”(2023年8月)
- Adobe – Acrobat 和 Reader 的安全更新 (APSB24-29, 2024年5月)
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。