WebSocket Attacks
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)
Οι συνδέσεις WebSocket δημιουργούνται μέσω μιας αρχικής HTTP χειραψίας και έχουν σχεδιαστεί για να είναι μακροχρόνιες, επιτρέποντας τη διπλής κατεύθυνσης επικοινωνία οποιαδήποτε στιγμή χωρίς την ανάγκη ενός συναλλακτικού συστήματος. Αυτό καθιστά τα WebSockets ιδιαίτερα ευνοϊκά για εφαρμογές που απαιτούν χαμηλή καθυστέρηση ή επικοινωνία που ξεκινά από τον διακομιστή, όπως οι ζωντανές ροές χρηματοοικονομικών δεδομένων.
Μια λεπτομερής εξήγηση για τη δημιουργία συνδέσεων WebSocket μπορεί να προσπελαστεί εδώ. Σε σύνοψη, οι συνδέσεις WebSocket συνήθως ξεκινούν μέσω JavaScript πλευράς πελάτη όπως φαίνεται παρακάτω:
Ο πρωτόκολλος wss
σηματοδοτεί μια σύνδεση WebSocket που είναι ασφαλής με TLS, ενώ το ws
υποδηλώνει μια μη ασφαλή σύνδεση.
Κατά την εγκαθίδρυση της σύνδεσης, πραγματοποιείται μια διαδικασία χειραψίας μεταξύ του προγράμματος περιήγησης και του διακομιστή μέσω HTTP. Η διαδικασία χειραψίας περιλαμβάνει το πρόγραμμα περιήγησης να στέλνει ένα αίτημα και τον διακομιστή να απαντά, όπως απεικονίζεται στα παρακάτω παραδείγματα:
Το πρόγραμμα περιήγησης στέλνει ένα αίτημα χειραψίας:
Απάντηση χειραψίας του διακομιστή:
Η σύνδεση παραμένει ανοιχτή για ανταλλαγή μηνυμάτων και στις δύο κατευθύνσεις μόλις καθοριστεί.
Κύρια Σημεία του WebSocket Handshake:
Οι κεφαλίδες Connection
και Upgrade
σηματοδοτούν την έναρξη ενός WebSocket handshake.
Η κεφαλίδα Sec-WebSocket-Version
υποδεικνύει την επιθυμητή έκδοση πρωτοκόλλου WebSocket, συνήθως 13
.
Ένα τυχαίο Base64-κωδικοποιημένο τιμή αποστέλλεται στην κεφαλίδα Sec-WebSocket-Key
, διασφαλίζοντας ότι κάθε handshake είναι μοναδικό, το οποίο βοηθά στην αποφυγή προβλημάτων με caching proxies. Αυτή η τιμή δεν προορίζεται για αυθεντικοποίηση αλλά για να επιβεβαιώσει ότι η απάντηση δεν παράγεται από έναν κακώς ρυθμισμένο διακομιστή ή cache.
Η κεφαλίδα Sec-WebSocket-Accept
στην απάντηση του διακομιστή είναι ένα hash της Sec-WebSocket-Key
, επαληθεύοντας την πρόθεση του διακομιστή να ανοίξει μια σύνδεση WebSocket.
Αυτές οι δυνατότητες διασφαλίζουν ότι η διαδικασία handshake είναι ασφαλής και αξιόπιστη, ανοίγοντας το δρόμο για αποδοτική επικοινωνία σε πραγματικό χρόνο.
Μπορείτε να χρησιμοποιήσετε το websocat
για να καθορίσετε μια ακατέργαστη σύνδεση με ένα websocket.
Ή για να δημιουργήσετε έναν διακομιστή websocat:
Αν διαπιστώσετε ότι οι πελάτες είναι συνδεδεμένοι σε ένα HTTP websocket από το τρέχον τοπικό σας δίκτυο, μπορείτε να δοκιμάσετε μια ARP Spoofing Attack για να εκτελέσετε μια επίθεση MitM μεταξύ του πελάτη και του διακομιστή. Μόλις ο πελάτης προσπαθήσει να συνδεθεί, μπορείτε στη συνέχεια να χρησιμοποιήσετε:
Μπορείτε να χρησιμοποιήσετε το tool https://github.com/PalindromeLabs/STEWS για να ανακαλύψετε, να αναγνωρίσετε και να αναζητήσετε γνωστές ευπάθειες σε websockets αυτόματα.
Burp Suite υποστηρίζει την επικοινωνία MitM websockets με πολύ παρόμοιο τρόπο όπως το κάνει για την κανονική HTTP επικοινωνία.
Η socketsleuth επέκταση του Burp Suite θα σας επιτρέψει να διαχειριστείτε καλύτερα τις επικοινωνίες Websocket στο Burp αποκτώντας το ιστορικό, ρυθμίζοντας κανόνες παρεμβολής, χρησιμοποιώντας κανόνες αντιστοίχισης και αντικατάστασης, χρησιμοποιώντας Intruder και AutoRepeater.
WSSiP: Συντομογραφία για "WebSocket/Socket.io Proxy", αυτό το εργαλείο, γραμμένο σε Node.js, παρέχει μια διεπαφή χρήστη για καταγραφή, παρεμβολή, αποστολή προσαρμοσμένων μηνυμάτων και προβολή όλων των επικοινωνιών WebSocket και Socket.IO μεταξύ του πελάτη και του διακομιστή.
wsrepl είναι ένα διαδραστικό websocket REPL σχεδιασμένο ειδικά για pentesting. Παρέχει μια διεπαφή για την παρακολούθηση εισερχόμενων μηνυμάτων websocket και αποστολής νέων, με ένα εύχρηστο πλαίσιο για αυτοματοποίηση αυτής της επικοινωνίας.
https://websocketking.com/ είναι μια ιστοσελίδα για επικοινωνία με άλλες ιστοσελίδες χρησιμοποιώντας websockets.
https://hoppscotch.io/realtime/websocket μεταξύ άλλων τύπων επικοινωνιών/πρωτοκόλλων, παρέχει μια ιστοσελίδα για επικοινωνία με άλλες ιστοσελίδες χρησιμοποιώντας websockets.
Στο Burp-Suite-Extender-Montoya-Course έχετε έναν κώδικα για να εκκινήσετε μια ιστοσελίδα χρησιμοποιώντας websockets και σε αυτή την ανάρτηση μπορείτε να βρείτε μια εξήγηση.
Cross-site WebSocket hijacking, γνωστό και ως cross-origin WebSocket hijacking, αναγνωρίζεται ως μια συγκεκριμένη περίπτωση Cross-Site Request Forgery (CSRF) που επηρεάζει τις χειραψίες WebSocket. Αυτή η ευπάθεια προκύπτει όταν οι χειραψίες WebSocket αυθεντικοποιούνται αποκλειστικά μέσω HTTP cookies χωρίς CSRF tokens ή παρόμοια μέτρα ασφαλείας.
Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό φιλοξενώντας μια κακόβουλη ιστοσελίδα που ξεκινά μια διασυνοριακή σύνδεση WebSocket σε μια ευάλωτη εφαρμογή. Ως εκ τούτου, αυτή η σύνδεση θεωρείται μέρος της συνεδρίας του θύματος με την εφαρμογή, εκμεταλλευόμενη την έλλειψη προστασίας CSRF στον μηχανισμό διαχείρισης συνεδριών.
Σημειώστε ότι όταν ιδρύεται μια websocket σύνδεση το cookie αποστέλλεται στον διακομιστή. Ο διακομιστής μπορεί να το χρησιμοποιεί για να σχετίσει κάθε συγκεκριμένο χρήστη με τη συνεδρία websocket του βασισμένο στο αποσταλθέν cookie.
Έτσι, αν για παράδειγμα ο websocket διακομιστής επιστρέψει το ιστορικό της συνομιλίας ενός χρήστη αν αποσταλεί ένα μήνυμα με "READY", τότε μια απλή XSS που ιδρύει τη σύνδεση (το cookie θα σταλεί αυτόματα για να εξουσιοδοτήσει τον χρήστη θύμα) στέλνοντας "READY" θα είναι σε θέση να ανακτήσει το ιστορικό της συνομιλίας.
Σε αυτή την ανάρτηση του blog https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/ ο επιτιθέμενος κατάφερε να εκτελέσει αυθαίρετο Javascript σε ένα υποτομέα του τομέα όπου γινόταν η επικοινωνία μέσω web socket. Επειδή ήταν υποτομέας, το cookie αποστέλλονταν, και επειδή το Websocket δεν έλεγξε σωστά την προέλευση, ήταν δυνατό να επικοινωνήσει μαζί του και να κλέψει tokens από αυτό.
Αντιγράψτε την web εφαρμογή που θέλετε να μιμηθείτε (τα αρχεία .html για παράδειγμα) και μέσα στο σενάριο όπου γίνεται η επικοινωνία μέσω websocket προσθέστε αυτόν τον κώδικα:
Τώρα κατεβάστε το αρχείο wsHook.js
από https://github.com/skepticfx/wshook και αποθηκεύστε το μέσα στον φάκελο με τα αρχεία ιστού.
Εκθέτοντας την εφαρμογή ιστού και κάνοντάς την να συνδεθεί ένας χρήστης, θα μπορείτε να κλέψετε τα μηνύματα που αποστέλλονται και λαμβάνονται μέσω websocket:
Οι Συνθήκες Αγώνα στα WebSockets είναι επίσης ένα θέμα, ελέγξτε αυτές τις πληροφορίες για να μάθετε περισσότερα.
Καθώς τα Web Sockets είναι ένας μηχανισμός για να στέλνουν δεδομένα στον διακομιστή και στον πελάτη, ανάλογα με το πώς ο διακομιστής και ο πελάτης χειρίζονται τις πληροφορίες, τα Web Sockets μπορούν να χρησιμοποιηθούν για να εκμεταλλευτούν πολλές άλλες ευπάθειες όπως XSS, SQLi ή οποιαδήποτε άλλη κοινή ευπάθεια ιστού χρησιμοποιώντας είσοδο ενός χρήστη από ένα websocket.
Αυτή η ευπάθεια θα μπορούσε να σας επιτρέψει να παρακάμψετε τους περιορισμούς των αντίστροφων μεσολαβητών κάνοντάς τους να πιστεύουν ότι μια επικοινωνία websocket έχει καθιερωθεί (ακόμα και αν δεν είναι αλήθεια). Αυτό θα μπορούσε να επιτρέψει σε έναν επιτιθέμενο να πρόσβαση σε κρυφές τελικές σημεία. Για περισσότερες πληροφορίες, ελέγξτε την παρακάτω σελίδα:
Upgrade Header SmugglingΜάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)