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

106 lines
5.9 KiB
Markdown
Raw Normal View History

2023-06-03 13:10:46 +00:00
## Informations de base
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
MQTT signifie MQ Telemetry Transport. C'est un protocole de messagerie **extrêmement simple et léger**, de type publication/abonnement, conçu pour les appareils contraints et les réseaux à faible bande passante, à latence élevée ou peu fiables. Les principes de conception visent à minimiser la bande passante du réseau et les exigences en ressources des appareils tout en tentant également d'assurer la fiabilité et un certain degré d'assurance de la livraison. Ces principes se révèlent également idéaux pour le monde émergent de l'Internet des objets (IoT) ou de la communication entre machines (M2M) de dispositifs connectés, ainsi que pour les applications mobiles où la bande passante et la puissance de la batterie sont à un niveau premium.
2023-06-03 13:10:46 +00:00
**Port par défaut :** 1883
```
2020-09-24 18:58:31 +00:00
PORT STATE SERVICE REASON
1883/tcp open mosquitto version 1.4.8 syn-ack
```
2023-06-03 13:10:46 +00:00
## Inspection du trafic
2020-09-24 18:58:31 +00:00
2023-06-03 13:10:46 +00:00
Les courtiers MQTT envoient un paquet **CONNACK** en **réponse** à un paquet CONNECT. Le **code de retour 0x00** indique que les informations d'identification sont valides et le code de retour **0x05 indique qu'elles ne le sont pas. Exemple de 0x05:**
2022-02-19 19:42:58 +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
2023-06-03 13:10:46 +00:00
**L'authentification est totalement facultative** et même si l'authentification est effectuée, **le chiffrement n'est pas utilisé par défaut** (les informations d'identification sont envoyées en clair). Des attaques MITM peuvent encore être exécutées pour voler des mots de passe.
2023-06-03 13:10:46 +00:00
Pour se connecter à un service MQTT, vous pouvez utiliser: [https://github.com/bapowell/python-mqtt-client-shell](https://github.com/bapowell/python-mqtt-client-shell) et vous abonner à tous les sujets en faisant:
```
> 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/#"
```
2023-06-03 13:10:46 +00:00
Vous pouvez également utiliser [**https://github.com/akamai-threat-research/mqtt-pwn**](https://github.com/akamai-threat-research/mqtt-pwn)
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'
```
2023-06-03 13:10:46 +00:00
Ou vous pouvez **exécuter ce code pour essayer de vous connecter à un service MQTT sans authentification, vous abonner à tous les sujets et les écouter** :
```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()
```
2023-06-03 13:10:46 +00:00
## Plus d'informations
2023-06-03 13:10:46 +00:00
à partir d'ici: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b)
2023-06-03 13:10:46 +00:00
### Le modèle Publish/Subscribe <a href="#b667" id="b667"></a>
2023-06-03 13:10:46 +00:00
Le modèle publish/subscribe est composé de :
2023-06-03 13:10:46 +00:00
* **Publisher**: publie un message sur un (ou plusieurs) sujet(s) dans le courtier.
* **Subscriber**: s'abonne à un (ou plusieurs) sujet(s) dans le courtier et reçoit tous les messages envoyés par le publisher.
* **Broker**: route tous les messages des publishers vers les subscribers.
* **Sujet**: est composé d'un ou plusieurs niveaux qui sont séparés par une barre oblique (par exemple, /smartshouse/livingroom/temperature).
2022-02-19 19:42:58 +00:00
![](https://miro.medium.com/max/1073/1\*sIxvchdgHSqAGebJjFHBAg.png)
2023-06-03 13:10:46 +00:00
### Format de paquet <a href="#f15a" id="f15a"></a>
2023-06-03 13:10:46 +00:00
Chaque paquet MQTT contient un en-tête fixe (Figure 02).Figure 02: En-tête fixe
![](https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png)
2020-09-21 23:14:27 +00:00
2023-06-03 13:10:46 +00:00
Le premier champ de l'en-tête fixe représente le type du paquet MQTT. Tous les types de paquets sont répertoriés dans le tableau 01.Table 01: Types de paquets MQTT
2020-09-21 23:14:27 +00:00
2021-11-30 16:46:07 +00:00
![](https://miro.medium.com/max/1469/1\*z0fhdUVzGa0PLikH\_cyBmQ.png)
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>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
2022-04-28 16:01:33 +00:00
</details>