漏洞原理
Tomcat配置了两个Connecto,它们分别是HTTP和AJP。
HTTP默认端口为8080,处理http请求;AJP默认端口8009,用于处理 AJP 协议的请求。
AJP比http更加优化,多用于反向、集群等,漏洞由于Tomcat AJP协议存在缺陷而导致,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件以及可以包含任意文件,如果有某上传点,上传图片马等等,即可以获取shell。
AJP Connector
Apache Tomcat服务器通过Connector连接器组件与客户端程序建立连接,Connector表示接收请求并返回响应的端点,即Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户。
在Apache Tomcat服务器中我们平时用的最多的8080端口,就是所谓的Http Connector,使用Http(HTTP/1.1)协议,在 conf/server.xml 文件里Ajp协议对应的配置为
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
Tomcat服务器默认对外网开启该端口,Web客户访问Tomcat服务器的两种方式:
漏洞环境搭建
进入vulhub-master/tomcat/CVE-2020-1938目录下,docker环境启动
docker-compose up -d
- 使用nmap,扫描目标指定8009端口,表示漏洞环境搭建成功
nmap -p 8009 192.168.2.147
漏洞环境复现
webapp任意文件读取
可以成功读取web.xml文件内容
python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.2.147 -p 8009 -f WEB-INF/web.xml
任意文件包含
漏洞攻击流量分析
1、Wireshark抓取poc获取web.xml内容流量
2、跟踪流,服务器返回结果如下
漏洞影响版本
Apache Tomcat 6
Apache Tomcat 7 < 7.0.100
Apache Tomcat 8 < 8.5.51
Apache Tomcat 9 < 9.0.31
漏洞修复措施
1、在servce.xml中注释AJP,或者绑定到localhost
2、升级无漏洞版本
3、Tomcat 7和Tomcat 9可为AJP Connector配置secret来设置AJP协议的认证凭证。
4、Tomcat 8的可为AJP Connector配置requiredSecret来设置AJP协议的认证凭证。
EXP
参考链接
CSDN-Tomcat AJP 文件包含漏洞(CVE-2020-1938)
CSDN-Tomcat AJP文件包含漏洞解析
Tomcat AJP 文件包含漏洞(CVE-2020-1938) 修复方案 (含Apache2 ajp 负载如何修复)
先知社区-Tomcat Ajp协议文件包含漏洞分析
声明
严禁读者利用以上介绍知识点对网站进行非法操作 , 本文仅用于技术交流和学习 , 如果您利用文章中介绍的知识对他人造成损失 , 后果由您自行承担 , 如果您不能同意该约定 , 请您务必不要阅读该文章 , 感谢您的配合 !