1883 - Pentesting MQTT (Mosquitto)

Reading time: 5 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Basic Information

MQ Telemetry Transport (MQTT) inajulikana kama protocol ya ujumbe ya kuchapisha/kujiunga ambayo inajitokeza kwa urahisi wake mkubwa na mwanga. Protocol hii imeandaliwa mahsusi kwa mazingira ambapo vifaa vina uwezo mdogo na vinafanya kazi juu ya mitandao ambayo ina sifa za upana wa bendi wa chini, ucheleweshaji mkubwa, au muunganisho usio na uhakika. Malengo makuu ya MQTT ni pamoja na kupunguza matumizi ya upana wa bendi ya mtandao na kupunguza mahitaji ya rasilimali za kifaa. Aidha, inakusudia kudumisha mawasiliano ya kuaminika na kutoa kiwango fulani cha uhakikisho wa usambazaji. Malengo haya yanaufanya MQTT kuwa mzuri sana kwa uwanja unaokua wa mawasiliano ya mashine kwa mashine (M2M) na Internet of Things (IoT), ambapo ni muhimu kuunganisha vifaa vingi kwa ufanisi. Zaidi ya hayo, MQTT ni faida kubwa kwa programu za simu, ambapo kuhifadhi upana wa bendi na maisha ya betri ni muhimu.

Default port: 1883

PORT     STATE SERVICE                 REASON
1883/tcp open  mosquitto version 1.4.8 syn-ack

Kukagua trafiki

Wakati pakiti ya CONNECT inapopokelewa na wakala wa MQTT, pakiti ya CONNACK inatumwa nyuma. Pakiti hii ina nambari ya kurudi ambayo ni muhimu kwa kuelewa hali ya muunganisho. Nambari ya kurudi ya 0x00 inamaanisha kwamba akreditivu zimekubaliwa, ikionyesha muunganisho uliofanikiwa. Kwa upande mwingine, nambari ya kurudi ya 0x05 inaashiria kwamba akreditivu si halali, hivyo kuzuia muunganisho.

Kwa mfano, ikiwa wakala atakataa muunganisho kutokana na akreditivu zisizo halali, hali hiyo itakuwa kama ifuatavyo:

{
"returnCode": "0x05",
"description": "Connection Refused, not authorized"
}

Brute-Force MQTT

Pentesting MQTT

Uthibitisho ni wa hiari kabisa na hata kama uthibitisho unafanywa, sifuri hazitumiki kwa chaguo-msingi (taarifa za kuingia zinatumwa kwa maandiko wazi). Mashambulizi ya MITM bado yanaweza kufanywa kuiba nywila.

Ili kuungana na huduma ya MQTT unaweza kutumia: https://github.com/bapowell/python-mqtt-client-shell na jiandikishe kwa mada zote ukifanya:

> 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/#"

Unaweza pia kutumia https://github.com/akamai-threat-research/mqtt-pwn

Unaweza pia kutumia:

bash
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.

Au unaweza kufanya kazi hii kujaribu kuungana na huduma ya MQTT bila uthibitisho, jiandikishe kwa kila mada na zisikize:

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/index.html#')

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()

Taarifa zaidi

from here: https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b

Mfano wa Kuchapisha/Kusajili

Mfano wa kuchapisha/kusajili unajumuisha:

  • Mchapishaji: anachapisha ujumbe kwenye mada moja (au nyingi) katika broker.
  • Mwanachama: anasajili kwenye mada moja (au nyingi) katika broker na kupokea ujumbe wote wanaotumwa na mchapishaji.
  • Broker: inapeleka ujumbe wote kutoka kwa wachapishaji hadi kwa wanachama.
  • Mada: inajumuisha ngazi moja au zaidi ambazo zimegawanywa na slash ya mbele (mfano, /smartshouse/livingroom/temperature).

Muundo wa Paket

Kila paket ya MQTT ina kichwa kisichobadilika (Mchoro 02).Mchoro 02: Kichwa Kisichobadilika

https://miro.medium.com/max/838/1*k6RkAHEk0576geQGUcKSTA.png

Aina za Paket

  • CONNECT (1): Imeanzishwa na mteja kuomba muunganisho na seva.
  • CONNACK (2): Kuthibitisha kwa seva kuhusu muunganisho uliofanikiwa.
  • PUBLISH (3): Inatumika kutuma ujumbe kutoka kwa mteja hadi seva au kinyume chake.
  • PUBACK (4): Kuthibitisha paket ya PUBLISH.
  • PUBREC (5): Sehemu ya itifaki ya usambazaji wa ujumbe inayoakikisha ujumbe umepokelewa.
  • PUBREL (6): Uhakikisho zaidi katika usambazaji wa ujumbe, ikionyesha kutolewa kwa ujumbe.
  • PUBCOMP (7): Sehemu ya mwisho ya itifaki ya usambazaji wa ujumbe, ikionyesha kukamilika.
  • SUBSCRIBE (8): Ombi la mteja kusikiliza ujumbe kutoka mada.
  • SUBACK (9): Kuthibitisha kwa seva kuhusu ombi la SUBSCRIBE.
  • UNSUBSCRIBE (10): Ombi la mteja kusitisha kupokea ujumbe kutoka mada.
  • UNSUBACK (11): Jibu la seva kwa ombi la UNSUBSCRIBE.
  • PINGREQ (12): Ujumbe wa moyo unaotumwa na mteja.
  • PINGRESP (13): Jibu la seva kwa ujumbe wa moyo.
  • DISCONNECT (14): Imeanzishwa na mteja kumaliza muunganisho.
  • Thamani mbili, 0 na 15, zimewekwa kama zilizohifadhiwa na matumizi yao yanakatazwa.

Shodan

  • port:1883 MQTT

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks