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

165 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 1883 - Ελεγχος Ευπαθειών MQTT (Mosquitto)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) είναι μια μηχανή αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλου λογισμικού**.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αποκλεισμών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλο λογισμικό που κλέβει πληροφορίες.
Μπορείτε να ελέγξετε τον ιστότοπό τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:
{% embed url="https://whiteintel.io" %}
---
## Βασικές Πληροφορίες
Το **MQ Telemetry Transport (MQTT)** είναι γνωστό ως ένα πρωτόκολλο μηνυμάτων **δημοσίευσης/συνδρομής** που ξεχωρίζει για την ακραία απλότητα και ελαφρότητά του. Αυτό το πρωτόκολλο είναι σχεδιασμένο ειδικά για περιβάλλοντα όπου οι συσκευές έχουν περιορισμένες δυνατότητες και λειτουργούν σε δίκτυα που χαρακτηρίζονται από χαμηλό εύρος ζώνης, υψηλή καθυστέρηση ή αναξιόπιστες συνδέσεις. Οι βασικοί στόχοι του MQTT περιλαμβάνουν την ελαχιστοποίηση της χρήσης της δικτυακής ζώνης και τη μείωση της ζήτησης στους πόρους της συσκευής. Επιπλέον, στοχεύει στη διατήρηση αξιόπιστης επικοινωνίας και στην παροχή ενός συγκεκριμένου επιπέδου διασφάλισης παράδοσης. Αυτοί οι στόχοι καθιστούν το MQTT εξαιρετικά κατάλληλο για τον αναπτυσσόμενο τομέα της **επικοινωνίας μηχανής προς μηχανή (M2M)** και του **Διαδικτύου των Πραγμάτων (IoT)**, όπου είναι ουσιώδες να συνδέονται αποτελεσματικά μια πληθώρα συσκευών. Επιπλέον, το MQTT είναι υψίστης ωφέλειας για κινητές εφαρμογές, όπου η διατήρηση της ζώνης ζώνης και της διάρκειας ζωής της μπαταρίας είναι κρίσιμη.
**Προεπιλεγμένη θύρα:** 1883
```
PORT STATE SERVICE REASON
1883/tcp open mosquitto version 1.4.8 syn-ack
```
## Επιθεώρηση της κίνησης
Όταν οι κεντρικοί διαμεσολαβητές MQTT λαμβάνουν ένα πακέτο **CONNECT**, στέλνουν πίσω ένα πακέτο **CONNACK**. Αυτό το πακέτο περιέχει έναν κωδικό επιστροφής που είναι κρίσιμος για την κατανόηση της κατάστασης σύνδεσης. Ένας κωδικός επιστροφής **0x00** σημαίνει ότι οι διαπιστεύσεις έχουν γίνει δεκτές, υποδεικνύοντας μια επιτυχημένη σύνδεση. Αντίθετα, ένας κωδικός επιστροφής **0x05** υποδεικνύει ότι οι διαπιστεύσεις είναι μη έγκυρες, εμποδίζοντας έτσι τη σύνδεση.
Για παράδειγμα, αν ο διαμεσολαβητής απορρίπτει τη σύνδεση λόγω μη έγκυρων διαπιστεύσεων, το σενάριο θα μοιάζει κάπως έτσι:
```
{
"returnCode": "0x05",
"description": "Connection Refused, not authorized"
}
```
![](<../.gitbook/assets/image (973).png>)
### [**Χαμηλής Πιθανότητας Επίθεση Brute-Force στο MQTT**](../generic-methodologies-and-resources/brute-force.md#mqtt)
## Ελεγχος Ασφάλειας MQTT
**Η ταυτοποίηση είναι εντελώς προαιρετική** και ακόμα κι αν γίνεται ταυτοποίηση, **η κρυπτογράφηση δεν χρησιμοποιείται από προεπιλογή** (οι διαπιστεύσεις στέλνονται σε καθαρό κείμενο). Οι επιθέσεις MITM μπορούν ακόμα να εκτελεστούν για την κλοπή κωδικών πρόσβασης.
Για να συνδεθείτε σε έναν MQTT υπηρεσία, μπορείτε να χρησιμοποιήσετε: [https://github.com/bapowell/python-mqtt-client-shell](https://github.com/bapowell/python-mqtt-client-shell) και να εγγραφείτε σε όλα τα θέματα κάνοντας:
```
> 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/#"
```
Μπορείτε επίσης να χρησιμοποιήσετε [**https://github.com/akamai-threat-research/mqtt-pwn**](https://github.com/akamai-threat-research/mqtt-pwn)
```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.
```
Ή μπορείτε **να εκτελέσετε αυτόν τον κώδικα για να δοκιμάσετε τη σύνδεση σε έναν υπηρεσία MQTT χωρίς πιστοποίηση, να εγγραφείτε σε κάθε θέμα και να τα ακούσετε**:
```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()
```
## Περισσότερες πληροφορίες
από εδώ: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b)
### Το Πρότυπο Δημοσίευσης/Εγγραφής <a href="#b667" id="b667"></a>
Το μοντέλο δημοσίευσης/εγγραφής αποτελείται από:
- **Εκδότης**: δημοσιεύει ένα μήνυμα σε ένα (ή πολλαπλά) θέμα(τα) στο μεσίτη.
- **Συνδρομητής**: εγγράφεται σε ένα (ή πολλαπλά) θέμα(τα) στο μεσίτη και λαμβάνει όλα τα μηνύματα που στέλνονται από τον εκδότη.
- **Μεσίτης**: δρομολογεί όλα τα μηνύματα από τους εκδότες στους συνδρομητές.
- **Θέμα**: αποτελείται από έναν ή περισσότερους επίπεδους που διαχωρίζονται με μια κάθετο (π.χ., /smartshouse/livingroom/temperature).
### Μορφή Πακέτου <a href="#f15a" id="f15a"></a>
Κάθε πακέτο MQTT περιέχει έναν σταθερό κεφαλίδα (Σχήμα 02). Σχήμα 02: Σταθερό Κεφαλίδα
![https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png](https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png)
### Τύποι Πακέτων
- CONNECT (1): Εκκινείται από τον πελάτη για να ζητήσει σύνδεση με τον εξυπηρετητή.
- CONNACK (2): Η αναγνώριση του εξυπηρετητή για μια επιτυχημένη σύνδεση.
- PUBLISH (3): Χρησιμοποιείται για να στείλει ένα μήνυμα από τον πελάτη στον εξυπηρετητή ή αντίστροφα.
- PUBACK (4): Αναγνώριση ενός πακέτου PUBLISH.
- PUBREC (5): Μέρος ενός πρωτοκόλλου παράδοσης μηνύματος που εξασφαλίζει τη λήψη του μηνύματος.
- PUBREL (6): Επιπλέον εγγύηση στην παράδοση μηνύματος, υποδεικνύοντας απελευθέρωση μηνύματος.
- PUBCOMP (7): Τελικό μέρος του πρωτοκόλλου παράδοσης μηνύματος, υποδεικνύοντας ολοκλήρωση.
- SUBSCRIBE (8): Αίτημα του πελάτη για να ακούσει μηνύματα από ένα θέμα.
- SUBACK (9): Η αναγνώριση του εξυπηρετητή για ένα αίτημα SUBSCRIBE.
- UNSUBSCRIBE (10): Αίτημα του πελάτη για να σταματήσει να λαμβάνει μηνύματα από ένα θέμα.
- UNSUBACK (11): Η απάντηση του εξυπηρετητή σε ένα αίτημα UNSUBSCRIBE.
- PINGREQ (12): Ένα μήνυμα καρδιάς που στέλνεται από τον πελάτη.
- PINGRESP (13): Η απάντηση του εξυπηρετητή στο μήνυμα καρδιάς.
- DISCONNECT (14): Εκκινείται από τον πελάτη για να τερματίσει τη σύνδεση.
- Δύο τιμές, 0 και 15, έχουν επισημανθεί ως δεσμευμένες και η χρήση τους είναι απαγορευμένη.
## Shodan
* `port:1883 MQTT`
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) είναι μια μηχανή αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλου λογισμικού**.
Ο βασικός στόχος του WhiteIntel είναι η καταπολέμηση των απαγωγών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλο λογισμικό που κλέβει πληροφορίες.
Μπορείτε να ελέγξετε την ιστοσελίδα τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:
{% embed url="https://whiteintel.io" %}
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
- Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
- Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
- Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
- **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>