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

166 lines
9.4 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>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:03:23 +00:00
Altri modi per supportare HackTricks:
2022-04-28 16:01:33 +00:00
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
2022-04-28 16:01:33 +00:00
</details>
### [WhiteIntel](https://whiteintel.io)
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**.
Il loro obiettivo principale di WhiteIntel è combattere i sequestri di account e gli attacchi ransomware derivanti da malware che rubano informazioni.
Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su:
{% embed url="https://whiteintel.io" %}
***
## Informazioni di Base
**MQ Telemetry Transport (MQTT)** è noto come un **protocollo di messaggistica di tipo pubblica/sottoscrizione** che si distingue per la sua estrema semplicità e leggerezza. Questo protocollo è specificamente progettato per ambienti in cui i dispositivi hanno capacità limitate e operano su reti caratterizzate da banda limitata, alta latenza o connessioni non affidabili. Gli obiettivi principali di MQTT includono la minimizzazione dell'uso della larghezza di banda di rete e la riduzione della richiesta di risorse del dispositivo. Inoltre, mira a mantenere una comunicazione affidabile e a fornire un certo livello di garanzia di consegna. Questi obiettivi rendono MQTT eccezionalmente adatto per il crescente campo della **comunicazione da macchina a macchina (M2M)** e dell'**Internet delle cose (IoT)**, dove è essenziale connettere in modo efficiente una miriade di dispositivi. Inoltre, MQTT è estremamente vantaggioso per le applicazioni mobili, dove è cruciale conservare la larghezza di banda e la durata della batteria.
2024-02-10 13:03:23 +00:00
**Porta predefinita:** 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-10 13:03:23 +00:00
## Ispezione del traffico
2020-09-24 18:58:31 +00:00
Quando un pacchetto **CONNECT** viene ricevuto dai broker MQTT, viene inviato indietro un pacchetto **CONNACK**. Questo pacchetto contiene un codice di ritorno che è cruciale per comprendere lo stato della connessione. Un codice di ritorno di **0x00** significa che le credenziali sono state accettate, segnalando una connessione riuscita. D'altra parte, un codice di ritorno di **0x05** indica che le credenziali sono invalide, impedendo così la connessione.
2024-02-08 21:36:35 +00:00
Ad esempio, se il broker rifiuta la connessione a causa di credenziali non valide, lo scenario sarebbe simile a questo:
2024-02-08 21:36:35 +00:00
```
{
2024-02-10 13:03:23 +00:00
"returnCode": "0x05",
"description": "Connection Refused, not authorized"
2024-02-08 21:36:35 +00:00
}
```
![](<../.gitbook/assets/image (976).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
**L'autenticazione è totalmente facoltativa** e anche se viene eseguita l'autenticazione, **la crittografia non è utilizzata per impostazione predefinita** (le credenziali vengono inviate in chiaro). Gli attacchi MITM possono comunque essere eseguiti per rubare le password.
Per connettersi a un servizio MQTT è possibile utilizzare: [https://github.com/bapowell/python-mqtt-client-shell](https://github.com/bapowell/python-mqtt-client-shell) e iscriversi a tutti gli argomenti facendo:
```
> 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-10 13:03:23 +00:00
Puoi anche utilizzare [**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 #Subscribe to 'test/topic'
mosquitto_sub -h <host-ip> -t "#" -v #Subscribe to ALL topics.
2022-02-19 19:42:58 +00:00
```
Oppure potresti **eseguire questo codice per provare a connetterti a un servizio MQTT senza autenticazione, iscriverti a tutti gli argomenti e ascoltarli**:
```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-10 13:03:23 +00:00
client.subscribe('#', qos=1)
client.subscribe('$SYS/#')
def on_message(client, userdata, message):
2024-02-10 13:03:23 +00:00
print('Topic: %s | QOS: %s | Message: %s' % (message.topic, message.qos, message.payload))
def main():
2024-02-10 13:03:23 +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-10 13:03:23 +00:00
main()
```
2024-02-10 13:03:23 +00:00
## Ulteriori informazioni
2024-02-10 13:03:23 +00:00
da qui: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b)
### Il Modello di Publish/Subscribe <a href="#b667" id="b667"></a>
Il modello di publish/subscribe è composto da:
- **Publisher**: pubblica un messaggio su uno (o più) topic nel broker.
- **Subscriber**: si iscrive a uno (o più) topic nel broker e riceve tutti i messaggi inviati dal publisher.
- **Broker**: instrada tutti i messaggi dai publisher ai subscriber.
- **Topic**: è composto da uno o più livelli separati da una barra (ad esempio, /smartshouse/livingroom/temperature).
### Formato del Pacchetto <a href="#f15a" id="f15a"></a>
Ogni pacchetto MQTT contiene un'intestazione fissa (Figura 02).Figura 02: Intestazione Fissa
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)
### Tipi di Pacchetto
- CONNECT (1): Iniziato dal client per richiedere una connessione al server.
- CONNACK (2): Conferma del server di una connessione riuscita.
- PUBLISH (3): Usato per inviare un messaggio dal client al server o viceversa.
- PUBACK (4): Conferma di un pacchetto PUBLISH.
- PUBREC (5): Parte di un protocollo di consegna dei messaggi che garantisce che il messaggio sia ricevuto.
- PUBREL (6): Ulteriore garanzia nella consegna dei messaggi, indicando un rilascio del messaggio.
- PUBCOMP (7): Parte finale del protocollo di consegna dei messaggi, indicando il completamento.
- SUBSCRIBE (8): Richiesta di un client di ascoltare i messaggi da un topic.
- SUBACK (9): Conferma del server di una richiesta di SUBSCRIBE.
- UNSUBSCRIBE (10): Richiesta di un client di smettere di ricevere messaggi da un topic.
- UNSUBACK (11): Risposta del server a una richiesta di UNSUBSCRIBE.
- PINGREQ (12): Un messaggio di battito inviato dal client.
- PINGRESP (13): Risposta del server al messaggio di battito.
- DISCONNECT (14): Iniziato dal client per terminare la connessione.
- Due valori, 0 e 15, sono contrassegnati come riservati e ne è vietato l'uso.
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
### [WhiteIntel](https://whiteintel.io)
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**.
Il loro obiettivo principale di WhiteIntel è combattere le violazioni degli account e gli attacchi ransomware derivanti da malware che rubano informazioni.
Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su:
{% embed url="https://whiteintel.io" %}
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</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-10 13:03:23 +00:00
Altri modi per supportare HackTricks:
2022-04-28 16:01:33 +00:00
- Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
- Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
- Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
- **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
- **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>