Tomcat 任意文件读取漏洞复现 CVE-2020-1938
字数 925 2025-08-11 00:08:50
Tomcat 任意文件读取漏洞(CVE-2020-1938)分析与复现指南
漏洞概述
漏洞名称: Tomcat AJP协议任意文件读取漏洞 (Ghostcat漏洞)
CVE编号: CVE-2020-1938
发现时间: 2020年
发现者: 长亭科技安全研究员
影响范围: 潜伏时间长达十多年,影响Tomcat全版本默认配置
受影响版本
- Apache Tomcat = 6
- 7.0.0 <= Apache Tomcat < 7.0.100
- 8.0.0 <= Apache Tomcat < 8.5.51
- 9.0.0 <= Apache Tomcat < 9.0.31
漏洞原理
- AJP协议缺陷: Tomcat的AJP(Apache JServ Protocol)协议在设计上存在安全缺陷
- 文件读取: 攻击者可通过Tomcat AJP Connector读取webapp目录下的任意文件
- 潜在RCE: 若目标应用有文件上传功能,配合文件包含可实现远程代码执行
漏洞危害
- 读取敏感配置文件(如web.xml)
- 获取应用程序源代码
- 可能导致系统信息泄露
- 在特定条件下可升级为远程代码执行
环境搭建与复现
准备工作
-
创建实验目录:
mkdir tomcat-ghostcat cd tomcat-ghostcat -
下载靶场启动脚本:
wget repo.vulab.io/tomcat/CVE-2020-1938/1.0.1 -O tomcat-ghostcat -
启动漏洞容器:
sudo docker-compose -f tomcat-ghostcat up
验证服务
- 访问Tomcat服务(默认192.168.52.130)
- 使用nmap扫描端口:
确认8009(AJP协议端口)是否开放sudo nmap -v -sS -p1-9000 -Pn -T4 -A 192.168.52.130 --script http-methods
漏洞检测
使用xray工具扫描:
xray_windows_386.exe servicescan --target 192.168.52.130:8009
利用POC
可使用公开POC验证漏洞:
python CNVD-2020-10487-Tomcat-Ajp-lfi.py -p 8009 192.168.52.130
修复方案
-
版本升级:
- 升级到Tomcat 9.0.31+
- 升级到Tomcat 8.5.51+
- 升级到Tomcat 7.0.100+
-
禁用AJP协议:
- 注释或删除server.xml中的AJP Connector配置
-
配置认证:
- 设置AJP协议的secret和secretRequired属性
- 示例配置:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" secret="YOUR_SECRET_KEY" secretRequired="true" />
参考资源
- xray工具
- CNVD-2020-10487-Tomcat-Ajp-lfi
- 长亭科技Ghostcat漏洞分析
注意事项
- 实验应在授权环境下进行
- 生产环境应立即评估并修复
- 禁用AJP协议是最彻底的解决方案
- 升级后应进行完整测试确保业务不受影响