hacktricks/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md
Translator workflow 35c6b081d2 Translated to Greek
2024-02-10 22:40:18 +00:00

12 KiB
Raw Blame History

1883 - Ελεγκτική δοκιμή MQTT (Mosquitto)

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Βασικές Πληροφορίες

Το 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"
}

Βίαιη επίθεση MQTT

Ελέγχος ασφάλειας 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/#"

Μπορείτε επίσης να χρησιμοποιήσετε https://github.com/akamai-threat-research/mqtt-pwn

Μπορείτε επίσης να χρησιμοποιήσετε:

apt-get install mosquitto mosquitto-clients
mosquitto_sub -t 'test/topic' -v #Subscriribe to 'test/topic'

Ή μπορείτε να εκτελέσετε αυτόν τον κώδικα για να προσπαθήσετε να συνδεθείτε σε έναν 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/#')

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

Το Πρότυπο Δημοσίευσης/Εγγραφής

Το μοντέλο δημοσίευσης/εγγραφής αποτελείται από:

  • Εκδότης: δημοσιεύει ένα μήνυμα σε ένα (ή πολλά) θέμα(τα) στον μεσίτη.
  • Συνδρομητής: εγγράφεται σε ένα (ή πολλά) θέμα(τα) στον μεσίτη και λαμβάνει όλα τα μηνύματα που στέλνονται από τον εκδότη.
  • Μεσίτης: δρομολογεί όλα τα μηνύματα από τους εκδότες στους συνδρομητές.
  • Θέμα: αποτελείται από ένα ή περισσότερα επίπεδα που χωρίζονται με μια κάθετο προς τα εμπρός κάθετο (π.χ., /smartshouse/livingroom/temperature).

Μορφή Πακέτου

Κάθε πακέτο MQTT περιέχει έναν σταθερό κεφαλίδα (Εικόνα 02). Εικόνα 02: Σταθερό Κεφαλίδα

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
Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks: