1. 程式人生 > >17.[CVE-2017-12615]Tomcat任意檔案上傳漏洞

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