ApacheTomcat CVE-2020-1938 Ghostcat高危文件读取/包含漏洞复现

枫少@KillBoy
枫少@KillBoy
管理员
220
文章
0
粉丝
Web安全3234,0765字数 950阅读3分10秒阅读模式
AI智能摘要
你是否知道,一个默认开启的端口可能正让你的服务器暴露在攻击者视野中?本文深度复现Apache Tomcat CVE-2020-1938(Ghostcat)高危漏洞,揭示攻击者如何通过AJP协议读取任意文件,甚至实现远程代码执行。涵盖完整环境搭建、POC验证、批量扫描与防护方案,帮你快速判断系统风险并加固防御。安全无小事,一次深入剖析带你掌握关键应对措施。
— AI 生成的文章内容摘要

一、漏洞介绍

Tomcat AJP协议设计缺陷,攻击者可以通过Tomcat AJP Connector读取包含Tomcat上所有webapp目录下的任意文件,如果目标应用上有文件上传功能,则攻击还可以做到远程代码执行

在影响版本范围内,如果开启AJP Connector,攻击者能够访问到该端口,则可被利用。

在默认配置下,Tomcat AJP Connect为开启状态,且监听在0.0.0.0:8009。

二、影响版本

Tomcat 9.X(低于9.0.31版本)

Tomcat 8.X(低于8.5.51版本)

Tomcat 7.X(低于7.0.100版本)

Tomcat 6 全版本

三、POC

(一)环境部署

靶机系统:Windows Server 2019 Datacenter

Tomcat版本:ApacheTomcat 9.0.17

1.在安装Tomcat之前,必须安装JDK SE8或更高版本(不同版本的Tomcat需要不同版本的JDK支持,以官方说明为主),本次POC使用的是JDK SE13版本。下载地址为:

https://www.oracle.com/java/technologies/javase-jdk13-downloads.html

下载完成后压缩。

2.我的电脑-属性-高级系统设置-高级-环境变量。

ApacheTomcat CVE-2020-1938 Ghostcat高危文件读取/包含漏洞复现-图片1

ApacheTomcat CVE-2020-1938 Ghostcat高危文件读取/包含漏洞复现-图片2

 

3.找到path进行编辑,新建如下。

ApacheTomcat CVE-2020-1938 Ghostcat高危文件读取/包含漏洞复现-图片3

4.在命令行中,输入如下命令后有结果反馈,则代表部署完成。

ApacheTomcat CVE-2020-1938 Ghostcat高危文件读取/包含漏洞复现-图片4

5.部署完JDK后,还需要部署eclipse环境。

6.部署eclipse后,下载Tomcat,下载地址为:

https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.17/

下载完成后解压缩

7.配置环境变量,我的电脑-属性-高级系统设置-高级-环境变量,新建如下变量。

ApacheTomcat CVE-2020-1938 Ghostcat高危文件读取/包含漏洞复现-图片5

8.编辑path

ApacheTomcat CVE-2020-1938 Ghostcat高危文件读取/包含漏洞复现-图片6

9.运行目录下bin中的startup.bat即可。

ApacheTomcat CVE-2020-1938 Ghostcat高危文件读取/包含漏洞复现-图片7

10.此外也可以利用docker直接部署环境。

ApacheTomcat CVE-2020-1938 Ghostcat高危文件读取/包含漏洞复现-图片8

11.扫描是否开放8009端口

ApacheTomcat CVE-2020-1938 Ghostcat高危文件读取/包含漏洞复现-图片9

(二)漏洞复现

1.下载poc脚本到本地,获得如下脚本(以下脚本可以复制到外部使用)。

下载地址:https://github.com/nibiwodong/CNVD-2020-10487-Tomcat-ajp-POC

到本地。

2.cmd命令行中先切换到poc脚本所在目录下,用python2 加载poc脚本,该脚本可利用此漏洞读取敏感文件信息。

命令格式为:python ./脚本名 业务IP -p 8009 -f 文件名

ApacheTomcat CVE-2020-1938 Ghostcat高危文件读取/包含漏洞复现-图片10

3.至此POC结束。利用此漏洞可以读取到例如webapp 配置文件、源代码、数据库配置配置等敏感信息。

三、漏洞排查

(一)下载漏洞扫描脚本,并且解压缩,得到如下扫描脚本(该脚本可以复制到外部使用)。

下载地址:https://github.com/woaiqiukui/CVE-2020-1938TomcatAjpScanner

1.使用python3运行扫描脚本,运行命令为:

python 脚本名.py 字符串

注:字符串可以为指定IP地址,也可以为文件。如下图所示:

(1)扫描指定IP 192.168.1.111

python scan.py 192.168.1.111

(2)也可以生成txt文件,文件中写入要检测的IP地址,命令行的字符串写文件名。

ApacheTomcat CVE-2020-1938 Ghostcat高危文件读取/包含漏洞复现-图片11

2.运行完成后,如下图所示,展示该IP是否存在漏洞。

ApacheTomcat CVE-2020-1938 Ghostcat高危文件读取/包含漏洞复现-图片12

3.并且会将结果保存在同目录下的result.txt中。

ApacheTomcat CVE-2020-1938 Ghostcat高危文件读取/包含漏洞复现-图片13

四、防护方案

(一)截止目前,官方已经发布新版本(9.0.31、8.5.51、7.0.100版本)修复了该漏洞,6.X版本已经停止维护,无法更新。

