mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-17 06:28:27 +00:00
165 lines
9.1 KiB
Markdown
165 lines
9.1 KiB
Markdown
# 1883 - Pentesting MQTT (Mosquitto)
|
|
|
|
<details>
|
|
|
|
<summary><strong>Leer AWS-hacking vanaf 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>
|
|
|
|
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**](https://github.com/sponsors/carlospolop)!
|
|
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
* Ontdek [**Die PEASS Familie**](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-opslag.
|
|
|
|
</details>
|
|
|
|
### [WhiteIntel](https://whiteintel.io)
|
|
|
|
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
[**WhiteIntel**](https://whiteintel.io) is 'n **dark-web** aangedrewe soekenjin wat **gratis** funksies bied om te kontroleer of 'n maatskappy of sy kliënte deur **steel-malware** **gekompromiteer** is.
|
|
|
|
Die primêre doel van WhiteIntel is om rekening-oorneem te beveg en losgeldaanvalle te voorkom wat voortspruit uit inligtingsteel-malware.
|
|
|
|
Jy kan hul webwerf besoek en hul enjin vir **gratis** probeer by:
|
|
|
|
{% embed url="https://whiteintel.io" %}
|
|
|
|
***
|
|
|
|
## Basiese Inligting
|
|
|
|
**MQ Telemetry Transport (MQTT)** staan bekend as 'n **publiseer/tekenboodskap-protokol** 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 verbindinge. Die kern doelwitte van MQTT sluit in die minimalisering van die gebruik van netwerkbandwydte en die vermindering van die eis op toestelbronne. Daarbenewens mik dit daarop om betroubare kommunikasie te handhaaf en 'n sekere vlak van afleweringsversekering te bied. Hierdie doelwitte maak MQTT uitsonderlik 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 die bewaring van bandwydte en batterylewe noodsaaklik is.
|
|
|
|
**Verstekpoort:** 1883
|
|
```
|
|
PORT STATE SERVICE REASON
|
|
1883/tcp open mosquitto version 1.4.8 syn-ack
|
|
```
|
|
## Inspekteer die verkeer
|
|
|
|
Wanneer 'n **CONNECT** pakkie deur MQTT makelaars ontvang word, word 'n **CONNACK** pakkie terug gestuur. 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, wat dus die verbinding voorkom.
|
|
|
|
Byvoorbeeld, as die makelaar die verbinding verwerp as gevolg van ongeldige geloofsbriewe, sal die scenario iets soos volg lyk:
|
|
```
|
|
{
|
|
"returnCode": "0x05",
|
|
"description": "Connection Refused, not authorized"
|
|
}
|
|
```
|
|
![](<../.gitbook/assets/image (976).png>)
|
|
|
|
### [**Brute-Force MQTT**](../generic-methodologies-and-resources/brute-force.md#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](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**](https://github.com/akamai-threat-research/mqtt-pwn) gebruik.
|
|
```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.
|
|
```
|
|
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**:
|
|
```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/#')
|
|
|
|
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](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b)
|
|
|
|
### Die Publiseer/Inteken Patroon <a href="#b667" id="b667"></a>
|
|
|
|
Die publiseer/inteken model bestaan uit:
|
|
|
|
- **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 gestuur is deur die uitgewer.
|
|
- **Makelaar**: roeteer al die boodskappe van die uitgewers na die intekenaars.
|
|
- **Onderwerp**: bestaan uit een of meer vlakke wat geskei word deur 'n skuiwas (bv., /smartshouse/livingroom/temperature).
|
|
|
|
### Pakketformaat <a href="#f15a" id="f15a"></a>
|
|
|
|
Elke MQTT-pakket bevat 'n vaste kop (Figuur 02).Figuur 02: Vaste Kop
|
|
|
|
![https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png](https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png)
|
|
|
|
### 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 te luister na boodskappe van 'n onderwerp.
|
|
- 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`
|
|
|
|
### [WhiteIntel](https://whiteintel.io)
|
|
|
|
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
[**WhiteIntel**](https://whiteintel.io) is 'n **donkerweb**-aangedrewe soekenjin wat **gratis** funksies bied om te kontroleer of 'n maatskappy of sy kliënte deur **diewe-malware** gekompromitteer is.
|
|
|
|
Hul primêre doel van WhiteIntel is om rekeningoorname en lospryse-aanvalle te bekamp wat voortspruit uit inligtingsteel-malware.
|
|
|
|
Jy kan hul webwerf besoek en hul enjin **gratis** probeer by:
|
|
|
|
{% embed url="https://whiteintel.io" %}
|
|
|
|
<details>
|
|
|
|
<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>
|
|
|
|
Ander maniere om HackTricks te ondersteun:
|
|
|
|
- As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
|
- Kry die [**amptelike PEASS & HackTricks-klere**](https://peass.creator-spring.com)
|
|
- Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](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-opslag.
|
|
|
|
</details>
|