hacktricks/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md

7.6 KiB

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:

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 područje komunikacije mašina sa mašinama (M2M) i Interneta stvari (IoT), gde je esencijalno efikasno povezivanje različitih uređaja. Štaviše, 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

Pregled saobraćaja

Kada MQTT posrednici prime paket CONNECT, šalju nazad paket CONNACK. Ovaj paket sadrži povratni kod koji je ključan za razumevanje statusa veze. Povratni kod 0x00 znači da su pristupni podaci prihvaćeni, što označava uspešnu vezu. S druge strane, povratni kod 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"
}

Brute-Force MQTT

Pentesting MQTT

Autentikacija je potpuno opcionalna i čak i ako se vrši autentikacija, šifrovanje se ne koristi podrazumevano (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 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

apt-get install mosquitto mosquitto-clients
mosquitto_sub -t 'test/topic' -v #Subscriribe to 'test/topic'

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:

#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

Šablon objavljivanja/pretplate

Model objavljivanja/pretplate sastoji se od:

  • Izdavač: 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 strane izdavača.
  • Broker: usmerava sve poruke od izdavač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

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 PUBLISH paketa.
  • 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 da sluša poruke sa određene teme.
  • SUBACK (9): Potvrda servera o SUBSCRIBE zahtevu.
  • UNSUBSCRIBE (10): Zahtev klijenta da prestane primati poruke sa određene teme.
  • UNSUBACK (11): Odgovor servera na UNSUBSCRIBE zahtev.
  • PINGREQ (12): Poruka otkucaja poslata od strane klijenta.
  • PINGRESP (13): Odgovor servera na poruku otkucaja.
  • 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: