1883 - Pentesting MQTT (Mosquitto)
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
MQ Telemetry Transport (MQTT) jest znany jako protokół komunikacji publish/subscribe, który wyróżnia się ekstremalną prostotą i lekkością. Protokół ten jest specjalnie dostosowany do środowisk, w których urządzenia mają ograniczone możliwości i działają w sieciach charakteryzujących się niską przepustowością, dużą latencją lub niestabilnymi połączeniami. Główne cele MQTT obejmują minimalizację wykorzystania przepustowości sieci oraz zmniejszenie zapotrzebowania na zasoby urządzeń. Dodatkowo, ma na celu utrzymanie niezawodnej komunikacji i zapewnienie pewnego poziomu gwarancji dostarczenia. Cele te sprawiają, że MQTT jest wyjątkowo odpowiedni dla rozwijającej się dziedziny komunikacji maszyna-do-maszyny (M2M) oraz Internetu Rzeczy (IoT), gdzie kluczowe jest efektywne łączenie wielu urządzeń. Ponadto, MQTT jest bardzo korzystny dla aplikacji mobilnych, gdzie oszczędzanie przepustowości i żywotności baterii jest kluczowe.
Domyślny port: 1883
Gdy pakiet CONNECT jest odbierany przez brokerów MQTT, pakiet CONNACK jest wysyłany z powrotem. Pakiet ten zawiera kod zwrotny, który jest kluczowy dla zrozumienia statusu połączenia. Kod zwrotny 0x00 oznacza, że dane uwierzytelniające zostały zaakceptowane, co oznacza udane połączenie. Z drugiej strony, kod zwrotny 0x05 sygnalizuje, że dane uwierzytelniające są nieprawidłowe, co uniemożliwia połączenie.
Na przykład, jeśli broker odrzuca połączenie z powodu nieprawidłowych danych uwierzytelniających, scenariusz wyglądałby mniej więcej tak:
Uwierzytelnianie jest całkowicie opcjonalne i nawet jeśli uwierzytelnianie jest przeprowadzane, szyfrowanie nie jest domyślnie używane (dane uwierzytelniające są przesyłane w postaci niezaszyfrowanej). Ataki MITM mogą nadal być przeprowadzane w celu kradzieży haseł.
Aby połączyć się z usługą MQTT, możesz użyć: https://github.com/bapowell/python-mqtt-client-shell i subskrybować się do wszystkich tematów, wykonując:
Możesz również użyć https://github.com/akamai-threat-research/mqtt-pwn
Możesz także użyć:
Lub możesz uruchomić ten kod, aby spróbować połączyć się z usługą MQTT bez uwierzytelnienia, subskrybować każdy temat i ich słuchać:
stąd: https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b
Model publikacji/subskrypcji składa się z:
Publisher: publikuje wiadomość do jednego (lub wielu) tematów w brokerze.
Subscriber: subskrybuje jeden (lub wiele) tematów w brokerze i otrzymuje wszystkie wiadomości wysyłane przez publikatora.
Broker: kieruje wszystkimi wiadomościami od publikatorów do subskrybentów.
Topic: składa się z jednego lub więcej poziomów oddzielonych ukośnikiem (np. /smartshouse/livingroom/temperature).
Każdy pakiet MQTT zawiera stały nagłówek (Rysunek 02). Rysunek 02: Stały Nagłówek
CONNECT (1): Inicjowany przez klienta w celu zażądania połączenia z serwerem.
CONNACK (2): Potwierdzenie serwera o udanym połączeniu.
PUBLISH (3): Używany do wysyłania wiadomości z klienta do serwera lub odwrotnie.
PUBACK (4): Potwierdzenie pakietu PUBLISH.
PUBREC (5): Część protokołu dostarczania wiadomości zapewniająca, że wiadomość została odebrana.
PUBREL (6): Dalsze zapewnienie w dostarczaniu wiadomości, wskazujące na zwolnienie wiadomości.
PUBCOMP (7): Ostatnia część protokołu dostarczania wiadomości, wskazująca na zakończenie.
SUBSCRIBE (8): Żądanie klienta do nasłuchiwania wiadomości z tematu.
SUBACK (9): Potwierdzenie serwera żądania SUBSCRIBE.
UNSUBSCRIBE (10): Żądanie klienta o zaprzestanie otrzymywania wiadomości z tematu.
UNSUBACK (11): Odpowiedź serwera na żądanie UNSUBSCRIBE.
PINGREQ (12): Wiadomość sygnalizacyjna wysyłana przez klienta.
PINGRESP (13): Odpowiedź serwera na wiadomość sygnalizacyjną.
DISCONNECT (14): Inicjowany przez klienta w celu zakończenia połączenia.
Dwie wartości, 0 i 15, są oznaczone jako zarezerwowane, a ich użycie jest zabronione.
port:1883 MQTT
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)