# AWS - MQ Enum

{{#include ../../../banners/hacktricks-training.md}}

## Amazon MQ

### Introduzione ai Message Brokers

**Message brokers** fungono da intermediari, facilitando la comunicazione tra diversi sistemi software, che possono essere costruiti su piattaforme varie e programmati in lingue diverse. **Amazon MQ** semplifica il deployment, l'operazione e la manutenzione dei message brokers su AWS. Fornisce servizi gestiti per **Apache ActiveMQ** e **RabbitMQ**, garantendo provisioning senza soluzione di continuità e aggiornamenti automatici delle versioni software.

### AWS - RabbitMQ

RabbitMQ è un noto **software di messaggistica**, conosciuto anche come _message broker_ o _queue manager_. Fondamentalmente è un sistema in cui le code sono configurate. Le applicazioni interagiscono con queste code per **inviare e ricevere messaggi**. I messaggi in questo contesto possono contenere una varietà di informazioni, che vanno da comandi per avviare processi su altre applicazioni (potenzialmente su server diversi) a semplici messaggi di testo. I messaggi sono trattenuti dal software del queue-manager fino a quando non vengono recuperati e elaborati da un'applicazione ricevente. AWS fornisce una soluzione facile da usare per ospitare e gestire i server RabbitMQ.

### AWS - ActiveMQ

Apache ActiveMQ® è un **message broker** open-source leader, basato su Java, noto per la sua versatilità. Supporta più protocolli standard del settore, offrendo ampia compatibilità con i client su una vasta gamma di lingue e piattaforme. Gli utenti possono:

- Connettersi con client scritti in JavaScript, C, C++, Python, .Net e altro.
- Sfruttare il protocollo **AMQP** per integrare applicazioni da diverse piattaforme.
- Utilizzare **STOMP** su websockets per scambi di messaggi tra applicazioni web.
- Gestire dispositivi IoT con **MQTT**.
- Mantenere l'infrastruttura **JMS** esistente ed estenderne le capacità.

La robustezza e la flessibilità di ActiveMQ lo rendono adatto a una moltitudine di requisiti di messaggistica.

## Enumerazione
```bash
# List brokers
aws mq list-brokers

# Get broker info
aws mq describe-broker --broker-id <broker-id>
## Find endpoints in .BrokerInstances
## Find if public accessible in .PubliclyAccessible

# List usernames (only for ActiveMQ)
aws mq list-users --broker-id <broker-id>

# Get user info (PASSWORD NOT INCLUDED)
aws mq describe-user --broker-id <broker-id> --username <username>

# Lits configurations (only for ActiveMQ)
aws mq list-configurations
## Here you can find if simple or LDAP authentication is used

# Creacte Active MQ user
aws mq create-user --broker-id <value> --password <value> --username <value> --console-access
```
> [!WARNING]
> TODO: Indica come enumerare RabbitMQ e ActiveMQ internamente e come ascoltare in tutte le code e inviare dati (invia PR se sai come farlo)

## Privesc

{{#ref}}
../aws-privilege-escalation/aws-mq-privesc/README.md
{{#endref}}

## Accesso non autenticato

{{#ref}}
../aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum/README.md
{{#endref}}

## Persistenza

Se conosci le credenziali per accedere alla console web di RabbitMQ, puoi creare un nuovo utente con privilegi di amministratore.

## Riferimenti

- [https://www.cloudamqp.com/blog/part1-rabbitmq-for-beginners-what-is-rabbitmq.html](https://www.cloudamqp.com/blog/part1-rabbitmq-for-beginners-what-is-rabbitmq.html)
- [https://activemq.apache.org/](https://activemq.apache.org/)

{{#include ../../../banners/hacktricks-training.md}}
