mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 14:40:37 +00:00
167 lines
8.9 KiB
Markdown
167 lines
8.9 KiB
Markdown
# 1883 - Pentesting MQTT (Mosquitto)
|
|
|
|
{% hint style="success" %}
|
|
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Support HackTricks</summary>
|
|
|
|
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
|
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
|
|
</details>
|
|
{% endhint %}
|
|
|
|
### [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 kyk of 'n maatskappy of sy kliënte **gekompromitteer** is deur **stealer malwares**.
|
|
|
|
Hul primêre doel van WhiteIntel is om rekening oorname en ransomware-aanvalle te bekamp wat voortspruit uit inligting-steel malware.
|
|
|
|
Jy kan hul webwerf besoek en hul enjin **gratis** probeer by:
|
|
|
|
{% embed url="https://whiteintel.io" %}
|
|
|
|
***
|
|
|
|
## Basiese Inligting
|
|
|
|
**MQ Telemetry Transport (MQTT)** is bekend as 'n **publish/subscribe messaging protocol** wat uitstaan vir 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ë latensie, of onbetroubare verbindings. Die kern doelwitte van MQTT sluit in om die gebruik van netwerkbandwydte te minimaliseer en die vraag op toestel hulpbronne te verminder. Daarbenewens poog dit om betroubare kommunikasie te handhaaf en 'n sekere vlak van afleweringswaarborg te bied. Hierdie doelwitte maak MQTT uiters geskik vir die opkomende veld van **machine-to-machine (M2M) kommunikasie** en die **Internet of Things (IoT)**, waar dit noodsaaklik is om 'n menigte toestelle doeltreffend te verbind. Boonop is MQTT baie voordelig vir mobiele toepassings, waar die bewaring van bandwydte en batterylewe van kardinale belang is.
|
|
|
|
**Standaard poort:** 1883
|
|
```
|
|
PORT STATE SERVICE REASON
|
|
1883/tcp open mosquitto version 1.4.8 syn-ack
|
|
```
|
|
## Inspecting the traffic
|
|
|
|
Wanneer 'n **CONNECT** pakket deur MQTT-brokers ontvang word, word 'n **CONNACK** pakket teruggestuur. Hierdie pakket bevat 'n terugkode wat van kardinale belang is om die verbintenisstatus te verstaan. 'n Terugkode van **0x00** beteken dat die geloofsbriewe aanvaar is, wat 'n suksesvolle verbinding aandui. Aan die ander kant dui 'n terugkode van **0x05** aan dat die geloofsbriewe ongeldig is, wat die verbinding voorkom.
|
|
|
|
Byvoorbeeld, as die broker die verbinding weier weens ongeldig geloofsbriewe, sal die scenario iets soos hierdie 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
|
|
|
|
**Outentisering is heeltemal opsioneel** en selfs al word outentisering uitgevoer, **word versleuteling nie standaard gebruik nie** (geloofsbriewe word in duidelike teks 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 aan al die onderwerpe te inteken 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/#"
|
|
```
|
|
U kan ook gebruik maak van:
|
|
```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 uitvoer om te probeer om met 'n MQTT-diens te verbind sonder outentisering, op elke onderwerp te inteken en 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
|
|
|
|
van 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:
|
|
|
|
* **Publisher**: publiseer 'n boodskap na een (of meer) onderwerp(e) in die broker.
|
|
* **Subscriber**: teken in op een (of meer) onderwerp(e) in die broker en ontvang al die boodskappe wat van die publisher gestuur word.
|
|
* **Broker**: roeteer al die boodskappe van die publishers na die subscribers.
|
|
* **Topic**: bestaan uit een of meer vlakke wat geskei word deur 'n voorwaartse skuinsstreep (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)
|
|
|
|
### Pakket Tipes
|
|
|
|
* CONNECT (1): Begin 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 boodskapafleweringsprotokol wat verseker dat die boodskap ontvang word.
|
|
* PUBREL (6): Verdere sekerheid in boodskapaflewering, wat 'n boodskapvrystelling aandui.
|
|
* PUBCOMP (7): Finale deel van die boodskapafleweringsprotokol, 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 te stop om boodskappe van 'n onderwerp te ontvang.
|
|
* UNSUBACK (11): Die bediener se reaksie op 'n UNSUBSCRIBE versoek.
|
|
* PINGREQ (12): 'n Hartklop boodskap wat deur die kliënt gestuur word.
|
|
* PINGRESP (13): Die bediener se reaksie op die hartklop boodskap.
|
|
* DISCONNECT (14): Begin deur die kliënt om die verbinding te beëindig.
|
|
* Twee waardes, 0 en 15, is gemerk as gereserveer 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 **dark-web** aangedrewe soekenjin wat **gratis** funksies bied om te kyk of 'n maatskappy of sy kliënte **gekompromitteer** is deur **stealer malwares**.
|
|
|
|
Hul primêre doel van WhiteIntel is om rekeningneem en ransomware-aanvalle wat voortspruit uit inligting-steel malware te bekamp.
|
|
|
|
Jy kan hul webwerf besoek en hul enjin **gratis** probeer by:
|
|
|
|
{% embed url="https://whiteintel.io" %}
|
|
|
|
{% hint style="success" %}
|
|
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Ondersteun HackTricks</summary>
|
|
|
|
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
|
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
|
|
</details>
|
|
{% endhint %}
|