# Napadi na WebSocket
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
* Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
## Šta su WebSockets
WebSocket konekcije se uspostavljaju putem početnog **HTTP** handshake-a i dizajnirane su da budu **dugotrajne**, omogućavajući dvosmernu komunikaciju u bilo koje vreme bez potrebe za transakcionim sistemom. Ovo čini WebSockets posebno pogodnim za aplikacije koje zahtevaju **nisku latenciju ili komunikaciju iniciranu od strane servera**, kao što su struje finansijskih podataka uživo.
### Uspostavljanje WebSocket konekcija
Detaljno objašnjenje o uspostavljanju WebSocket konekcija može se pronaći [**ovde**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc). Ukratko, WebSocket konekcije se obično iniciraju putem JavaScript-a na strani klijenta, kao što je prikazano ispod:
```javascript
var ws = new WebSocket("wss://normal-website.com/ws");
```
`wss` protokol označava WebSocket konekciju koja je obezbeđena sa **TLS**, dok `ws` označava **neobezbeđenu** konekciju.
Tokom uspostavljanja konekcije, izvršava se handshake između pregledača i servera preko HTTP-a. Proces handshake-a uključuje slanje zahteva od strane pregledača i odgovor servera, kako je prikazano u sledećim primerima:
Pregledač šalje zahtev za handshake:
```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
```
Odgovor servera na handshake:
```javascript
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
```
Veza ostaje otvorena za razmenu poruka u oba smera nakon uspostavljanja.
**Ključne tačke WebSocket Handshake-a:**
- Zaglavlja `Connection` i `Upgrade` signaliziraju inicijaciju WebSocket handshake-a.
- Zaglavlje `Sec-WebSocket-Version` ukazuje na željenu verziju WebSocket protokola, obično `13`.
- Base64 enkodirana nasumična vrednost se šalje u zaglavlju `Sec-WebSocket-Key`, obezbeđujući da svaki handshake bude jedinstven, što pomaže u sprečavanju problema sa keširajućim proksijima. Ova vrednost nije za autentifikaciju, već da potvrdi da odgovor nije generisan od strane pogrešno konfigurisanog servera ili keša.
- Zaglavlje `Sec-WebSocket-Accept` u odgovoru servera je heš vrednost `Sec-WebSocket-Key`, potvrđujući serverovu nameru da otvori WebSocket vezu.
Ove funkcionalnosti obezbeđuju da je proces handshake-a siguran i pouzdan, otvarajući put za efikasnu komunikaciju u realnom vremenu.
### Linux konzola
Možete koristiti `websocat` da uspostavite sirovu vezu sa WebSocket-om.
```bash
websocat --insecure wss://10.10.10.10:8000 -v
```
Ili da kreirate websocat server:
```bash
websocat -s 0.0.0.0:8000 #Listen in port 8000
```
### MitM napadi na WebSocket veze
Ako primetite da su klijenti povezani na **HTTP WebSocket** iz vaše trenutne lokalne mreže, možete pokušati [ARP Spoofing napad](../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) kako biste izveli MitM napad između klijenta i servera.\
Kada klijent pokuša da se poveže, možete koristiti:
```bash
websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
```
### Enumeracija Websocket-a
Možete koristiti **alat** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) **da automatski otkrijete, identifikujete i pretražujete poznate** **ranjivosti** u websocket-ima.
### Alati za debagovanje Websocket-a
* **Burp Suite** podržava MitM komunikaciju websocket-a na veoma sličan način kao što to radi za redovnu HTTP komunikaciju.
* [**socketsleuth**](https://github.com/snyk/socketsleuth) **Burp Suite ekstenzija** će vam omogućiti bolje upravljanje Websocket komunikacijom u Burp-u tako što ćete dobiti **istoriju**, postaviti **pravila presretanja**, koristiti pravila za **poklapanje i zamenu**, koristiti **Intruder** i **AutoRepeater**.
* [**WSSiP**](https://github.com/nccgroup/wssip)**:** Skraćenica za "**WebSocket/Socket.io Proxy**", ovaj alat, napisan u Node.js, pruža korisnički interfejs za **snimanje, presretanje, slanje prilagođenih** poruka i pregled svih WebSocket i Socket.IO komunikacija između klijenta i servera.
* [**wsrepl**](https://github.com/doyensec/wsrepl) je **interaktivni websocket REPL** dizajniran posebno za testiranje prodiranja. Pruža interfejs za posmatranje **dolaznih websocket poruka i slanje novih**, sa jednostavnim okvirom za **automatizaciju** ove komunikacije.
* [**https://websocketking.com/**](https://websocketking.com/) je **veb za komunikaciju** sa drugim veb sajtovima koristeći **websocket-e**.
* [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) pored ostalih vrsta komunikacija/protokola, pruža **veb za komunikaciju** sa drugim veb sajtovima koristeći **websocket-e**.
## Websocket Lab
U [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) imate kod za pokretanje veba koristeći websocket-e, a u [**ovom postu**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) možete pronaći objašnjenje.
## Cross-site WebSocket hijacking (CSWSH)
**Cross-site WebSocket hijacking**, takođe poznat kao **cross-origin WebSocket hijacking**, identifikovan je kao specifičan slučaj **[Cross-Site Request Forgery (CSRF)](csrf-cross-site-request-forgery.md)** koji utiče na WebSocket handshake. Ova ranjivost se javlja kada WebSocket handshake autentifikuje samo putem **HTTP kolačića** bez CSRF tokena ili sličnih sigurnosnih mera.
Napadači mogu iskoristiti ovo tako što će hostovati **zlonamernu veb stranicu** koja inicira cross-site WebSocket konekciju sa ranjivom aplikacijom. Kao rezultat toga, ova konekcija se tretira kao deo sesije žrtve sa aplikacijom, iskorišćavajući nedostatak CSRF zaštite u mehanizmu upravljanja sesijom.
### Jednostavan napad
Imajte na umu da prilikom **uspostavljanja** websocket konekcije, **kolačić** se **šalje** serveru. Server ga može koristiti da **poveže** svakog **specifičnog** **korisnika** sa njegovom **websocket** **sesijom na osnovu poslatog kolačića**.
Zatim, ako na **primer** websocket **server** **vrati istoriju razgovora** korisnika ako se pošalje poruka sa "**READY"**, onda jednostavan XSS koji uspostavlja konekciju (kolačić će biti **automatski poslat** da autorizuje žrtvu) slanjem "**READY**" će biti u mogućnosti da **dobije** istoriju **razgovora**.
```markup
```
### Cross Origin + Kolačić sa drugim poddomenom
U ovom blog postu [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/) napadač je uspeo da **izvrši proizvoljni JavaScript u poddomenu** domena gde se odvijala komunikacija putem web socket-a. Zbog toga što je bio **poddomen**, **kolačić** je bio **poslat**, a zbog toga što **Websocket nije pravilno proveravao poreklo**, bilo je moguće komunicirati sa njim i **ukrasti tokene iz njega**.
### Krađa podataka od korisnika
Kopirajte veb aplikaciju koju želite da se predstavljate (npr. .html fajlove) i unutar skripte gde se odvija komunikacija putem web socket-a dodajte ovaj kod:
```javascript
//This is the script tag to load the websocket hooker
//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