#免责声明:
本文属于个人笔记,仅用于学习,禁止使用于任何违法行为,任何违法行为与本人无关。
漏洞简介
Tomcat默认开启AJP服务(8009端口),存在一处文件包含缺陷。攻击者可以通过构造的恶意请求包来进行文件包含操作,从而读取或包含Tomcat上所有webapp目录下的任意文件,如:webapp配置文件或源代码等。
tomcat默认的conf/server.xml中配置了2个Connector,一个为8080的对外提供的HTTP协议端口,另外一个就是默认的8009 AJP协议端口,两个端口默认均监听在外网ip。
影响版本
-
Apache Tomcat 9.x < 9.0.31
-
Apache Tomcat 8.x < 8.5.51
-
Apache Tomcat 7.x < 7.0.100
-
Apache Tomcat 6.x
搭建环境
使用ubuntu打开vulhub中的tomcat/CVE-2020-1938目录,拉取镜像。
docker-compose up -d
查看环境
docker ps
访问http://your-ip:8080
即可查看tomcat默认页面,此时通过AJP协议的8009端口亦可访问Tomcat。
漏洞复现
1.使用nmap查看开启端口(靶机ip:192.168.1.3)
可以看到8009端口的AJP协议是开启的,并且存在8009端口服务的开启,可以怀疑有CVE-2020-1938 Apache Tomcat文件包含漏洞的存在。
2.从Github克隆POC脚本到本地kali
#kali下载地址
git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi.git
3.读取靶机上Tomcat服务器的/usr/local/tomcat/webapps/ROOT/WEB-INF文件:(注意:python环境为python2,否则会报错)
成功读取Tomcat的Webapps下的文件web.xml
4.返回靶机,进入Docker容器,查看相应的文件是否一致
文件一致,成功复现CVE-2020-1938 漏洞
5.实验结束,关闭环境
docker-compose down
漏洞防御
1.临时禁用AJP协议8009端口,在conf/server.xml配置文件中注释掉<Connector port="8009" protocol="AJP/1.3"redirectPort="8443" />;
2.配置ajp配置中的secretRequired跟secret属性来限制认证;
3.更新tomcat版本至漏洞以外的版本;