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ół komunikacyjny 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, dąży do utrzymania niezawodnej komunikacji i zapewnienia 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.
Default port: 1883
Kiedy 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 wykonywane, 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 publikacja/subskrypcja 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 publishera.
Broker: kieruje wszystkimi wiadomościami od publisheró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)