9.4 KiB
1883 - Pentesting MQTT (Mosquitto)
Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata su HackTricks o scaricare HackTricks in PDF Controlla i PIANI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri La Famiglia PEASS, la nostra collezione di NFT esclusivi
- 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 repos di github.
WhiteIntel
WhiteIntel è un motore di ricerca alimentato dal dark web che offre funzionalità gratuite per verificare se un'azienda o i suoi clienti sono stati compromessi da malware ruba-informazioni.
Il loro obiettivo principale di WhiteIntel è combattere i sequestri di account e gli attacchi ransomware derivanti da malware che rubano informazioni.
Puoi visitare il loro sito web e provare il loro motore gratuitamente su:
{% embed url="https://whiteintel.io" %}
Informazioni di Base
MQ Telemetry Transport (MQTT) è noto come un protocollo di messaggistica di tipo pubblica/sottoscrizione 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 banda limitata, alta latenza o connessioni non affidabili. Gli obiettivi principali di MQTT includono la minimizzazione dell'uso della larghezza di 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 per il crescente campo della comunicazione da macchina a macchina (M2M) e dell'Internet delle cose (IoT), dove è essenziale connettere in modo efficiente una miriade di dispositivi. Inoltre, MQTT è estremamente vantaggioso per le applicazioni mobili, dove è cruciale 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 indietro un pacchetto CONNACK. 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, segnalando 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 non valide, lo scenario sarebbe simile a questo:
{
"returnCode": "0x05",
"description": "Connection Refused, not authorized"
}
Brute-Force MQTT
Pentesting MQTT
L'autenticazione è totalmente facoltativa e anche se viene eseguita l'autenticazione, la crittografia non è utilizzata per impostazione predefinita (le credenziali vengono inviate in chiaro). Gli attacchi MITM possono comunque essere eseguiti per rubare le password.
Per connettersi a un servizio MQTT è possibile utilizzare: https://github.com/bapowell/python-mqtt-client-shell e iscriversi 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
apt-get install mosquitto mosquitto-clients
mosquitto_sub -t 'test/topic' -v #Subscribe to 'test/topic'
mosquitto_sub -h <host-ip> -t "#" -v #Subscribe to ALL topics.
Oppure potresti 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 di Publish/Subscribe
Il modello di 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): Usato 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 che il messaggio sia ricevuto.
- PUBREL (6): Ulteriore garanzia nella consegna dei messaggi, indicando un rilascio del 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): Un messaggio di battito inviato dal client.
- PINGRESP (13): Risposta del server al messaggio di battito.
- DISCONNECT (14): Iniziato dal client per terminare la connessione.
- Due valori, 0 e 15, sono contrassegnati come riservati e ne è vietato l'uso.
Shodan
port:1883 MQTT
WhiteIntel
WhiteIntel è un motore di ricerca alimentato dal dark web che offre funzionalità gratuite per verificare se un'azienda o i suoi clienti sono stati compromessi da malware ruba-informazioni.
Il loro obiettivo principale di WhiteIntel è combattere le violazioni degli account e gli attacchi ransomware derivanti da malware che rubano informazioni.
Puoi visitare il loro sito web e provare il loro motore gratuitamente su:
{% embed url="https://whiteintel.io" %}
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se desideri vedere la tua azienda pubblicizzata in HackTricks o scaricare HackTricks in PDF Controlla i PIANI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di NFT esclusivi
- 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.