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、根據官方補丁升級最新版本

 


免責聲明!

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



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