(二)如果目前系统未用到Tomcat AJP协议,建议直接升级。如果无法升级版本,可以使用如下办法:

1.可以关闭AJP Connector,或者修改监听地址。修改方法如下:编辑<CATALINA_BASE>/conf/server.xml,将<!--<Connector port=”8009” protocol=”AJP/1.3” redirect-Port=”8443”>>将该行注释或者删除,重启Tomcat即可。

2.在安全设备上,做相关安全策略,限制外部IP访问Tomcat AJP Connector端口。

(三)如果目前系统到Tomcat AJP协议,除升级版本外同时为AJP Connector配置secret来设置AJP协议认证凭证。将YOUR_TOMCAT_AJP_SECRET更改为无法轻易猜解的值。

 

写在最后,欢迎大家关注killboy安全实验室微信公众号,全都是干货啊

ApacheTomcat CVE-2020-1938 Ghostcat高危文件读取/包含漏洞复现-图片14

 
枫少@KillBoy
  • ApacheTomcat
  • Ghostcat漏洞
  • it2021
  • it2021.com
  • tomcat
  • 代码执行
  • 安全设备
  • 漏洞复现
  • 漏洞扫描
  • 远程代码执行
评论  32  访客  32
    • 玄冰侠
      玄冰侠 0

      这漏洞有点可怕啊,默认配置就有问题

      • 鹿乃
        鹿乃 0

        8009端口默认开着太危险了,之前部署都没注意

        • 旧橱窗
          旧橱窗 1

          有人试过在linux环境复现吗?

            • 流星逐梦
              流星逐梦 0

              @ 旧橱窗 linux复现步骤差不多,就是路径写法不一样。

            • 暴龙兽
              暴龙兽 0

              我们公司还在用8.5.31版本,得赶紧升级了

                • 花影重
                  花影重 1

                  @ 暴龙兽 你们版本确实在影响范围内,赶紧安排升级吧。

                • 漠言
                  漠言 1

                  配置secret那个方案可行吗?

                    • 藏锋社交者
                      藏锋社交者 0

                      @ 漠言 secret方案我们生产环境用了,暂时没发现问题。

                    • Vibe Magnet
                      Vibe Magnet 0

                      前两天刚碰到这个问题,服务器被扫到了

                      • 草莓奶盖茶
                        草莓奶盖茶 1

                        图片里环境变量配置得挺清楚的

                          • 狐狸精精
                            狐狸精精 0

                            @ 草莓奶盖茶 图片里jdk版本选11,跟文章说的13不一样啊。

                          • 纸上云烟
                            纸上云烟 0

                            这个poc脚本在python3能用吗?

                            • 歪果仁侦探
                              歪果仁侦探 0

                              直接注释掉AJP连接器最省事

                              • Outlaw
                                Outlaw 0

                                感觉修复方案写得挺详细的

                                  • 会唱歌的沙漠
                                    会唱歌的沙漠 0

                                    @ Outlaw 嗯,几种方法都列出来了,照着做就行。

                                  • 古木深
                                    古木深 0

                                    Windows上部署确实比linux麻烦点,环境变量老配错。

                                    • 离谱他妈
                                      离谱他妈 0

                                      之前用docker搭环境省事多了,不用自己配这些。

                                        • 郭强
                                          郭强 0

                                          @ 离谱他妈 确实,docker一键部署省时省力,还避免配置错误。

                                        • 蓝雪花语
                                          蓝雪花语 0

                                          这个poc在python3要改一下,不然会报编码错误。

                                          • 雨巷丁香
                                            雨巷丁香 0

                                            6.x版本居然全中,老系统太危险了。

                                            • 草莓派星星
                                              草莓派星星 0

                                              光关AJP端口不够吧,其他漏洞链起来还是可能被利用。

                                              • 星河视界
                                                星河视界 0

                                                直接升级到最新版最稳妥,别折腾什么临时方案了。

                                                • 未来接口
                                                  未来接口 1

                                                  我们测试环境扫出来一堆,全是这个漏洞。

                                                  • 逐光而行
                                                    逐光而行 1

                                                    这个POC脚本在Windows下跑起来顺利不?

                                                    • 蹦蹦跳跳蛙
                                                      蹦蹦跳跳蛙 0

                                                      我们线上环境用9.0.17,看来也得赶紧打补丁了。

                                                      • 海风轻抚
                                                        海风轻抚 0

                                                        图片里那个路径配置,如果JDK装在其他盘符下是不是也得跟着改?

                                                        • 微风里
                                                          微风里 0

                                                          之前搞过类似测试,光扫描脚本就找了半天。

                                                          • 星际幻想家
                                                            星际幻想家 0

                                                            直接升级版本最省心,那些临时方案总感觉不踏实。

                                                            • 翠微佳人
                                                              翠微佳人 1

                                                              这个修复方案里的secret配置,具体怎么设置啊?

                                                              • 双鱼座的幻想
                                                                双鱼座的幻想 0

                                                                这漏洞影响范围真广,老系统真是重灾区。

                                                                • PumpkinPuff
                                                                  PumpkinPuff 0

                                                                  默认开AJP端口这个设计确实有点迷。

                                                                  • 寞君
                                                                    寞君 0

                                                                    手动配环境变量确实容易出错,特别是新手。

                                                                  匿名

                                                                  发表评论

                                                                  匿名网友

                                                                  拖动滑块以完成验证