7.9 KiB
1883 - Pentesting MQTT (Mosquitto)
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai Kyk na die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS Familie, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.
Basiese Inligting
MQ Telemetry Transport (MQTT) staan bekend as 'n uitgee/teken boodskapprokotol wat uitblink deur sy uiterste eenvoud en ligtheid. Hierdie protokol is spesifiek ontwerp vir omgewings waar toestelle beperkte vermoëns het en oor netwerke werk wat gekenmerk word deur lae bandwydte, hoë latentie, of onbetroubare verbindings. Die kern doelwitte van MQTT sluit in die minimalisering van die gebruik van netwerkbandwydte en die vermindering van die eis op toestelbronne. Daarbenewens streef dit daarna om betroubare kommunikasie te handhaaf en 'n sekere vlak van afleweringsversekering te bied. Hierdie doelwitte maak MQTT uiters geskik vir die groeiende veld van masjien-tot-masjien (M2M) kommunikasie en die Internet van Dinge (IoT), waar dit noodsaaklik is om 'n menigte toestelle doeltreffend te koppel. Verder is MQTT baie voordelig vir mobiele toepassings, waar dit belangrik is om bandwydte en batterylewe te bewaar.
Verstekpoort: 1883
PORT STATE SERVICE REASON
1883/tcp open mosquitto version 1.4.8 syn-ack
Inspeksie van die verkeer
Wanneer 'n CONNECT pakkie deur MQTT makelaars ontvang word, word 'n CONNACK pakkie teruggestuur. Hierdie pakkie bevat 'n terugvoerkode wat noodsaaklik is vir die begrip van die verbindingsstatus. 'n Terugvoerkode van 0x00 beteken dat die geloofsbriewe aanvaar is, wat 'n suksesvolle verbinding aandui. Aan die ander kant dui 'n terugvoerkode van 0x05 daarop dat die geloofsbriewe ongeldig is, wat dus die verbinding voorkom.
Byvoorbeeld, as die makelaar die verbinding verwerp weens ongeldige geloofsbriewe, sal die scenario soos volg lyk:
{
"returnCode": "0x05",
"description": "Connection Refused, not authorized"
}
Brute-Force MQTT
Pentesting MQTT
Verifikasie is heeltemal opsioneel en selfs as verifikasie uitgevoer word, word versleuteling nie standaard gebruik nie (geloofsbriewe word in teksvorm gestuur). MITM-aanvalle kan steeds uitgevoer word om wagwoorde te steel.
Om met 'n MQTT-diens te verbind, kan jy gebruik maak van: https://github.com/bapowell/python-mqtt-client-shell en jouself inteken op alle onderwerpe deur:
> 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/#"
Jy kan ook https://github.com/akamai-threat-research/mqtt-pwn gebruik.
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.
Of jy kan hierdie kode hardloop om te probeer om met 'n MQTT-diens sonder verifikasie te verbind, om op elke onderwerp te inteken en na hulle te luister:
#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()
Meer inligting
vanaf hier: https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b
Die Publiseer/Inteken Patroon
Die publiseer/inteken model bestaan uit:
- Publiseerder: publiseer 'n boodskap na een (of baie) onderwerp(e) in die makelaar.
- Intekenaar: teken in op een (of baie) onderwerp(e) in die makelaar en ontvang al die boodskappe wat gestuur is deur die publiseerder.
- Makelaar: roeteer al die boodskappe van die publiseerders na die intekenaars.
- Onderwerp: bestaan uit een of meer vlakke wat geskei word deur 'n skuiwas (bv., /smartshouse/livingroom/temperature).
Pakketformaat
Elke MQTT-pakket bevat 'n vaste kop (Figuur 02).Figuur 02: Vaste Kop
Pakketsoorte
- CONNECT (1): Geïnisieer deur die klient om 'n verbinding met die bediener aan te vra.
- CONNACK (2): Die bediener se erkenning van 'n suksesvolle verbinding.
- PUBLISH (3): Gebruik om 'n boodskap van die klient na die bediener of andersom te stuur.
- PUBACK (4): Erkenning van 'n PUBLISH-pakket.
- PUBREC (5): Deel van 'n boodskapafleweringprotokol wat verseker dat die boodskap ontvang is.
- PUBREL (6): Verdere versekering in boodskapaflewering, wat 'n boodskapvrystelling aandui.
- PUBCOMP (7): Finale deel van die boodskapafleweringprotokol, wat voltooiing aandui.
- SUBSCRIBE (8): 'n Klient se versoek om na boodskappe van 'n onderwerp te luister.
- SUBACK (9): Die bediener se erkenning van 'n SUBSCRIBE-versoek.
- UNSUBSCRIBE (10): 'n Klient se versoek om op te hou om boodskappe van 'n onderwerp te ontvang.
- UNSUBACK (11): Die bediener se reaksie op 'n UNSUBSCRIBE-versoek.
- PINGREQ (12): 'n Hartklopboodskap gestuur deur die klient.
- PINGRESP (13): Die bediener se reaksie op die hartklopboodskap.
- DISCONNECT (14): Geïnisieer deur die klient om die verbinding te beëindig.
- Twee waardes, 0 en 15, is gemerk as voorbehou en hul gebruik is verbode.
Shodan
port:1883 MQTT
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai Kyk na die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS-familie, ons versameling eksklusiewe NFT's
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.