1883 - Pentesting MQTT (Mosquitto)
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
MQ Telemetry Transport (MQTT) είναι γνωστό ως ένα πρωτόκολλο μηνυμάτων δημοσίευσης/συνδρομής που ξεχωρίζει για την εξαιρετική του απλότητα και ελαφρότητα. Αυτό το πρωτόκολλο έχει σχεδιαστεί ειδικά για περιβάλλοντα όπου οι συσκευές έχουν περιορισμένες δυνατότητες και λειτουργούν σε δίκτυα που χαρακτηρίζονται από χαμηλό εύρος ζώνης, υψηλή καθυστέρηση ή αναξιόπιστες συνδέσεις. Οι βασικοί στόχοι του MQTT περιλαμβάνουν τη μείωση της χρήσης του εύρους ζώνης του δικτύου και τη μείωση της ζήτησης στους πόρους των συσκευών. Επιπλέον, στοχεύει στη διατήρηση αξιόπιστης επικοινωνίας και στην παροχή ενός ορισμένου επιπέδου διασφάλισης παράδοσης. Αυτοί οι στόχοι καθιστούν το MQTT εξαιρετικά κατάλληλο για τον αναπτυσσόμενο τομέα της επικοινωνίας μηχανής προς μηχανή (M2M) και του Διαδικτύου των Πραγμάτων (IoT), όπου είναι απαραίτητο να συνδεθούν αποτελεσματικά πολλές συσκευές. Επιπλέον, το MQTT είναι ιδιαίτερα ωφέλιμο για κινητές εφαρμογές, όπου η εξοικονόμηση εύρους ζώνης και διάρκειας ζωής της μπαταρίας είναι κρίσιμη.
Default port: 1883
Όταν ένα CONNECT πακέτο λαμβάνεται από τους MQTT brokers, ένα CONNACK πακέτο αποστέλλεται πίσω. Αυτό το πακέτο περιέχει έναν κωδικό επιστροφής που είναι κρίσιμος για την κατανόηση της κατάστασης σύνδεσης. Ένας κωδικός επιστροφής 0x00 σημαίνει ότι τα διαπιστευτήρια έχουν γίνει αποδεκτά, υποδηλώνοντας μια επιτυχημένη σύνδεση. Από την άλλη πλευρά, ένας κωδικός επιστροφής 0x05 σηματοδοτεί ότι τα διαπιστευτήρια είναι μη έγκυρα, αποτρέποντας έτσι τη σύνδεση.
Για παράδειγμα, αν ο broker απορρίψει τη σύνδεση λόγω μη έγκυρων διαπιστευτηρίων, το σενάριο θα φαίνεται κάπως έτσι:
Η αυθεντικοποίηση είναι εντελώς προαιρετική και ακόμη και αν πραγματοποιείται αυθεντικοποίηση, η κρυπτογράφηση δεν χρησιμοποιείται από προεπιλογή (τα διαπιστευτήρια αποστέλλονται σε καθαρό κείμενο). Οι επιθέσεις MITM μπορούν να εκτελούνται για να κλέψουν κωδικούς πρόσβασης.
Για να συνδεθείτε σε μια υπηρεσία MQTT μπορείτε να χρησιμοποιήσετε: https://github.com/bapowell/python-mqtt-client-shell και να εγγραφείτε σε όλα τα θέματα κάνοντας:
Μπορείτε επίσης να χρησιμοποιήσετε https://github.com/akamai-threat-research/mqtt-pwn
Μπορείτε επίσης να χρησιμοποιήσετε:
Ή μπορείτε να τρέξετε αυτόν τον κώδικα για να προσπαθήσετε να συνδεθείτε σε μια υπηρεσία MQTT χωρίς αυθεντικοποίηση, να εγγραφείτε σε κάθε θέμα και να τα ακούσετε:
from here: https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b
Το μοντέλο δημοσίευσης/εγγραφής αποτελείται από:
Publisher: δημοσιεύει ένα μήνυμα σε ένα (ή πολλά) θέματα στον broker.
Subscriber: εγγράφεται σε ένα (ή πολλά) θέματα στον broker και λαμβάνει όλα τα μηνύματα που αποστέλλονται από τον publisher.
Broker: δρομολογεί όλα τα μηνύματα από τους publishers στους subscribers.
Topic: αποτελείται από ένα ή περισσότερα επίπεδα που χωρίζονται με μια κάθετο (π.χ., /smartshouse/livingroom/temperature).
Κάθε πακέτο MQTT περιέχει μια σταθερή κεφαλίδα (Εικόνα 02).Εικόνα 02: Σταθερή Κεφαλίδα
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, είναι επισημασμένες ως κρατημένες και η χρήση τους απαγορεύεται.
port:1883 MQTT
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)