17.[CVE-2017-12615]Tomcat任意檔案上傳漏洞
【CVE-2017-12615】 Tomcat任意檔案上傳漏洞
首先先貼出wooyun上的一個案例:http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0107097.html
看到這個漏洞讓我想到了IIS6.0任意檔案上傳的漏洞,不過現在大多都用工具,比如IIS put scan...
這裡貼出IIS6.0任意檔案上傳案例:https://blog.csdn.net/qq_42357070/article/details/82183988
能檔案上傳,大多都是許可權過濾不嚴....
漏洞分析:
我們來分析tomcat這個漏洞,需要首先允許tomcat進行PUT操作,問題也就在 /conf/web.xml:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
重點是readonly的那一項,因為其他的都是預設的,只有那個是自己新增的。
我們來看一下readonly這個選項是用來做什麼的吧:
也是在這個web.xml檔案中,已經註釋的地方說明了預設情況下readonly是true,並且如果
是true的話,那麼PUT和DELETE方法是被拒絕的,因此如果手動將readonly選項開啟為false,
那麼就能夠通過PUT方法上傳檔案了。
漏洞復現:
我們開啟tomcat漏洞環境,本次還是使用docker來搭建環境,開啟環境:
使用burpsuite抓包,傳送構造的的webshell:
當我們傳送上圖構造好的jsp馬時發現爆出405錯誤,當我們重新構造:
PUT /joker.jsp 與 PUT /joker.jsp/ 一個成功一個失敗
查閱資料發現,原來default servlet只能處理靜態檔案,而處理jsp檔案是jspservlet,但是隻有defaultservlet
有PUT上傳邏輯,解決的辦法是通過構造特殊的字尾名來進行繞過,從而上傳jsp木馬。
經過驗證,可以在檔名後面新增斜槓 / 或者 %20來進行繞過,應為在windows下,%20(空格)和 / 都是不合法檔名。都會被去掉
我們嘗試訪問上傳上去的jsp馬:
可以看到木馬被正常訪問!
為了方便。一般情況下我們直接使用EXP快速利用。在這裡貼上Bearcat師傅的CVE-2017-12615的EXP下載地址:
https://github.com/iBearcat/CVE-2017-12615
修復方案:
1、配置readonly和VirtualDirContext值為True或註釋引數,禁止使用PUT方法並重啟tomcat
注意:如果禁用PUT方法,對於依賴PUT方法的應用,可能導致業務失效。
2、根據官方補丁升級最新版本