Apache Tomcat会开启AJP连接器,方便与其他Web服务器通过AJP协议进行交互。由于Tomcat本身也内含了HTTP服务器,因此也可以视作单独的Web服务器。此漏洞为文件包含漏洞,攻击者可利用该漏洞读取或包含 Tomcat 上所有 webapp 目录下的任意文件,如:webapp 配置文件、源代码等。
Apache Tomcat = 6
7 <= Apache Tomcat <7.0.100
8 <= Apache Tomcat <8.5.51
9 <= Apache Tomcat <9.0.31
下载AjPy验证工具,需安装python2环境,文件下载:https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
使用python3需要修改CNVD-2020-10487-Tomcat-Ajp-lfi.py
文件以下代码:
self.socket.makefile("rb", bufsize=0) -->change self.socket.makefile("rb", buffering=0)
print("".join([d.data for d in data])) -->print("".join([d.data.decode() for d in data]))
查看Apache Tomcat版本 <8.5.51
1、通过tomcat.py脚本查看linux tomcat版本,下载地址:https://github.com/0nise/CVE-2020-1938
python tomcat.py version 127.0.0.1
Apache Tomcat/8.5.12是存在存在该漏洞的版本,进行下一步测试证实
2、通过python脚本利用AJP BUG读取webapp任意目录下文件,以/WEB-INF/web.xml为例
python ./CNVD-2020-10487-Tomcat-Ajp-lfi.py 127.0.0.1 -p 8009 -f WEB-INF/web.xml
成功读取web.xml文件,证实漏洞的存在
3、本地下载安全版本tomcat apache-tomcat-8.5.51,测试正常:
临时禁用AJP协议端口,在conf/server.xm l配置文件中注释掉
1、注释测试版本8.5.12 tomcat AJP协议端口,重启测试:
通过脚本再次测试访问
python ./CNVD-2020-10487-Tomcat-Ajp-lfi.py 127.0.0.1 -p 8009 -f WEB-INF/web.xml
2、配置ajp配置中的secretRequired跟secret属性来限制认证
python ./CNVD-2020-10487-Tomcat-Ajp-lfi.py 127.0.0.1 -p 8009 -f WEB-INF/web.xml
3、官方下载最新版下载地址:
https://tomcat.apache.org/download-70.cgi
https://tomcat.apache.org/download-80.cgi
https://tomcat.apache.org/download-90.cgi
https://github.com/apache/tomcat/releases