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

142 lines
8 KiB
Markdown
Raw Normal View History

2022-08-12 14:24:34 +00:00
# 1883 - Pentesting MQTT (Mosquitto)
2022-04-28 16:01:33 +00:00
<details>
2024-02-11 02:07:06 +00:00
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 02:07:06 +00:00
Ander maniere om HackTricks te ondersteun:
2022-04-28 16:01:33 +00:00
2024-02-11 02:07:06 +00:00
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou hacktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-repos.
2022-04-28 16:01:33 +00:00
</details>
2024-02-11 02:07:06 +00:00
## Basiese Inligting
2024-02-11 02:07:06 +00:00
**MQ Telemetry Transport (MQTT)** staan bekend as 'n **uitgee/inteken-boodskapprotokol** wat uitstaan vir sy buitengewone 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 verbindinge. Die kerndoelwitte van MQTT sluit in die minimalisering van die gebruik van netwerkbandwydte en die vermindering van die vraag na toestelhulpbronne. 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 of Things (IoT)**, waar dit noodsaaklik is om 'n magdom toestelle doeltreffend te koppel. Verder is MQTT baie voordelig vir mobiele toepassings, waar die besparing van bandwydte en batterylewe van kritieke belang is.
2024-02-11 02:07:06 +00:00
**Verstekpoort:** 1883
```
2020-09-24 18:58:31 +00:00
PORT STATE SERVICE REASON
1883/tcp open mosquitto version 1.4.8 syn-ack
```
2024-02-11 02:07:06 +00:00
## Inspekteer die verkeer
2020-09-24 18:58:31 +00:00
2024-02-11 02:07:06 +00:00
Wanneer 'n **CONNECT** pakkie ontvang word deur MQTT makelaars, word 'n **CONNACK** pakkie teruggestuur. Hierdie pakkie bevat 'n terugvoerkode wat noodsaaklik is vir die verstaan van die verbindingsstatus. 'n Terugvoerkode van **0x00** beteken dat die geloofsbriewe aanvaar is, wat 'n suksesvolle verbinding aandui. Aan die ander kant, 'n terugvoerkode van **0x05** dui daarop dat die geloofsbriewe ongeldig is en dus die verbinding verhoed.
2024-02-08 21:36:35 +00:00
2024-02-11 02:07:06 +00:00
Byvoorbeeld, as die makelaar die verbinding verwerp as gevolg van ongeldige geloofsbriewe, sal die scenario soos volg lyk:
2024-02-08 21:36:35 +00:00
```
{
2024-02-11 02:07:06 +00:00
"returnCode": "0x05",
"description": "Connection Refused, not authorized"
2024-02-08 21:36:35 +00:00
}
```
2022-03-09 12:12:51 +00:00
![](<../.gitbook/assets/image (645) (1).png>)
2022-02-19 19:42:58 +00:00
2022-08-12 14:24:34 +00:00
### [**Brute-Force MQTT**](../generic-methodologies-and-resources/brute-force.md#mqtt)
2022-02-19 19:42:58 +00:00
2022-08-12 14:24:34 +00:00
## Pentesting MQTT
2024-02-11 02:07:06 +00:00
**Verifikasie is heeltemal opsioneel** en selfs as verifikasie uitgevoer word, **word versleuteling nie standaard gebruik nie** (legitimasie-inligting word in duidelike teks gestuur). MITM-aanvalle kan steeds uitgevoer word om wagwoorde te steel.
2024-02-11 02:07:06 +00:00
Om met 'n MQTT-diens te verbind, kan jy gebruik maak van: [https://github.com/bapowell/python-mqtt-client-shell](https://github.com/bapowell/python-mqtt-client-shell) en skryf jouself in vir alle onderwerpe deur die volgende te doen:
```
> 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/#"
```
2024-02-11 02:07:06 +00:00
Jy kan ook gebruik maak van [**https://github.com/akamai-threat-research/mqtt-pwn**](https://github.com/akamai-threat-research/mqtt-pwn)
2024-02-11 02:07:06 +00:00
Jy kan ook gebruik maak van:
2022-02-19 19:42:58 +00:00
```bash
apt-get install mosquitto mosquitto-clients
mosquitto_sub -t 'test/topic' -v #Subscriribe to 'test/topic'
```
2024-02-11 02:07:06 +00:00
Of jy kan **hierdie kode uitvoer om te probeer om aan te sluit by 'n MQTT-diens sonder verifikasie, inteken op elke onderwerp en na hulle luister**:
```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):
2024-02-11 02:07:06 +00:00
client.subscribe('#', qos=1)
client.subscribe('$SYS/#')
def on_message(client, userdata, message):
2024-02-11 02:07:06 +00:00
print('Topic: %s | QOS: %s | Message: %s' % (message.topic, message.qos, message.payload))
def main():
2024-02-11 02:07:06 +00:00
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__":
2024-02-11 02:07:06 +00:00
main()
```
2024-02-11 02:07:06 +00:00
## Meer inligting
2024-02-11 02:07:06 +00:00
vanaf hier: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b)
2024-02-11 02:07:06 +00:00
### Die Publiseer/Inteken Patroon <a href="#b667" id="b667"></a>
2024-02-11 02:07:06 +00:00
Die publiseer/inteken model bestaan uit:
2024-02-11 02:07:06 +00:00
* **Uitgewer**: 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 van die uitgewer gestuur word.
* **Makelaar**: roeteer al die boodskappe van die uitgewers na die intekenaars.
* **Onderwerp**: bestaan uit een of meer vlakke wat deur 'n skuinstreep geskei word (bv., /smartshouse/livingroom/temperature).
2024-02-11 02:07:06 +00:00
### Pakketformaat <a href="#f15a" id="f15a"></a>
2024-02-11 02:07:06 +00:00
Elke MQTT-pakket bevat 'n vaste kop (Figuur 02).Figuur 02: Vaste Kop
2024-02-08 21:36:35 +00:00
![https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png](https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png)
2024-02-11 02:07:06 +00:00
### Pakket Tipes
* CONNECT (1): Geinisieer deur die kliënt 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 kliënt na die bediener of omgekeerd te stuur.
* PUBACK (4): Erkenning van 'n PUBLISH-pakket.
* PUBREC (5): Deel van 'n boodskap afleweringsprotokol om te verseker dat die boodskap ontvang word.
* PUBREL (6): Verdere versekering in boodskap aflewering, wat 'n boodskap vrystelling aandui.
* PUBCOMP (7): Finale deel van die boodskap afleweringsprotokol, wat voltooiing aandui.
* SUBSCRIBE (8): 'n Kliënt se versoek om na boodskappe van 'n onderwerp te luister.
* SUBACK (9): Die bediener se erkenning van 'n SUBSCRIBE versoek.
* UNSUBSCRIBE (10): 'n Kliënt 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 wat deur die kliënt gestuur word.
* PINGRESP (13): Die bediener se reaksie op die hartklopboodskap.
* DISCONNECT (14): Geinisieer deur die kliënt om die verbinding te beëindig.
* Twee waardes, 0 en 15, word as voorbehou gemerk en hul gebruik is verbode.
2020-09-21 23:14:27 +00:00
2022-08-12 14:24:34 +00:00
## Shodan
2020-09-21 23:14:27 +00:00
* `port:1883 MQTT`
2022-04-28 16:01:33 +00:00
<details>
2024-02-11 02:07:06 +00:00
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 02:07:06 +00:00
Ander maniere om HackTricks te ondersteun:
2022-04-28 16:01:33 +00:00
2024-02-11 02:07:06 +00:00
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>