CVE-2020-1938与CVE-2020-13935漏洞复现
前言
最近在腾讯云上买了个服务器,准备用来学习。在安装了7.0.76的tomcat后,腾讯云提醒我存在两个漏洞,分别是CVE-2020-1938和CVE-2020-13935,在修复完漏洞后,准备复现一下这两个漏洞,于是就有了这篇随笔。
CVE-2020-1938
漏洞简介
2020年,长亭科技安全研究人员全球首次发现了一个存在于流行服务器 Tomcat 中的文件读取/包含漏洞,并第一时间提交厂商修复。
2月14日,Apache Tomcat 官方发布安全更新版本,修复漏洞。2月20日,国家信息安全漏洞共享平台(CNVD)发布安全公告,该漏洞综合评级为高危,漏洞编号为CNVD-2020-10487,CVE 编号 CVE-2020-1938。
cve-2020-1938是一个出现在Apache-Tomcat-Ajp的文件包含漏洞,攻击者可以利用该漏洞读取包含Tomcat上所有的webapp目录下的任意文件,如:webapp配置文件或源代码。由于Tomcat默认开启的AJP服务(8009端口)存在一处文件包含缺陷,攻击者可构造恶意的请求包进行文件包含操作,进而读取受影响Tomcat服务器上的Web目录文件。同时,若该服务器存在文件上传功能,攻击者还可以进一步实现远程代码执行。
影响版本
Apache Tomcat 6
Apache Tomcat 7 < 7.0.100
Apache Tomcat 8 < 8.5.51
Apache Tomcat 9 < 9.0.31
环境搭建
在这里推荐一款一键搭建漏洞的工具——Vulhub,非常好用。
我们进入到tomcat的CVE-2020-1938的目录下使用docker-compose up -d启动环境
在主机访问搭建成功
漏洞复现
然后进入kali进行攻击,使用POC
sv3nbeast/CVE-2020-1938-Tomact-file_include-file_read: Tomcat的文件包含及文件读取漏洞利用POC (github.com)
被打马赛克的地方是ip地址,最后成功读取到web.xml,攻击成功。
我们在ROOT目录下写入一个1.txt再测试一下
也能成功读取
但在webapps目录下写入一个2.txt却不能读取,因为它默认读取的是ROOT目录下的文件
CVE-2020-13935
漏洞简介
Apache Tomcat是美国阿帕奇(Apache)基金会的一款轻量级Web应用服务器。该程序实现了对Servlet和JavaServer Page(JSP)的支持。 Apache Tomcat中的WebSocket存在安全漏洞,该漏洞源于程序没有正确验证payload的长度。攻击者可利用该漏洞造成拒绝服务(无限循环)。
影响版本
Apache Tomcat 10.0.0-M1-10.0.0-M6
Apache Tomcat 9.0.0.M1-9.0.36
Apache Tomcat 8.5.0-8.5.56
Apache Tomcat 7.0.27-7.0.104
漏洞复现
此漏洞依旧使用上述环境
打开浏览器,在地址栏输入http://IPaddress:8080/examples/websocket/echo.xhtml查看是否可以访问,如果不可以访问,则说明该文件被删掉了,那就无法进行漏洞利用。
在服务器上使用top -bn 1 -i -c命令,可以看到CPU占有率为0.0
在kali上使用EXP攻击
RedTeamPentesting/CVE-2020-13935: Exploit for WebSocket Vulnerability in Apache Tomcat (github.com)
使用此EXP前需要先编译再攻击
go env -w GOPROXY=https://goproxy.cn //修改proxy地址
go build //编译go程序,输出tcdos.exe
可以看到此时cpu占有率为100,攻击成功