7.7 KiB
1883 - Pentesting MQTT (Mosquitto)
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako inatangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MPANGO WA KUJIUNGA!
- Pata swag rasmi wa PEASS & HackTricks
- Gundua The PEASS Family, mkusanyiko wetu wa kipekee wa NFTs
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwenye HackTricks na HackTricks Cloud repos za github.
Taarifa Msingi
MQ Telemetry Transport (MQTT) inajulikana kama itifaki ya ujumbe ya kuchapisha/kusubiri ambayo inajulikana kwa umepesi wake na urahisi wake. Itifaki hii imeundwa mahsusi kwa mazingira ambapo vifaa vina uwezo mdogo na hufanya kazi kwenye mitandao ambayo inajulikana kwa upeo mdogo wa kubandwidth, kuchelewa kwa juu, au uhusiano usioaminika. Lengo kuu la MQTT ni kupunguza matumizi ya kubandwidth ya mtandao na kupunguza mahitaji kwenye rasilimali za kifaa. Aidha, inalenga kudumisha mawasiliano ya kuaminika na kutoa kiwango fulani cha uhakikisho wa utoaji. Malengo haya yanafanya MQTT kuwa muhimu sana kwa uwanja unaokua wa mawasiliano ya kifaa-kwa-kifaa (M2M) na Internet of Things (IoT), ambapo ni muhimu kuunganisha vifaa vingi kwa ufanisi. Zaidi ya hayo, MQTT ni muhimu sana kwa programu za simu, ambapo kuhifadhi kubandwidth na maisha ya betri ni muhimu.
Bandari ya chaguo-msingi: 1883
PORT STATE SERVICE REASON
1883/tcp open mosquitto version 1.4.8 syn-ack
Ukaguzi wa trafiki
Wakati pakiti ya CONNECT inapokelewa na wakala wa MQTT, pakiti ya CONNACK inatumwa kujibu. Pakiti hii ina kificho cha kurudi ambacho ni muhimu kwa kuelewa hali ya uhusiano. Kificho cha kurudi cha 0x00 kinamaanisha kuwa vibali vimekubaliwa, ikionyesha uhusiano uliofanikiwa. Kwa upande mwingine, kificho cha kurudi cha 0x05 kinamaanisha kuwa vibali ni batili, hivyo kuzuia uhusiano.
Kwa mfano, ikiwa wakala anakataa uhusiano kutokana na vibali batili, hali itaonekana kama ifuatavyo:
{
"returnCode": "0x05",
"description": "Connection Refused, not authorized"
}
Brute-Force MQTT
Pentesting MQTT
Uthibitishaji ni hiari kabisa na hata kama uthibitishaji unafanywa, encryption haijatumika kwa chaguo-msingi (vitambulisho vinatumwa kwa wazi). Mashambulizi ya MITM bado yanaweza kutekelezwa ili kuiba nywila.
Kuunganisha kwenye huduma ya MQTT unaweza kutumia: https://github.com/bapowell/python-mqtt-client-shell na jiandikishe kwenye mada zote kwa kufanya:
> 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:
apt-get install mosquitto mosquitto-clients
mosquitto_sub -t 'test/topic' -v #Subscriribe to 'test/topic'
Au unaweza kukimbia kificho hiki ili kujaribu kuunganisha kwenye huduma ya MQTT bila uwakilishi, kujiandikisha kwenye kila mada na kuzisikiliza:
#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()
Taarifa zaidi
kutoka hapa: https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b
Mfano wa Kuchapisha/Kusikiliza
Mfano wa kuchapisha/kusikiliza unajumuisha:
- Mchapishaji: anachapisha ujumbe kwenye mada moja (au nyingi) kwenye mpatanishi.
- Msikilizaji: anasikiliza mada moja (au nyingi) kwenye mpatanishi na kupokea ujumbe wote uliotumwa na mchapishaji.
- Mpatanishi: anaratibu ujumbe wote kutoka kwa wachapishaji kwenda kwa wasikilizaji.
- Mada: inajumuisha kiwango kimoja au zaidi kilichotenganishwa na kibano cha mbele (kwa mfano, /smartshouse/livingroom/temperature).
Muundo wa Pakiti
Kila pakiti ya MQTT ina kichwa kilichofungwa (Figure 02).Figure 02: Kichwa Kilichofungwa
Aina za Pakiti
- CONNECT (1): Ilianzishwa na mteja kuomba uhusiano na seva.
- CONNACK (2): Kuthibitisho cha seva ya uhusiano uliofanikiwa.
- PUBLISH (3): Hutumiwa kutuma ujumbe kutoka kwa mteja kwenda kwa seva au kinyume chake.
- PUBACK (4): Kuthibitisho cha pakiti ya PUBLISH.
- PUBREC (5): Sehemu ya itifaki ya utoaji ujumbe inayohakikisha ujumbe unapokelewa.
- PUBREL (6): Uhakikisho zaidi katika utoaji wa ujumbe, ukionyesha kutolewa kwa ujumbe.
- PUBCOMP (7): Sehemu ya mwisho ya itifaki ya utoaji ujumbe, ikionyesha kukamilika.
- SUBSCRIBE (8): Ombi la mteja kusikiliza ujumbe kutoka kwa mada.
- SUBACK (9): Kuthibitisho cha seva ya ombi la SUBSCRIBE.
- UNSUBSCRIBE (10): Ombi la mteja kuacha kupokea ujumbe kutoka kwa 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): Ilianzishwa na mteja kumaliza uhusiano.
- Thamani mbili, 0 na 15, zimehifadhiwa na matumizi yake ni marufuku.
Shodan
port:1883 MQTT
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ina tangazwa kwenye HackTricks au kupakua HackTricks kwa muundo wa PDF Angalia MPANGO WA KUJIUNGA!
- Pata swag rasmi wa PEASS & HackTricks
- Gundua The PEASS Family, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PR kwa HackTricks na HackTricks Cloud github repos.