Ghostcat(幽灵猫) 是由长亭科技安全研究员发现的存在于 Tomcat 中的安全漏洞,由于 Tomcat AJP 协议设计上存在缺陷,攻击者通过 Tomcat AJP Connector 可以读取或包含 Tomcat 上所有 webapp 目录下的任意文件,例如可以读取 webapp 配置文件或源代码。此外在目标应用有文件上传功能的情况下,配合文件包含的利用还可以达到远程代码执行的危害

漏洞描述

  • Apache与Tomacat都是Apache开源组织开发的用于处理HTTP服务的项目,两者均免费,都可以作为独立的Web服务器运行。
  • Apache Tomcat服务器存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件,如:webapp配置文件或源代码等。
  • Ghostcat(幽灵猫) 是由长亭科技安全研究员发现的存在于 Tomcat 中的安全漏洞,由于 Tomcat AJP 协议设计上存在缺陷,攻击者通过 Tomcat AJP Connector 可以读取或包含 Tomcat 上所有 webapp 目录下的任意文件,例如可以读取 webapp 配置文件或源代码。此外在目标应用有文件上传功能的情况下,配合文件包含的利用还可以达到远程代码执行的危害。

漏洞影响版本

该文件包含漏洞影响以下版本:

  • 6.*
  • 7.*分支7.0.100之前版本,建议更新到7.0.100版本;
  • 8.*分支8.5.51之前版本,建议更新到8.5.51版本;
  • 9.*分支9.0.31之前版本,建议更新到9.0.31版本。

漏洞原理

  • tomcat默认conf/server.xml中配置了2个Connector,一个为8080的对外提供的HTTP协议端口,另外一个就是默认的8009的AJP协议端口,两个端口默认均监听外网ip.
  • Tomcat在处理请求时,都会尝试从名为javax.servlet.include.servlet_ _pathRequest attribute中取值。其中DefaultServlet会将其作为要请求的静态资源文件的文件路径,而JspServlet则会将其作为要请求的JSP文件的文件路径。
  • 因为该属性可控,我们就可以通过DefaultServlet读取webapp目录下的任意文件,通过JspServlet编译执行webapp目录下的任意文件。

环境搭建

这里我们直接用docker搭建,真的方便….

1
2
docker search tomcat-8.5.32
docker pull duonghuuphuc/tomcat-8.5.32

1
docker images

启动镜像

1
2
docker run -d -p 8080:8080 -p 8009:8009 --name ghostcat duonghuuphuc/tomcat-8.5.32
docker port ghostcat

漏洞复现

进入容器,写入一个文件验证文件读取漏洞

1
docker exec -it ghostcat /bin/bash

读取文件

读取配置文件

1
ython CNVD-2020-10487-Tomcat-Ajp-lfi.py -p 8009 -f WEB-INF/web.xml 192.168.0.101

工具

https://raw.githubusercontent.com/xindongzhuaizhuai/CVE-2020-1938/master/CVE-2020-1938.py

usage: CVE-2020-1938.py [-p 端口默认8009] [-f 你要读取的文件路径默认是WEB-INF/web.xml] 域名或者IP(必填)

usage: CVE-2020-1938.py [-h] [-p PORT] [-f FILE] target

https://github.com/xindongzhuaizhuai/CVE-2020-1938
https://github.com/nibiwodong/CNVD-2020-10487-Tomcat-ajp-POC
https://github.com/0nise/CVE-2020-1938

参考链接

https://mp.weixin.qq.com/s/GzqLkwlIQi_i3AVIXn59FQ

https://mp.weixin.qq.com/s/NM1E91I6tDwpuGi3H4gATw