CVE-2020-1938 漏洞复现

一、漏洞描述

Tomcat是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的Web服务器运行。Apache Tomcat服务器存在文件包含漏洞,攻击者可利用该漏洞读取或包含 Tomcat 上所有 webapp 目录下的任意文件,如:webapp 配置文件或源代码等。

二、漏洞危害等级

三、影响版本

Apache Tomcat 6

Tomcat 7 系列 < 7.0.100

Tomcat 8 系列 < 8.5.51

Tomcat 9 系列 < 9.0.31

四、漏洞原理

tomcat默认的conf/server.xml中配置了2个Connector,一个为8080的对外提供的HTTP协议端口,另外一个就是默认的8009 AJP协议端口,两个端口默认均监听在外网ip

tomcat在接收ajp请求的时候调用org.apache.coyote.ajp.AjpProcessor来处理ajp消息,prepareRequest将ajp里面的内容取出来设置成request对象的Attribute属性。可以通过此种特性从而可以控制request对象的下面三个Attribute属性

javax.servlet.include.request_uri

javax.servlet.include.path_info

javax.servlet.include.servlet_path

再通过控制ajp控制的上述三个属性来读取文件,通过操控上述三个属性从而可以读取到应用目录下的任何文件。

五、漏洞复现

 

本地搭建tomcat环境,访问127.0.0.1:8080。出现如图内容,至此tomcat环境搭建完成。

 

POC项目地址:https://github.com/hypn0s/AJPy

六、漏洞修复

1如未使用Tomcat AJP协议:

可以直接将 Tomcat 升级到 9.0.318.5.517.0.100 版本进行漏洞修复。

如无法立即进行版本更新、或者是更老版本的用户,建议直接关闭AJPConnector,或将其监听地址改为仅监听本机localhost

具体操作:

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

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

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

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

(3)保存后需重新启动,规则方可生效。

 

2如果使用了Tomcat AJP协议:

建议Tomcat立即升级到9.0.318.5.517.0.100版本进行修复,同时为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"/>

如无法立即进行版本更新、或者是更老版本的用户,建议为AJPConnector配置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"/>

posted @ 2020-09-25 11:11  Charon·1937  阅读(1201)  评论(0编辑  收藏  举报
2 3
4