1883 - Pentesting MQTT (Mosquitto)
Reading time: 5 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Basic Information
MQ Telemetry Transport (MQTT) είναι γνωστός ως ένα πρωτόκολλο μηνυμάτων δημοσίευσης/συνδρομής που ξεχωρίζει για την εξαιρετική του απλότητα και ελαφρότητα. Αυτό το πρωτόκολλο έχει σχεδιαστεί ειδικά για περιβάλλοντα όπου οι συσκευές έχουν περιορισμένες δυνατότητες και λειτουργούν σε δίκτυα που χαρακτηρίζονται από χαμηλό εύρος ζώνης, υψηλή καθυστέρηση ή αναξιόπιστες συνδέσεις. Οι βασικοί στόχοι του MQTT περιλαμβάνουν τη μείωση της χρήσης του εύρους ζώνης του δικτύου και τη μείωση της ζήτησης στους πόρους των συσκευών. Επιπλέον, στοχεύει στη διατήρηση αξιόπιστης επικοινωνίας και στην παροχή ενός ορισμένου επιπέδου διασφάλισης παράδοσης. Αυτοί οι στόχοι καθιστούν το MQTT εξαιρετικά κατάλληλο για τον αναπτυσσόμενο τομέα της επικοινωνίας μηχανής προς μηχανή (M2M) και του Διαδικτύου των Πραγμάτων (IoT), όπου είναι απαραίτητο να συνδεθούν αποτελεσματικά πολλές συσκευές. Επιπλέον, το MQTT είναι ιδιαίτερα ωφέλιμο για κινητές εφαρμογές, όπου η εξοικονόμηση εύρους ζώνης και διάρκειας ζωής της μπαταρίας είναι κρίσιμη.
Default port: 1883
PORT STATE SERVICE REASON
1883/tcp open mosquitto version 1.4.8 syn-ack
Εξέταση της κίνησης
When a CONNECT packet is received by MQTT brokers, a CONNACK packet is sent back. This packet contains a return code which is crucial for understanding the connection status. A return code of 0x00 means that the credentials have been accepted, signifying a successful connection. On the other hand, a return code of 0x05 signals that the credentials are invalid, thus preventing the connection.
For instance, if the broker rejects the connection due to invalid credentials, the scenario would look something like this:
{
"returnCode": "0x05",
"description": "Connection Refused, not authorized"
}
Brute-Force MQTT
Pentesting MQTT
Η αυθεντικοποίηση είναι εντελώς προαιρετική και ακόμη και αν πραγματοποιείται αυθεντικοποίηση, η κρυπτογράφηση δεν χρησιμοποιείται από προεπιλογή (τα διαπιστευτήρια αποστέλλονται σε καθαρό κείμενο). Οι επιθέσεις MITM μπορούν να εκτελούνται για να κλέψουν κωδικούς πρόσβασης.
Για να συνδεθείτε σε μια υπηρεσία MQTT μπορείτε να χρησιμοποιήσετε: 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/#"
Μπορείτε επίσης να χρησιμοποιήσετε:
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 χωρίς αυθεντικοποίηση, να εγγραφείτε σε κάθε θέμα και να τα ακούσετε:
#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/index.html#')
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()
Το Μοντέλο Δημοσίευσης/Εγγραφής
Το μοντέλο δημοσίευσης/εγγραφής αποτελείται από:
- 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, είναι επισημασμένες ως δεσμευμένες και η χρήση τους απαγορεύεται.
Shodan
port:1883 MQTT
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.