vlambda博客
学习文章列表

【超详细|附EXP】Tomcat Ajp文件读取漏洞复现(CVE-2020-1938)

0x01 漏洞简述

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由ApacheSun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IISWeb服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为9.0.41

 

0x02 漏洞编号

CNVD-2020-10487CVE-2020-1938


0x03 影响版本

apache tomcat 6apache tomcat 7 < 7.0.100apache tomcat 8 < 8.5.51apache tomcat 9 < 9.0.31

0X04 环境搭建

这里是在docker里搭建的环境

1、 启动docker

Systemctl start docker

2、 docker search :从Docker Hub查找镜像

 【超详细|附EXP】Tomcat Ajp文件读取漏洞复现(CVE-2020-1938)

3、 docker pull : 从镜像仓库中拉取或者更新指定镜像

 

【超详细|附EXP】Tomcat Ajp文件读取漏洞复现(CVE-2020-1938)

4、 docker images : 列出本地镜像

 

【超详细|附EXP】Tomcat Ajp文件读取漏洞复现(CVE-2020-1938)

5、 docker run :创建一个新的容器并运行一个命令

-d: 后台运行容器,并返回容器ID;-p: 指定端口映射,格式为:主机(宿主)端口:容器端口--name="ghostcat": 为容器指定一个名称;


6、 docker port :列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口

 【超详细|附EXP】Tomcat Ajp文件读取漏洞复现(CVE-2020-1938)

7、 浏览器端可访问到Tomcat页面,说明环境搭建成功。

 【超详细|附EXP】Tomcat Ajp文件读取漏洞复现(CVE-2020-1938)

0X05 漏洞复现

1、 扫描˙目标机端口开放情况

 【超详细|附EXP】Tomcat Ajp文件读取漏洞复现(CVE-2020-1938)

2、 下载EXP进行文件读取

https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi

 

【超详细|附EXP】Tomcat Ajp文件读取漏洞复现(CVE-2020-1938)

【超详细|附EXP】Tomcat Ajp文件读取漏洞复现(CVE-2020-1938)

0x06 修复建议

(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.31、8.5.51或7.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" />

https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi

后台回复"1938"也可直接获取利用脚本

【往期推荐】




走过路过的大佬们留个关注再走呗【超详细|附EXP】Tomcat Ajp文件读取漏洞复现(CVE-2020-1938)

往期文章有彩蛋哦