mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-27 07:01:09 +00:00
167 lines
9.5 KiB
Markdown
167 lines
9.5 KiB
Markdown
# 1883 - Pentesting MQTT (Mosquitto)
|
|
|
|
{% hint style="success" %}
|
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Support HackTricks</summary>
|
|
|
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
|
|
</details>
|
|
{% endhint %}
|
|
|
|
### [WhiteIntel](https://whiteintel.io)
|
|
|
|
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
[**WhiteIntel**](https://whiteintel.io) ist eine **dark-web**-gestützte Suchmaschine, die **kostenlose** Funktionen bietet, um zu überprüfen, ob ein Unternehmen oder dessen Kunden durch **Stealer-Malware** **kompromittiert** wurden.
|
|
|
|
Das Hauptziel von WhiteIntel ist es, Kontoübernahmen und Ransomware-Angriffe zu bekämpfen, die aus informationsstehlender Malware resultieren.
|
|
|
|
Sie können ihre Website besuchen und ihre Engine **kostenlos** ausprobieren unter:
|
|
|
|
{% embed url="https://whiteintel.io" %}
|
|
|
|
***
|
|
|
|
## Grundinformationen
|
|
|
|
**MQ Telemetry Transport (MQTT)** ist bekannt als ein **Publish/Subscribe-Nachrichtenprotokoll**, 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 betrieben werden, die durch niedrige Bandbreite, hohe Latenz oder unzuverlässige Verbindungen gekennzeichnet sind. Die Hauptziele von MQTT sind die Minimierung der Nutzung der Netzwerkbandbreite und die Reduzierung der Anforderungen an die Ressourcen 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 Feld der **Machine-to-Machine (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 es wichtig ist, Bandbreite und Akkulaufzeit zu sparen.
|
|
|
|
**Standardport:** 1883
|
|
```
|
|
PORT STATE SERVICE REASON
|
|
1883/tcp open mosquitto version 1.4.8 syn-ack
|
|
```
|
|
## Inspecting the traffic
|
|
|
|
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, was eine erfolgreiche Verbindung signalisiert. Andererseits signalisiert ein Rückgabecode von **0x05**, dass die Anmeldeinformationen ungültig sind, wodurch die Verbindung verhindert wird.
|
|
|
|
Zum Beispiel, wenn der Broker die Verbindung aufgrund ungültiger Anmeldeinformationen ablehnt, würde das Szenario folgendermaßen aussehen:
|
|
```
|
|
{
|
|
"returnCode": "0x05",
|
|
"description": "Connection Refused, not authorized"
|
|
}
|
|
```
|
|
![](<../.gitbook/assets/image (976).png>)
|
|
|
|
### [**Brute-Force MQTT**](../generic-methodologies-and-resources/brute-force.md#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 gesendet). MITM-Angriffe können weiterhin ausgefü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](https://github.com/bapowell/python-mqtt-client-shell) und sich selbst zu allen Themen anmelden, 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/#"
|
|
```
|
|
Sie können auch verwenden:
|
|
```bash
|
|
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, sich ohne Authentifizierung mit einem MQTT-Dienst zu verbinden, sich für jedes Thema anzumelden und sie anzuhören**:
|
|
```python
|
|
#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()
|
|
```
|
|
## Mehr Informationen
|
|
|
|
von hier: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b)
|
|
|
|
### Das Publish/Subscribe-Muster <a href="#b667" id="b667"></a>
|
|
|
|
Das Publish/Subscribe-Modell besteht aus:
|
|
|
|
* **Publisher**: veröffentlicht eine Nachricht an ein (oder mehrere) Thema(en) im Broker.
|
|
* **Subscriber**: abonniert ein (oder mehrere) Thema(en) im Broker und erhält alle Nachrichten, die vom Publisher gesendet werden.
|
|
* **Broker**: leitet alle Nachrichten von den Publishern zu den Subscribern weiter.
|
|
* **Thema**: besteht aus einem oder mehreren Ebenen, die durch einen Schrägstrich (z. B. /smartshouse/livingroom/temperature) getrennt sind.
|
|
|
|
### Paketformat <a href="#f15a" id="f15a"></a>
|
|
|
|
Jedes MQTT-Paket enthält einen festen Header (Abbildung 02). Abbildung 02: Fester Header
|
|
|
|
![https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png](https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png)
|
|
|
|
### Pakettypen
|
|
|
|
* CONNECT (1): Vom Client initiiert, um eine Verbindung zum Server anzufordern.
|
|
* CONNACK (2): Die Bestätigung des Servers für 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 Nachrichtenübertragungsprotokolls, das sicherstellt, dass die Nachricht empfangen wird.
|
|
* PUBREL (6): Weitere Bestätigung der Nachrichtenübertragung, die eine Nachrichtenfreigabe anzeigt.
|
|
* PUBCOMP (7): Letzter Teil des Nachrichtenübertragungsprotokolls, der den Abschluss anzeigt.
|
|
* SUBSCRIBE (8): Eine Anfrage des Clients, um Nachrichten von einem Thema zu empfangen.
|
|
* SUBACK (9): Die Bestätigung des Servers für eine SUBSCRIBE-Anfrage.
|
|
* UNSUBSCRIBE (10): Eine Anfrage des Clients, um das Empfangen von Nachrichten von einem Thema zu stoppen.
|
|
* UNSUBACK (11): Die Antwort des Servers auf eine UNSUBSCRIBE-Anfrage.
|
|
* PINGREQ (12): Eine Herzschlagnachricht, die vom Client gesendet wird.
|
|
* PINGRESP (13): Die Antwort des Servers auf die Herzschlagnachricht.
|
|
* DISCONNECT (14): Vom Client initiiert, um die Verbindung zu beenden.
|
|
* Zwei Werte, 0 und 15, sind als reserviert gekennzeichnet und ihre Verwendung ist verboten.
|
|
|
|
## Shodan
|
|
|
|
* `port:1883 MQTT`
|
|
|
|
### [WhiteIntel](https://whiteintel.io)
|
|
|
|
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
[**WhiteIntel**](https://whiteintel.io) ist eine **Dark-Web**-unterstützte Suchmaschine, die **kostenlose** Funktionen bietet, um zu überprüfen, ob ein Unternehmen oder dessen Kunden von **Stealer-Malware** **kompromittiert** wurden.
|
|
|
|
Ihr Hauptziel von WhiteIntel ist es, Kontoübernahmen und Ransomware-Angriffe zu bekämpfen, die durch informationsstehlende Malware verursacht werden.
|
|
|
|
Sie können ihre Website besuchen und ihre Engine **kostenlos** ausprobieren unter:
|
|
|
|
{% embed url="https://whiteintel.io" %}
|
|
|
|
{% hint style="success" %}
|
|
Lernen & üben Sie AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Lernen & üben Sie GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Unterstützen Sie HackTricks</summary>
|
|
|
|
* Überprüfen Sie die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
|
|
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Teilen Sie Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos senden.
|
|
|
|
</details>
|
|
{% endhint %}
|