CVE-2019-0232:Apache Tomcat RCE復現
0X00漏洞簡介
該漏洞是由於Tomcat CGI將命令行參數傳遞給Windows程序的方式存在錯誤,使得CGIServlet被命令注入影響。
該漏洞只影響Windows平台,要求啟用了CGIServlet和enableCmdLineArguments參數。但是CGIServlet和enableCmdLineArguments參數默認情況下都不啟用。
漏洞影響范圍: 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
0X01漏洞環境搭建
1.進行變量配置:
首先下載jdk文件安裝,成功后開始變量配置。
以win7為例開始→我的電腦→右鍵屬性→高級系統設置→環境變量→系統變量→新建
新建變量名為JAVA_HOME的變量變量值為你安裝jdk的路徑
例:變量名:JAVA_HOME變量值:C:\Program Files (x86)\Java\jdk1.8.0_73
新建變量名為JRE_HOME的變量變量值為你安裝jdk文件夾中jre文件夾的路徑
例:變量名JRE_HOME變量值: C:\Program Files (x86)\Java\jdk1.8.0_73\jre
新建變量名為CLASSPATH的變量變量值為.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(ps:前面有個點)
在變量path新增變量值為;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin(ps:前面有;)
配好變量后打開cmd命令框輸入java –version出現java版本號等信息則說明變量安裝成功。
2.將你的tomcat文件解壓到你要安裝的文件夾,進入文件夾中的bin文件夾,使用cmd命令執行startup.bat文件,出現加載界面,待加載完成后在瀏覽器訪問http://localhost:8080界面訪問成功則說明tomcat安裝成功。
https://archive.apache.org/dist/tomcat/ 該鏈接為tomcat各個版本下載鏈接
3.修改配置文件
Tomcat的CGI_Servlet組件默認是關閉的,在 conf/web.xml 中找到注釋的CGIServlet部分,去掉注釋,並配置enableCmdLineArguments和executable(需要取消掉注釋的一共是倆部分)
(ps:下方紅框內的內容需要手打,原文件本來沒有這個參數,9.0版本默認關閉)
接着修改conf/context.xml中的<Context>添加privileged="true"語句
然后在C:\Users\lenovo\Desktop\apache-tomcat-9.0.13\apache-tomcat-9.0.13
\webapps\ROOT\WEB-INF下創建一個cgi-bin文件夾,並在文件夾內創建一個bat文件可以什么都不寫或者寫一些bat語句。
到此所有的環境准備完成。
4.重啟tomcat服務(確保配置生效)
5.利用payload為:
http://localhost:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Ccalc.exe
該payload為打開計算器
訪問之后成功打開計算器
0X02漏洞原理
漏洞相關的代碼在 tomcat\java\org\apache\catalina\servlets\CGIServlet.java 中,CGIServlet提供了一個cgi的調用接口,在啟用 enableCmdLineArguments 參數時,會根據RFC 3875來從Url參數中生成命令行參數,並把參數傳遞至Java的 Runtime 執行。 這個漏洞是因為 Runtime.getRuntime().exec 在Windows中和Linux中底層實現不同導致的。
但是在tomcat9.0.13中已經嚴格限制了有效字符
0X03漏洞修復
因為在9.版本以上CGIServlet和enableCmdLineArguments參數默認情況下都不啟用
所以影響不是很大。
開發者在URLDecoder.decode解碼后增加一個正則表達式驗證,毋庸置疑,目的肯定是檢測url解碼后的字符串輸入的合法性。
因此最有效的修復方式是:
- 禁用enableCmdLineArguments參數。
- 在conf/web.xml中覆寫采用更嚴格的參數合法性檢驗規則。
- 升級tomcat到9.0.17以上版本。