Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。由于Tomcat默认开启的AJP服务(8009端口)存在一处文件包含缺陷,攻击者可构造恶意的请求包进行文件包含操作,进而读取受影响Tomcat服务器上的Web目录文件(webapps目录)。
Apache Tomcat 6
Apache Tomcat 7 < 7.0.100
Apache Tomcat 8 < 8.5.51
Apache Tomcat 9 < 9.0.31
(1)此处直接使用vulhub搭建,方便快速,一键搞定。vulhub的搭建参见https://github.com/vulhub/vulhub/blob/master/README.zh-cn.md,此处不在赘述。
vulhub安装完后,直接进入tomcat/CVE-2020-1938目录下,输入docker-compose up -d启动(最好开代理下载会快很多)
(2)docker ps命令确认8080端口的apache已开启,8009端口的AJP服务也已开启。8009服务就是该漏洞所在服务,但是无法通过浏览器来直接访问连接。
(1)使用github上检测脚本:https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi,输入python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.3.103 -p 8009,成功读取WEB-INF/web.xml文件,漏洞验证成功。(python2版本)
由于该漏洞利用有一点限制,必须要将文件上传到web目录下,文件后缀名不限,然后可以实现反弹shell。
(1)生成jsp文件反弹shell
(2)使用脚本执行上传的shell.jsp文件
(3)kali上监听地址,收到反弹的shell
如果相关用户暂时无法进行版本升级,可根据自身情况采用下列防护措施。
一、若不需要使用Tomcat AJP协议,可直接关闭AJP Connector,或将其监听地址改为仅监听本机localhost。
具体操作:
(1)编辑 <CATALINA_BASE>/conf/server.xml,找到如下行(<CATALINA_BASE> 为 Tomcat 的工作目录):
<Connector port=”8009″protocol=“AJP/1.3” redirectPort=“8443” />
(2)将此行注释掉(也可删掉该行):
(3)保存后需重新启动Tomcat,规则方可生效。
二、若需使用Tomcat AJP协议,可根据使用版本配置协议属性设置认证凭证。
使用Tomcat 7和Tomcat 9的用户可为AJP Connector配置secret来设置AJP协议的认证凭证。例如(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值):
<Connector port=”8009″protocol=“AJP/1.3” redirectPort=”8443″address=“YOUR_TOMCAT_IP_ADDRESS” secret=“YOUR_TOMCAT_AJP_SECRET”/>
使用Tomcat 8的用户可为AJP Connector配置requiredSecret来设置AJP协议的认证凭证。例如(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值):
<Connector port=”8009″protocol=“AJP/1.3” redirectPort=”8443″address=”YOUR_TOMCAT_IP_ADDRESS”requiredSecret=“YOUR_TOMCAT_AJP_SECRET” />