8 KiB
1883 - Pentesting MQTT (Mosquitto)
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata in HackTricks o scaricare HackTricks in PDF Controlla i PIANI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di esclusive NFT
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud github repos.
Informazioni di base
MQ Telemetry Transport (MQTT) è noto come un protocollo di messaggistica publish/subscribe che si distingue per la sua estrema semplicità e leggerezza. Questo protocollo è appositamente progettato per ambienti in cui i dispositivi hanno capacità limitate e operano su reti caratterizzate da banda ridotta, alta latenza o connessioni non affidabili. Gli obiettivi principali di MQTT includono la riduzione dell'utilizzo della banda di rete e la riduzione della richiesta di risorse del dispositivo. Inoltre, mira a mantenere una comunicazione affidabile e a fornire un certo livello di garanzia di consegna. Questi obiettivi rendono MQTT eccezionalmente adatto al crescente campo della comunicazione machine-to-machine (M2M) e dell'Internet delle cose (IoT), dove è essenziale connettere in modo efficiente una miriade di dispositivi. Inoltre, MQTT è molto vantaggioso per le applicazioni mobili, dove è fondamentale conservare la larghezza di banda e la durata della batteria.
Porta predefinita: 1883
PORT STATE SERVICE REASON
1883/tcp open mosquitto version 1.4.8 syn-ack
Ispezione del traffico
Quando un pacchetto CONNECT viene ricevuto dai broker MQTT, viene inviato un pacchetto CONNACK in risposta. Questo pacchetto contiene un codice di ritorno che è fondamentale 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 indica che le credenziali sono invalide, impedendo così la connessione.
Ad esempio, se il broker rifiuta la connessione a causa di credenziali invalide, lo scenario sarebbe simile a questo:
{
"returnCode": "0x05",
"description": "Connection Refused, not authorized"
}
Brute-Force MQTT
Pentesting MQTT
L'autenticazione è totalmente opzionale e anche se viene eseguita l'autenticazione, la crittografia non viene utilizzata di default (le credenziali vengono inviate in chiaro). Gli attacchi MITM possono comunque essere eseguiti per rubare le password.
Per connettersi a un servizio MQTT puoi utilizzare: https://github.com/bapowell/python-mqtt-client-shell e iscriverti a tutti gli argomenti facendo:
> connect (NOTICE that you need to indicate before this the params of the connection, by default 127.0.0.1:1883)
> subscribe "#" 1
> subscribe "$SYS/#"
Puoi anche utilizzare https://github.com/akamai-threat-research/mqtt-pwn
Puoi anche utilizzare:
apt-get install mosquitto mosquitto-clients
mosquitto_sub -t 'test/topic' -v #Subscriribe to 'test/topic'
Oppure puoi eseguire questo codice per provare a connetterti a un servizio MQTT senza autenticazione, iscriverti a tutti gli argomenti e ascoltarli:
#This is a modified version of https://github.com/Warflop/IOT-MQTT-Exploit/blob/master/mqtt.py
import paho.mqtt.client as mqtt
import time
import os
HOST = "127.0.0.1"
PORT = 1883
def on_connect(client, userdata, flags, rc):
client.subscribe('#', qos=1)
client.subscribe('$SYS/#')
def on_message(client, userdata, message):
print('Topic: %s | QOS: %s | Message: %s' % (message.topic, message.qos, message.payload))
def main():
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(HOST, PORT)
client.loop_start()
#time.sleep(10)
#client.loop_stop()
if __name__ == "__main__":
main()
Ulteriori 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ù) topic nel broker.
- Subscriber: si iscrive a uno (o più) topic nel broker e riceve tutti i messaggi inviati dal publisher.
- Broker: instrada tutti i messaggi dai publisher ai subscriber.
- Topic: è composto da uno o più livelli separati da una barra (ad esempio, /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): Conferma del server di una connessione riuscita.
- PUBLISH (3): Utilizzato per inviare un messaggio dal client al server o viceversa.
- PUBACK (4): Conferma di un pacchetto PUBLISH.
- PUBREC (5): Parte di un protocollo di consegna dei messaggi che garantisce la ricezione del messaggio.
- PUBREL (6): Ulteriore garanzia nella consegna dei messaggi, indicando il rilascio di un messaggio.
- PUBCOMP (7): Parte finale del protocollo di consegna dei messaggi, indicando il completamento.
- SUBSCRIBE (8): Richiesta di un client di ascoltare i messaggi da un topic.
- SUBACK (9): Conferma del server di una richiesta di SUBSCRIBE.
- UNSUBSCRIBE (10): Richiesta di un client di smettere di ricevere messaggi da un topic.
- UNSUBACK (11): Risposta del server a una richiesta di UNSUBSCRIBE.
- PINGREQ (12): 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 l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata in HackTricks o scaricare HackTricks in PDF Controlla i PACCHETTI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di esclusive NFT
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR a HackTricks e HackTricks Cloud github repos.