关于CNVD-2020-10487的简单复现

关于CNVD-2020-10487的简单复现

0x01 漏洞编号

cnvd-2020-10487
cve-2020-1938

0x02 漏洞详细

2.1 简述

由于Tomcat默认开启的AJP服务(8009端口)存在一处文件包含缺陷,攻击者可构造恶意的请求包进行文件包含操作,进而读取受影响Tomcat服务器上的Web目录文件。

2.2 AJP Connector

Tomcat服务器通过Connector连接器组件与客户程序建立连接,Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户。即Connector组件负责接收客户的请求,然后把Tomcat服务器的响应结果发给客户。

在平常我们使用Tomcat时经常使用的是8080端口(http Connector,协议是http(http/1.1))

而AJP Connector是使用AJP协议(Apache Jserv Protocol),这是一个定向包协议。它是使用二进制格式来传输可读性文本,能够降低Http请求的处理成本。因此它主要是用在需要集群、反向代理的场景。(一般是8009端口)

0x03 适用范围

受影响版本

  • 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

0x04 复现

4.1 环境配置

我们使用的环境是tomcat 9.0.19版本

4.2 查看端口是否开放

4.3 文件放置

该漏洞属于读取文件目录等信息,因此我们先写一个文件放入tomcat里面(为了方便笔者放在root文件夹里面)

4.4 测试

使用脚本进行测试

0x05 修复方案

5.1 更新版本

将tomcat版本更新到最新

Apache Tomcat 7.0.100
Apache Tomcat 8.5.51
Apache Tomcat 9.0.31

利用tomcat 9.0.31 进行测试

5.2 删除、或者注释相关代码

将tomcat配置文件里面的这行代码删除或者更新

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

若需要使用ajp协议又不想升级到最新版本的,根据绿盟的方案还可以将代码进行修改

1
<Connector port="8009"protocol="AJP/1.3"   redirectPort="8443"address="YOUR_TO   MCAT_IP_ADDRESS"   secret="YOUR_TOMCAT_AJP_SECRET"/>

上述代码为使用Tomcat 7和Tomcat 9的用户使用,用户可为AJP Connector配置secret来设置AJP协议的认证凭证。(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值)

1
<Connector port="8009"protocol="AJP/1.3"   redirectPort="8443"address="YOUR_TO   MCAT_IP_ADDRESS"requiredSecret="YOUR_TOMCAT_AJP_SECRET"   /

上述代码为使用Tomcat 8的用户使用,用户可为AJP Connector配置requiredSecret来设置AJP协议的认证凭证。(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值)