tomcat AJP 任意文件读取/包含漏洞(CVE-2020-1938)
漏洞描述
Tomcat AJP协议中存在缺陷,攻击者可以读取或包含Tomcat的webapp目录中的任何文件。
漏洞危害:
- 读取 webapp 配置文件或源代码。
- 如果攻击者读取配置文件得到敏感用户名和下面,tomcat Web应用开放
manager
目录具有文件上传功能
2.1 可以直接上传shell获取控制权,
2.2 通过Ghostcat漏洞利用文件包含在目标主机上执行恶意代码(被包含的文件直接当做jsp代码执行)
tomcat默认情况下就会开启ajp
协议的解析
tomcat开启了两个Connector,分别是http(8080)
和ajp(8009)
,AJP的处理比HTTP更加优化,可以在conf/server.xml
中看到
至于AJP
处理中详细的漏洞原理可以参考:
https://mp.weixin.qq.com/s/D1hiKJpah3NhEBLwtTodsg
https://mp.weixin.qq.com/s/GzqLkwlIQi_i3AVIXn59FQ
漏洞复现
使用vulhub
复现该漏洞
cd vulhub/tomcat/CVE-2020-1938
sudo docker-compose up -d
启动成功,这里可以看到是版本为Tomcat/9.0.30
webapps目录内容读取
这里漏洞利用方法需要使用到exp
,幸运的是searchsploit
发现拥有两个一个是py
脚本,一个是metasploit
这里我使用metasploit
演示
默认读取的配置文件时web.xml
,设置好参数直接尝试漏洞利用
成功运行,并且把读取到的文件内容保存到了/home/kali/.msf4/loot/20240409041816_default_192.168.154.138_WEBINFweb.xml_673554.txt
但是这个文件并没有太大的作用,我们只可以读取webapps
目录下的内容,接着我们看下一个文件包含漏洞可以getshell
文件包含漏洞
该漏洞需要一定的条件(靶机存在一个jsp reverse-shell),但是为了模拟,这里我们手动生成一个上传到靶机中
使用msfvenom
,这里只要是jsp reverse-shell
都可以
在本机监听的meterpreter
终端
这里需要换一个文件包含的脚本,地址:https://github.com/sv3nbeast/CVE-2020-1938-Tomact-file_include-file_read/
脚本访问shell.jsp
就会反弹一个shell
获得shell
漏洞修复
- 更新的最新的版本进行漏洞修复
- 临时取消
ajp
服务,在需要的时候启动,可以在/conf/server.xml中注释ajp
配置信息,重启即可关闭