9.3 KiB
1883 - Testowanie penetracyjne MQTT (Mosquitto)
Zacznij od zera i stań się ekspertem od hakowania AWS dzięki htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud na GitHubie.
WhiteIntel
WhiteIntel to wyszukiwarka zasilana przez dark web, która oferuje darmowe funkcje do sprawdzania, czy firma lub jej klienci zostali skompromitowani przez złośliwe oprogramowanie kradnące informacje.
Głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z oprogramowania kradnącego informacje.
Możesz odwiedzić ich stronę internetową i wypróbować ich silnik za darmo pod adresem:
{% embed url="https://whiteintel.io" %}
Podstawowe informacje
MQ Telemetry Transport (MQTT) jest znany jako protokół komunikacyjny typu publikuj/subskrybuj, który wyróżnia się swoją skrajną prostotą i lekkością. Ten protokół jest specjalnie dostosowany do środowisk, w których urządzenia mają ograniczone możliwości i działają w sieciach charakteryzujących się niskim pasmem, wysokim opóźnieniem lub niestabilnymi połączeniami. Główne cele MQTT obejmują minimalizowanie użycia pasma sieciowego i redukcję zapotrzebowania na zasoby urządzenia. Ponadto dąży do utrzymania niezawodnej komunikacji i zapewnienia pewnego poziomu zapewnienia dostawy. Te cele sprawiają, że MQTT jest wyjątkowo odpowiedni dla rozwijającej się dziedziny komunikacji maszynowej do maszyn (M2M) i Internetu Rzeczy (IoT), gdzie istotne jest efektywne połączenie wielu urządzeń. Ponadto MQTT jest bardzo korzystny dla aplikacji mobilnych, gdzie oszczędzanie pasma i życia baterii jest kluczowe.
Domyślny port: 1883
PORT STATE SERVICE REASON
1883/tcp open mosquitto version 1.4.8 syn-ack
Inspekcja ruchu
Kiedy brokery MQTT otrzymują pakiet CONNECT, wysyłają z powrotem pakiet CONNACK. Ten pakiet zawiera kod zwrotny, który jest kluczowy dla zrozumienia statusu połączenia. Kod zwrotny 0x00 oznacza, że poświadczenia zostały zaakceptowane, sygnalizując udane połączenie. Z kolei kod zwrotny 0x05 oznacza, że poświadczenia są nieprawidłowe, uniemożliwiając połączenie.
Na przykład, jeśli broker odrzuca połączenie z powodu nieprawidłowych poświadczeń, scenariusz wyglądałby mniej więcej tak:
{
"returnCode": "0x05",
"description": "Connection Refused, not authorized"
}
Brute-Force MQTT
Testowanie penetracyjne MQTT
Uwierzytelnianie jest całkowicie opcjonalne i nawet jeśli jest wykonywane, szyfrowanie nie jest domyślnie używane (dane uwierzytelniające są przesyłane w postaci zwykłego tekstu). Ataki typu MITM mogą nadal być przeprowadzane w celu kradzieży haseł.
Aby połączyć się z usługą MQTT, można użyć: https://github.com/bapowell/python-mqtt-client-shell i zasubskrybować się do wszystkich tematów wykonując:
> 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/#"
Możesz również użyć https://github.com/akamai-threat-research/mqtt-pwn
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.
Możesz uruchomić ten kod, aby spróbować połączyć się z usługą MQTT bez uwierzytelnienia, subskrybować każdy temat i nasłuchiwać ich:
#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()
Więcej informacji
zobacz tutaj: https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b
Wzorzec Publikuj/Subskrybuj
Model publikuj/subskrybuj składa się z:
- Publikator: publikuje wiadomość do jednego (lub wielu) tematu(ów) w brokerze.
- Subskrybent: subskrybuje jeden (lub wiele) temat(ów) w brokerze i otrzymuje wszystkie wiadomości wysłane przez publikatora.
- Broker: przekierowuje wszystkie wiadomości od publikatorów do subskrybentów.
- Temat: składa się z jednego lub więcej poziomów oddzielonych ukośnikiem (np. /smartshouse/livingroom/temperature).
Format Pakietu
Każdy pakiet MQTT zawiera stały nagłówek (Rysunek 02).Rysunek 02: Stały Nagłówek
Typy Pakietów
- CONNECT (1): Inicjowany przez klienta w celu nawiązania połączenia z serwerem.
- CONNACK (2): Potwierdzenie serwera udanego połączenia.
- PUBLISH (3): Używany do wysłania wiadomości od klienta do serwera lub odwrotnie.
- PUBACK (4): Potwierdzenie pakietu PUBLISH.
- PUBREC (5): Część protokołu dostarczania wiadomości zapewniająca otrzymanie wiadomości.
- PUBREL (6): Dodatkowe zapewnienie w dostarczaniu wiadomości, wskazujące na wydanie wiadomości.
- PUBCOMP (7): Ostateczna część protokołu dostarczania wiadomości, wskazująca na zakończenie.
- SUBSCRIBE (8): Żądanie klienta o nasłuchiwanie wiadomości z tematu.
- SUBACK (9): Potwierdzenie serwera żądania SUBSCRIBE.
- UNSUBSCRIBE (10): Żądanie klienta zaprzestania odbierania wiadomości z tematu.
- UNSUBACK (11): Odpowiedź serwera na żądanie UNSUBSCRIBE.
- PINGREQ (12): Wiadomość pingowa wysłana przez klienta.
- PINGRESP (13): Odpowiedź serwera na wiadomość pingową.
- DISCONNECT (14): Inicjowany przez klienta w celu zakończenia połączenia.
- Dwa wartości, 0 i 15, są oznaczone jako zarezerwowane i ich użycie jest zabronione.
Shodan
port:1883 MQTT
WhiteIntel
WhiteIntel to wyszukiwarka zasilana dark-webem, która oferuje darmowe funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali skompromitowani przez złośliwe oprogramowanie kradnące informacje.
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za darmo pod adresem:
{% embed url="https://whiteintel.io" %}
Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.