Tomcat Ajp(CVE-2020-1938)
漏洞概况
漏洞影响范围:
Apache Tomcat 6
Apache Tomcat 7-7.0.100
Apache Tomcat 8-8.5.51
Apache Tomcat 9-9.0.31
漏洞分析
Tomcat服务器通过Connector连接器组件与客户端程序建立连接,“连接器”表示接收请求并返回响应的端点。即Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户。
Web客户访问Tomcat服务器的两种方式:
Tomcat默认在其配置文件server.xml中配置了两种Connector:
1.HTTP Connector
2.AJP Connector
HTTP Connector监听8080端口,负责建立HTTP连接。通过浏览器访问Tomcat服务器的Web应用时,使用的就是HTTP Connector组件。
<!-- Define a non-SSL/TLS HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
AJP Connector可以通过AJP协议和另一个web容器进行交互。它监听8009端口,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。AJP连接器可以通过AJP协议和一个web容器进行交互。
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
通过Gh0stcat漏洞,攻击者可以读取Tomcat下部署的所有webapp目录下的任意文件。同时,如果此应用在网站服务中具备上传功能,攻击者也可以先向服务端上传一个含有JSP代码的恶意文件(上传文件可以是任意类型,图片、纯文本文件等),然后利用Gh0stcat进行文件包含,从而达到代码执行的危害。
漏洞复现
- 利用docker部署环境
docker run -d -p 8080:8080 -p 8009:8009 --name ghostcat duonghuuphuc/tomcat-8.5.32
- 浏览器访问部署的服务出现如下图片
- 攻击
python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.195.133 -p 8009 -f WEB-INF/web.xml
# -p:指定端口;默认指定为8009
# -f:指定文件;默认指定为WEB-INF/web.xml
#默认路径为/usr/local/tomcat/webapps/ROOT
#使用python2
EXP
https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi