Apache Tomcat
CVE-2020-1938
漏洞简单复现
文章目录
- Apache Tomcat CVE-2020-1938 漏洞简单复现
-
* 实验准备
- 实验步骤
-
* 搭建环境
- nmap扫描漏洞端口
- POC代码验证
- 漏洞修复建议
- 参考链接
实验准备
-
所选漏洞:Apache Tomcat远程代码执行漏洞
-
漏洞编号:CVE-2020-1938
-
漏洞选择理由:Tomcat是Apache软件基金会Jakarta 项目中的一个核心项目,作为目前比较流行的Web应用服务器,深受Java爱好者的喜爱,并得到了部分软件开发商的认可。Tomcat服务器是一个免费的开放源代码的Web应用服务器,被普遍使用在轻量级Web应用服务的构架中。 Tomcat提供了可以在其中运行Java代码的“纯Java” HTTP Web服务器环境。
在2020年1月6日,国家信息安全漏洞共享平台(CNVD)收录了由北京长亭科技有限公司首次发现并报送的Apache
Tomcat文件包含漏洞(CNVD-2020-10487,对应CVE-2020-1938),该漏洞使攻击者可以读取任何webapps文件(例如webapp配置文件,源代码等)或包括一个文件来远程执行代码。由于Tomcat默认开启的AJP服务(8009端口)存在一处文件包含缺陷,攻击者可构造恶意的请求包进行文件包含操作,进而读取受影响Tomcat服务器上的Web目录文件。漏洞被曝光后,由于其十分简单即可利用还能造成巨大破坏的高危特性,许多使用tomcat的小型开发者被迫禁用AJP服务.Apache
Tomcat官方于2月14日紧急发布了安全补丁。
因为该漏洞允许攻击者读取Tomcat上所有webapp目录下的任意文件,而通常用java开发的应用程序的war包也是放在webapp目录下的,所以也能够被攻击者读取到。这也意味着,如果你把数据库用户名密码、连接其他后端服务的账号、JWT签名secret、OAuth
AppSecret等密钥信息放在properties文件里的话,那么,攻击者可能现在也拿到了这些信息,并且正在试着入侵你的服务器。解压后不仅能拿到properties文件,还能获得class文件,因此攻击者还能逆向获取到应用程序源码,进而从源代码中挖掘出更多其他漏洞加以利用。
- 威胁类型
文件包含、远程代码执行
- 威胁等级
该漏洞通过远程网络进行攻击,在攻击复杂度极低的情况下可以通过文件包含操作提取重要目录下的所有文件,NVD网站通过CVSS
v3.1计算器[得出分数9.8分](https://nvd.nist.gov/vuln-
metrics/cvss/v3-calculator?name=CVE-2020-1938&vector=AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H&version=3.1&source=NIST),属于极危漏洞。
- CVE-2020-1938受影响系统及应用版本
apache tomcat 6
apache tomcat 7 < 7.0.100
apache tomcat 8 < 8.5.51
apache tomcat 9 < 9.0.31
tomcat下载链接:Index of /dist/tomcat
* 本次实验选择的对象是Apache tomcat 9.0.13 [apache-tomcat-9.0.13-windows-x64.zip](https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.13/bin/apache-tomcat-9.0.13-windows-x64.zip)
- 主机:win 10
- 虚拟环境:win 7
实验步骤
搭建环境
- 在win7系统上安装jdk与jre(笔者使用的是jdk_1.8.0_333,jre为同版本),下载时可以全部使用默认设置,在c盘的program files文件夹中找到Java即为文件安装位置.
jdk下载链接Java Downloads |
Oracle
注:下载jdk需要登录Oracle账户jre下载链接jre downloads
接下来我们配置环境变量,右键计算机-属性-高级系统设置-环境变量

在系统变量中新建JAVA_HOME变量,变量值是你Jdk的安装路径

再新建CLASSPATH变量,变量值是 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

修改系统变量中的Path变量,在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

环境变量就添加完成了,命令行检查一下是否配置成功 java -version

- 在下载并解压笔者选择的tomcat版本后,进入bin目录下执行startup.bat启动tomcat,看到框中内容说明正常启动了tomcat,在浏览器中输入 http://localhost:8080 即可打开.


- 修改配置文件
首先修改 apache-tomcat-9.0.13\conf\ web.xml
,将框内包含的注释取消并添加下列代码于红框中
<init-param>
<param-name>enableCmdLineArguments</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>executadle</param-name>
<param-value></param-value>
</init-param>

接着修改 apache-tomcat-9.0.13\conf\ context.xml
文件,添加 privileged="true"
语句

搞定!至此,环境搭建完成.
nmap扫描漏洞端口
- 先看看我们运行tomcat服务的虚拟机的ip:
10.0.3.15

- 然后就可以用nmap扫描端口了,如果确实存在漏洞,那我们应该能看到至少8009端口和8080端口被占用,其中的8009端口应该是AJP服务。


可以看到,这两个端口确实是被占用了的,8080很好理解,毕竟我们打开的浏览器上就占用了这个端口,而8009这个端口才是这次实验的重点:因为Tomcat默认开启的AJP服务就占用了这个端口,导致攻击者可以构造恶意的请求包进行文件包含操作,进而读取受影响Tomcat服务器上
webapp 目录下的配置文件或源代码,配合文件包含的利用还可以达到远程代码执行的危害。
POC代码验证
这套代码运行环境为2.7版本的python,所以在执行前请确认你有相应的环境 (python
2.7的下载地址)
,笔者在虚拟机上做好了python 2.7.10的安装,并完成了POC实现,见下图

可以成功访问文件,漏洞复现成功!
漏洞修复建议
-
临时禁用AJP协议端口,在
conf/server.xml
配置文件中注释掉:<Connector port=“8009” protocol="AJP/1.3"redirectPort=“8443” />
 -
特别配置ajp配置中的secretRequired跟secret属性来限制认证
-
下载更新版本,只要不在本文开头提到的波及版本中即可。
参考链接
(CVE-2020-1938)Apache Tomcat远程代码执行漏洞复现_whh6tl的博客-
CSDN博客
Apache Tomcat CVE-2020-1938,细思极恐 - 云+社区 -
腾讯云
Apache Tomcat 文件包含漏洞(CVE-2020-1938)_山山而川’的博客-
CSDN博客_cve-2020-1938
最后
从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。
因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。
干货主要有:
①1000+CTF历届题库(主流和经典的应该都有了)
②CTF技术文档(最全中文版)
③项目源码(四五十个有趣且经典的练手项目及源码)
④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)
⑤ 网络安全学习路线图(告别不入流的学习)
⑥ CTF/渗透测试工具镜像文件大全
⑦ 2023密码学/隐身术/PWN技术手册大全
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
扫码领取
