1883 - Pentesting MQTT (Mosquitto)
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Basic Information
MQ Telemetry Transport (MQTT) è conosciuto come un protocollo di messaggistica publish/subscribe che si distingue per la sua estrema semplicità e leggerezza. Questo protocollo è specificamente progettato per ambienti in cui i dispositivi hanno capacità limitate e operano su reti caratterizzate da bassa larghezza di banda, alta latenza o connessioni inaffidabili. Gli obiettivi principali di MQTT includono la minimizzazione dell'uso della larghezza di banda di rete e la riduzione della domanda sulle risorse dei dispositivi. Inoltre, mira a mantenere una comunicazione affidabile e fornire un certo livello di garanzia di consegna. Questi obiettivi rendono MQTT eccezionalmente adatto per il crescente campo della comunicazione macchina-a-macchina (M2M) e dell'Internet delle Cose (IoT), dove è essenziale connettere in modo efficiente una miriade di dispositivi. Inoltre, MQTT è altamente vantaggioso per le applicazioni mobili, dove è cruciale conservare la larghezza di banda e la durata della batteria.
Default port: 1883
Ispezionare il traffico
Quando un pacchetto CONNECT viene ricevuto dai broker MQTT, un pacchetto CONNACK viene inviato indietro. Questo pacchetto contiene un codice di ritorno che è cruciale per comprendere lo stato della connessione. Un codice di ritorno di 0x00 significa che le credenziali sono state accettate, indicando una connessione riuscita. D'altra parte, un codice di ritorno di 0x05 segnala che le credenziali non sono valide, impedendo così la connessione.
Ad esempio, se il broker rifiuta la connessione a causa di credenziali non valide, lo scenario apparirebbe in questo modo:
Pentesting MQTT
L'autenticazione è totalmente opzionale e anche se l'autenticazione viene eseguita, la crittografia non è utilizzata per impostazione predefinita (le credenziali vengono inviate in chiaro). Gli attacchi MITM possono ancora essere eseguiti per rubare le password.
Per connettersi a un servizio MQTT puoi usare: https://github.com/bapowell/python-mqtt-client-shell e iscriverti a tutti gli argomenti facendo:
Puoi anche usare https://github.com/akamai-threat-research/mqtt-pwn
Puoi anche usare:
Oppure puoi eseguire questo codice per provare a connetterti a un servizio MQTT senza autenticazione, iscriverti a ogni argomento e ascoltarli:
Maggiori informazioni
da qui: https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b
Il modello Publish/Subscribe
Il modello publish/subscribe è composto da:
Publisher: pubblica un messaggio su uno (o più) argomento(i) nel broker.
Subscriber: si iscrive a uno (o più) argomento(i) nel broker e riceve tutti i messaggi inviati dal publisher.
Broker: instrada tutti i messaggi dai publisher ai subscriber.
Topic: consiste in uno o più livelli separati da una barra obliqua (ad es., /smartshouse/livingroom/temperature).
Formato del pacchetto
Ogni pacchetto MQTT contiene un'intestazione fissa (Figura 02). Figura 02: Intestazione fissa
Tipi di pacchetto
CONNECT (1): Iniziato dal client per richiedere una connessione al server.
CONNACK (2): L'accettazione del server di una connessione riuscita.
PUBLISH (3): Utilizzato per inviare un messaggio dal client al server o viceversa.
PUBACK (4): Accettazione di un pacchetto PUBLISH.
PUBREC (5): Parte di un protocollo di consegna dei messaggi che garantisce che il messaggio sia ricevuto.
PUBREL (6): Ulteriore garanzia nella consegna del messaggio, indicando un rilascio del messaggio.
PUBCOMP (7): Parte finale del protocollo di consegna dei messaggi, che indica il completamento.
SUBSCRIBE (8): Richiesta di un client per ascoltare i messaggi da un argomento.
SUBACK (9): L'accettazione del server di una richiesta SUBSCRIBE.
UNSUBSCRIBE (10): Richiesta di un client per smettere di ricevere messaggi da un argomento.
UNSUBACK (11): La risposta del server a una richiesta UNSUBSCRIBE.
PINGREQ (12): Un messaggio di heartbeat inviato dal client.
PINGRESP (13): Risposta del server al messaggio di heartbeat.
DISCONNECT (14): Iniziato dal client per terminare la connessione.
Due valori, 0 e 15, sono contrassegnati come riservati e il loro utilizzo è vietato.
Shodan
port:1883 MQTT
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Last updated