8.6 KiB
1883 - Pentesting MQTT (Mosquitto)
Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks beworben sehen möchten oder HackTricks im PDF-Format herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merch
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud Github-Repositories einreichen.
Grundlegende Informationen
MQ Telemetry Transport (MQTT) ist als Publish/Subscribe-Messaging-Protokoll bekannt, das sich durch seine extreme Einfachheit und Leichtigkeit auszeichnet. Dieses Protokoll ist speziell für Umgebungen konzipiert, in denen Geräte über begrenzte Fähigkeiten verfügen und über Netzwerke arbeiten, die durch geringe Bandbreite, hohe Latenzzeiten oder unzuverlässige Verbindungen gekennzeichnet sind. Die Kernziele von MQTT umfassen die Minimierung des Netzwerkbandbreitenverbrauchs und die Reduzierung des Ressourcenbedarfs der Geräte. Darüber hinaus zielt es darauf ab, eine zuverlässige Kommunikation aufrechtzuerhalten und ein gewisses Maß an Zustellgarantie zu bieten. Diese Ziele machen MQTT besonders geeignet für das aufstrebende Gebiet der Maschine-zu-Maschine (M2M)-Kommunikation und das Internet der Dinge (IoT), wo es entscheidend ist, eine Vielzahl von Geräten effizient zu verbinden. Darüber hinaus ist MQTT für mobile Anwendungen äußerst vorteilhaft, wo die Bandbreiteneinsparung und die Batterielaufzeit entscheidend sind.
Standardport: 1883
PORT STATE SERVICE REASON
1883/tcp open mosquitto version 1.4.8 syn-ack
Überprüfen des Datenverkehrs
Wenn ein CONNECT-Paket von MQTT-Brokern empfangen wird, wird ein CONNACK-Paket zurückgesendet. Dieses Paket enthält einen Rückgabecode, der entscheidend für das Verständnis des Verbindungsstatus ist. Ein Rückgabecode von 0x00 bedeutet, dass die Anmeldeinformationen akzeptiert wurden und eine erfolgreiche Verbindung signalisieren. Andererseits deutet ein Rückgabecode von 0x05 darauf hin, dass die Anmeldeinformationen ungültig sind und somit die Verbindung verhindern.
Wenn beispielsweise der Broker die Verbindung aufgrund ungültiger Anmeldeinformationen ablehnt, würde das Szenario wie folgt aussehen:
{
"returnCode": "0x05",
"description": "Connection Refused, not authorized"
}
Brute-Force MQTT
Pentesting MQTT
Die Authentifizierung ist vollständig optional und selbst wenn eine Authentifizierung durchgeführt wird, wird standardmäßig keine Verschlüsselung verwendet (Anmeldeinformationen werden im Klartext gesendet). MITM-Angriffe können dennoch durchgeführt werden, um Passwörter zu stehlen.
Um eine Verbindung zu einem MQTT-Dienst herzustellen, können Sie verwenden: https://github.com/bapowell/python-mqtt-client-shell und sich selbst zu allen Themen abonnieren, indem Sie:
> 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/#"
Du könntest auch https://github.com/akamai-threat-research/mqtt-pwn verwenden.
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.
Oder Sie könnten diesen Code ausführen, um zu versuchen, eine Verbindung zu einem MQTT-Dienst ohne Authentifizierung herzustellen, alle Themen zu abonnieren und sie anzuhören:
#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()
Weitere Informationen
von hier: https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b
Das Publish/Subscribe-Muster
Das Publish/Subscribe-Modell besteht aus:
- Publisher: veröffentlicht eine Nachricht zu einem (oder mehreren) Thema(s) im Broker.
- Subscriber: abonniert ein (oder mehrere) Thema(s) im Broker und empfängt alle Nachrichten, die vom Publisher gesendet werden.
- Broker: leitet alle Nachrichten von den Publishern an die Abonnenten weiter.
- Thema: besteht aus einer oder mehreren Ebenen, die durch einen Schrägstrich getrennt sind (z. B. /smartshouse/livingroom/temperature).
Paketformat
Jedes MQTT-Paket enthält einen festen Header (Abbildung 02).Abbildung 02: Fester Header
Pakettypen
- CONNECT (1): Vom Client initiiert, um eine Verbindung zum Server anzufordern.
- CONNACK (2): Die Bestätigung des Servers über eine erfolgreiche Verbindung.
- PUBLISH (3): Wird verwendet, um eine Nachricht vom Client an den Server oder umgekehrt zu senden.
- PUBACK (4): Bestätigung eines PUBLISH-Pakets.
- PUBREC (5): Teil eines Nachrichtenzustellungsprotokolls, das sicherstellt, dass die Nachricht empfangen wird.
- PUBREL (6): Weitere Sicherheit bei der Nachrichtenzustellung, die eine Nachrichtenfreigabe anzeigt.
- PUBCOMP (7): Abschließender Teil des Nachrichtenzustellungsprotokolls, der den Abschluss anzeigt.
- SUBSCRIBE (8): Eine Anforderung des Clients, Nachrichten von einem Thema anzuhören.
- SUBACK (9): Die Bestätigung des Servers für eine SUBSCRIBE-Anforderung.
- UNSUBSCRIBE (10): Eine Anforderung des Clients, keine Nachrichten mehr von einem Thema zu empfangen.
- UNSUBACK (11): Die Antwort des Servers auf eine UNSUBSCRIBE-Anforderung.
- PINGREQ (12): Eine Heartbeat-Nachricht, die vom Client gesendet wird.
- PINGRESP (13): Antwort des Servers auf die Heartbeat-Nachricht.
- DISCONNECT (14): Vom Client initiiert, um die Verbindung zu beenden.
- Zwei Werte, 0 und 15, sind als reserviert markiert und ihre Verwendung ist verboten.
Shodan
port:1883 MQTT
Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks beworben sehen möchten oder HackTricks in PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merch
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories einreichen.