mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
Translated ['network-services-pentesting/1883-pentesting-mqtt-mosquitto.
This commit is contained in:
parent
cdbe521a45
commit
1bac6fc70e
1 changed files with 39 additions and 41 deletions
|
@ -2,21 +2,21 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||||
|
|
||||||
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories senden.
|
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories einreichen.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Grundlegende Informationen
|
## Grundlegende Informationen
|
||||||
|
|
||||||
**MQ Telemetry Transport (MQTT)** ist ein bekanntes **Publish/Subscribe-Messaging-Protokoll**, das sich durch seine extreme Einfachheit und Leichtigkeit auszeichnet. Dieses Protokoll ist speziell für Umgebungen entwickelt, in denen Geräte über begrenzte Fähigkeiten verfügen und über Netzwerke arbeiten, die durch geringe Bandbreite, hohe Latenz oder unzuverlässige Verbindungen gekennzeichnet sind. Die Hauptziele von MQTT sind die Minimierung des Netzwerkbandbreitenverbrauchs und die Reduzierung der Anforderungen an Geräteressourcen. Darüber hinaus zielt es darauf ab, eine zuverlässige Kommunikation aufrechtzuerhalten und ein bestimmtes Maß an Zustellgarantie zu bieten. Diese Ziele machen MQTT besonders geeignet für das aufstrebende Feld der **Machine-to-Machine (M2M)-Kommunikation** und das **Internet der Dinge (IoT)**, wo es wichtig ist, eine Vielzahl von Geräten effizient zu verbinden. Darüber hinaus ist MQTT für mobile Anwendungen äußerst vorteilhaft, wo die Einsparung von Bandbreite und Batterielebensdauer entscheidend ist.
|
**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
|
**Standardport:** 1883
|
||||||
```
|
```
|
||||||
|
@ -25,7 +25,7 @@ PORT STATE SERVICE REASON
|
||||||
```
|
```
|
||||||
## Überprüfen des Datenverkehrs
|
## Ü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 ist, um den Verbindungsstatus zu verstehen. Ein Rückgabecode von **0x00** bedeutet, dass die Anmeldeinformationen akzeptiert wurden und eine erfolgreiche Verbindung signalisieren. Andererseits signalisiert ein Rückgabecode von **0x05**, dass die Anmeldeinformationen ungültig sind und somit die Verbindung verhindert wird.
|
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:
|
Wenn beispielsweise der Broker die Verbindung aufgrund ungültiger Anmeldeinformationen ablehnt, würde das Szenario wie folgt aussehen:
|
||||||
```
|
```
|
||||||
|
@ -34,28 +34,27 @@ Wenn beispielsweise der Broker die Verbindung aufgrund ungültiger Anmeldeinform
|
||||||
"description": "Connection Refused, not authorized"
|
"description": "Connection Refused, not authorized"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
![](<../.gitbook/assets/image (645) (1).png>)
|
![](<../.gitbook/assets/image (973).png>)
|
||||||
|
|
||||||
### [**Brute-Force MQTT**](../generic-methodologies-and-resources/brute-force.md#mqtt)
|
### [**Brute-Force MQTT**](../generic-methodologies-and-resources/brute-force.md#mqtt)
|
||||||
|
|
||||||
## Pentesting MQTT
|
## Pentesting MQTT
|
||||||
|
|
||||||
Die Authentifizierung ist völlig optional und selbst wenn eine Authentifizierung durchgeführt wird, wird standardmäßig keine Verschlüsselung verwendet (Anmeldeinformationen werden im Klartext übertragen). MITM-Angriffe können immer noch durchgeführt werden, um Passwörter zu stehlen.
|
**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 [https://github.com/bapowell/python-mqtt-client-shell](https://github.com/bapowell/python-mqtt-client-shell) verwenden und sich selbst für alle Themen abonnieren, indem Sie Folgendes tun:
|
Um eine Verbindung zu einem MQTT-Dienst herzustellen, können Sie verwenden: [https://github.com/bapowell/python-mqtt-client-shell](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)
|
> connect (NOTICE that you need to indicate before this the params of the connection, by default 127.0.0.1:1883)
|
||||||
> subscribe "#" 1
|
> subscribe "#" 1
|
||||||
> subscribe "$SYS/#"
|
> subscribe "$SYS/#"
|
||||||
```
|
```
|
||||||
Sie können auch [**https://github.com/akamai-threat-research/mqtt-pwn**](https://github.com/akamai-threat-research/mqtt-pwn) verwenden.
|
Du könntest auch [**https://github.com/akamai-threat-research/mqtt-pwn**](https://github.com/akamai-threat-research/mqtt-pwn) verwenden.
|
||||||
|
|
||||||
Sie können auch verwenden:
|
|
||||||
```bash
|
```bash
|
||||||
apt-get install mosquitto mosquitto-clients
|
apt-get install mosquitto mosquitto-clients
|
||||||
mosquitto_sub -t 'test/topic' -v #Subscriribe to 'test/topic'
|
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 eine Verbindung zu einem MQTT-Dienst ohne Authentifizierung herzustellen, sich für jedes Thema zu abonnieren und sie anzuhören**:
|
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**:
|
||||||
```python
|
```python
|
||||||
#This is a modified version of https://github.com/Warflop/IOT-MQTT-Exploit/blob/master/mqtt.py
|
#This is a modified version of https://github.com/Warflop/IOT-MQTT-Exploit/blob/master/mqtt.py
|
||||||
import paho.mqtt.client as mqtt
|
import paho.mqtt.client as mqtt
|
||||||
|
@ -92,10 +91,10 @@ von hier: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https
|
||||||
|
|
||||||
Das Publish/Subscribe-Modell besteht aus:
|
Das Publish/Subscribe-Modell besteht aus:
|
||||||
|
|
||||||
* **Publisher**: veröffentlicht eine Nachricht zu einem (oder vielen) Thema(en) im Broker.
|
- **Publisher**: veröffentlicht eine Nachricht zu einem (oder mehreren) Thema(s) im Broker.
|
||||||
* **Subscriber**: abonniert ein (oder viele) Thema(en) im Broker und empfängt alle Nachrichten, die vom Publisher gesendet werden.
|
- **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 Subscriber weiter.
|
- **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).
|
- **Thema**: besteht aus einer oder mehreren Ebenen, die durch einen Schrägstrich getrennt sind (z. B. /smartshouse/livingroom/temperature).
|
||||||
|
|
||||||
### Paketformat <a href="#f15a" id="f15a"></a>
|
### Paketformat <a href="#f15a" id="f15a"></a>
|
||||||
|
|
||||||
|
@ -105,26 +104,25 @@ Jedes MQTT-Paket enthält einen festen Header (Abbildung 02).Abbildung 02: Feste
|
||||||
|
|
||||||
### Pakettypen
|
### Pakettypen
|
||||||
|
|
||||||
* CONNECT (1): Vom Client initiiert, um eine Verbindung zum Server anzufordern.
|
- CONNECT (1): Vom Client initiiert, um eine Verbindung zum Server anzufordern.
|
||||||
* CONNACK (2): Die Bestätigung des Servers für eine erfolgreiche Verbindung.
|
- 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.
|
- PUBLISH (3): Wird verwendet, um eine Nachricht vom Client an den Server oder umgekehrt zu senden.
|
||||||
* PUBACK (4): Bestätigung eines PUBLISH-Pakets.
|
- PUBACK (4): Bestätigung eines PUBLISH-Pakets.
|
||||||
* PUBREC (5): Teil eines Nachrichtenübermittlungsprotokolls, das sicherstellt, dass die Nachricht empfangen wird.
|
- PUBREC (5): Teil eines Nachrichtenzustellungsprotokolls, das sicherstellt, dass die Nachricht empfangen wird.
|
||||||
* PUBREL (6): Weitere Sicherheit bei der Nachrichtenübermittlung, die eine Nachrichtenfreigabe anzeigt.
|
- PUBREL (6): Weitere Sicherheit bei der Nachrichtenzustellung, die eine Nachrichtenfreigabe anzeigt.
|
||||||
* PUBCOMP (7): Letzter Teil des Nachrichtenübermittlungsprotokolls, der den Abschluss anzeigt.
|
- PUBCOMP (7): Abschließender Teil des Nachrichtenzustellungsprotokolls, der den Abschluss anzeigt.
|
||||||
* SUBSCRIBE (8): Anforderung eines Clients, Nachrichten von einem Thema zu empfangen.
|
- SUBSCRIBE (8): Eine Anforderung des Clients, Nachrichten von einem Thema anzuhören.
|
||||||
* SUBACK (9): Die Bestätigung des Servers für eine SUBSCRIBE-Anforderung.
|
- SUBACK (9): Die Bestätigung des Servers für eine SUBSCRIBE-Anforderung.
|
||||||
* UNSUBSCRIBE (10): Anforderung eines Clients, keine Nachrichten mehr von einem Thema zu empfangen.
|
- UNSUBSCRIBE (10): Eine Anforderung des Clients, keine Nachrichten mehr von einem Thema zu empfangen.
|
||||||
* UNSUBACK (11): Die Antwort des Servers auf eine UNSUBSCRIBE-Anforderung.
|
- UNSUBACK (11): Die Antwort des Servers auf eine UNSUBSCRIBE-Anforderung.
|
||||||
* PINGREQ (12): Eine Heartbeat-Nachricht, die vom Client gesendet wird.
|
- PINGREQ (12): Eine Heartbeat-Nachricht, die vom Client gesendet wird.
|
||||||
* PINGRESP (13): Antwort des Servers auf die Heartbeat-Nachricht.
|
- PINGRESP (13): Antwort des Servers auf die Heartbeat-Nachricht.
|
||||||
* DISCONNECT (14): Vom Client initiiert, um die Verbindung zu beenden.
|
- DISCONNECT (14): Vom Client initiiert, um die Verbindung zu beenden.
|
||||||
* Zwei Werte, 0 und 15, sind als reserviert markiert und ihre Verwendung ist verboten.
|
- Zwei Werte, 0 und 15, sind als reserviert markiert und ihre Verwendung ist verboten.
|
||||||
|
|
||||||
|
|
||||||
## Shodan
|
## Shodan
|
||||||
|
|
||||||
* `port:1883 MQTT`
|
- `port:1883 MQTT`
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -132,10 +130,10 @@ Jedes MQTT-Paket enthält einen festen Header (Abbildung 02).Abbildung 02: Feste
|
||||||
|
|
||||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||||
|
|
||||||
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
- Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks in PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
- Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
- Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
- **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories senden.
|
- **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
Loading…
Reference in a new issue