# 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