一、漏洞介绍
Tomcat AJP协议设计缺陷,攻击者可以通过Tomcat AJP Connector读取包含Tomcat上所有webapp目录下的任意文件,如果目标应用上有文件上传功能,则攻击还可以做到远程代码执行。
在影响版本范围内,如果开启AJP Connector,攻击者能够访问到该端口,则可被利用。
在默认配置下,Tomcat AJP Connect为开启状态,且监听在0.0.0.0:8009。
二、影响版本
Tomcat 9.X(低于9.0.31版本)
Tomcat 8.X(低于8.5.51版本)
Tomcat 7.X(低于7.0.100版本)
Tomcat 6 全版本
三、POC
(一)环境部署
靶机系统:Windows Server 2019 Datacenter
Tomcat版本:ApacheTomcat 9.0.17
1.在安装Tomcat之前,必须安装JDK SE8或更高版本(不同版本的Tomcat需要不同版本的JDK支持,以官方说明为主),本次POC使用的是JDK SE13版本。下载地址为:
https://www.oracle.com/java/technologies/javase-jdk13-downloads.html
下载完成后压缩。
2.我的电脑-属性-高级系统设置-高级-环境变量。
3.找到path进行编辑,新建如下。
4.在命令行中,输入如下命令后有结果反馈,则代表部署完成。
5.部署完JDK后,还需要部署eclipse环境。
6.部署eclipse后,下载Tomcat,下载地址为:
https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.17/
下载完成后解压缩
7.配置环境变量,我的电脑-属性-高级系统设置-高级-环境变量,新建如下变量。
8.编辑path
9.运行目录下bin中的startup.bat即可。
10.此外也可以利用docker直接部署环境。
11.扫描是否开放8009端口
(二)漏洞复现
1.下载poc脚本到本地,获得如下脚本(以下脚本可以复制到外部使用)。
下载地址:https://github.com/nibiwodong/CNVD-2020-10487-Tomcat-ajp-POC
到本地。
2.cmd命令行中先切换到poc脚本所在目录下,用python2 加载poc脚本,该脚本可利用此漏洞读取敏感文件信息。
命令格式为:python ./脚本名 业务IP -p 8009 -f 文件名
3.至此POC结束。利用此漏洞可以读取到例如webapp 配置文件、源代码、数据库配置配置等敏感信息。
三、漏洞排查
(一)下载漏洞扫描脚本,并且解压缩,得到如下扫描脚本(该脚本可以复制到外部使用)。
下载地址:https://github.com/woaiqiukui/CVE-2020-1938TomcatAjpScanner
1.使用python3运行扫描脚本,运行命令为:
python 脚本名.py 字符串
注:字符串可以为指定IP地址,也可以为文件。如下图所示:
(1)扫描指定IP 192.168.1.111
python scan.py 192.168.1.111
(2)也可以生成txt文件,文件中写入要检测的IP地址,命令行的字符串写文件名。
2.运行完成后,如下图所示,展示该IP是否存在漏洞。
3.并且会将结果保存在同目录下的result.txt中。
四、防护方案
(一)截止目前,官方已经发布新版本(9.0.31、8.5.51、7.0.100版本)修复了该漏洞,6.X版本已经停止维护,无法更新。
(二)如果目前系统未用到Tomcat AJP协议,建议直接升级。如果无法升级版本,可以使用如下办法:
1.可以关闭AJP Connector,或者修改监听地址。修改方法如下:编辑<CATALINA_BASE>/conf/server.xml,将<!--<Connector port=”8009” protocol=”AJP/1.3” redirect-Port=”8443”>>将该行注释或者删除,重启Tomcat即可。
2.在安全设备上,做相关安全策略,限制外部IP访问Tomcat AJP Connector端口。
(三)如果目前系统到Tomcat AJP协议,除升级版本外同时为AJP Connector配置secret来设置AJP协议认证凭证。将YOUR_TOMCAT_AJP_SECRET更改为无法轻易猜解的值。
写在最后,欢迎大家关注Killboy安全实验室微信公众号,全都是干货啊
评论