关于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更改为一个安全性高、无法被轻易猜解的值)