5.9 KiB
Informations de base
MQTT signifie MQ Telemetry Transport. C'est un protocole de messagerie extrêmement simple et léger, de type publication/abonnement, conçu pour les appareils contraints et les réseaux à faible bande passante, à latence élevée ou peu fiables. Les principes de conception visent à minimiser la bande passante du réseau et les exigences en ressources des appareils tout en tentant également d'assurer la fiabilité et un certain degré d'assurance de la livraison. Ces principes se révèlent également idéaux pour le monde émergent de l'Internet des objets (IoT) ou de la communication entre machines (M2M) de dispositifs connectés, ainsi que pour les applications mobiles où la bande passante et la puissance de la batterie sont à un niveau premium.
Port par défaut : 1883
PORT STATE SERVICE REASON
1883/tcp open mosquitto version 1.4.8 syn-ack
Inspection du trafic
Les courtiers MQTT envoient un paquet CONNACK en réponse à un paquet CONNECT. Le code de retour 0x00 indique que les informations d'identification sont valides et le code de retour 0x05 indique qu'elles ne le sont pas. Exemple de 0x05:
Brute-Force MQTT
Pentesting MQTT
L'authentification est totalement facultative et même si l'authentification est effectuée, le chiffrement n'est pas utilisé par défaut (les informations d'identification sont envoyées en clair). Des attaques MITM peuvent encore être exécutées pour voler des mots de passe.
Pour se connecter à un service MQTT, vous pouvez utiliser: https://github.com/bapowell/python-mqtt-client-shell et vous abonner à tous les sujets en faisant:
> 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/#"
Vous pouvez également utiliser https://github.com/akamai-threat-research/mqtt-pwn
apt-get install mosquitto mosquitto-clients
mosquitto_sub -t 'test/topic' -v #Subscriribe to 'test/topic'
Ou vous pouvez exécuter ce code pour essayer de vous connecter à un service MQTT sans authentification, vous abonner à tous les sujets et les écouter :
#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()
Plus d'informations
à partir d'ici: https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b
Le modèle Publish/Subscribe
Le modèle publish/subscribe est composé de :
- Publisher: publie un message sur un (ou plusieurs) sujet(s) dans le courtier.
- Subscriber: s'abonne à un (ou plusieurs) sujet(s) dans le courtier et reçoit tous les messages envoyés par le publisher.
- Broker: route tous les messages des publishers vers les subscribers.
- Sujet: est composé d'un ou plusieurs niveaux qui sont séparés par une barre oblique (par exemple, /smartshouse/livingroom/temperature).
Format de paquet
Chaque paquet MQTT contient un en-tête fixe (Figure 02).Figure 02: En-tête fixe
Le premier champ de l'en-tête fixe représente le type du paquet MQTT. Tous les types de paquets sont répertoriés dans le tableau 01.Table 01: Types de paquets MQTT
Shodan
port:1883 MQTT
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
-
Découvrez La famille PEASS, notre collection exclusive de NFTs
-
Obtenez le swag officiel PEASS & HackTricks
-
Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
-
Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.