4.6 KiB
Kuzuia ukurasa mkuu ili kuiba ujumbe wa postmessage
Jifunze kuhusu kudukua AWS kutoka mwanzo hadi kuwa bingwa na htARTE (HackTricks AWS Red Team Expert)!
- Je, unafanya kazi katika kampuni ya usalama wa mtandao? Je, ungependa kuona kampuni yako ikionekana katika HackTricks? Au ungependa kupata ufikiaji wa toleo jipya zaidi la PEASS au kupakua HackTricks kwa muundo wa PDF? Angalia MPANGO WA KUJIUNGA!
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs za kipekee
- Pata swag rasmi ya PEASS & HackTricks
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au nifuatilie kwenye Twitter 🐦@carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwenye repo ya hacktricks na repo ya hacktricks-cloud.
Kushinda RCs na Iframes
Kulingana na hii Terjanq writeup nyaraka za blob zilizoundwa kutoka asili ya null zimefungwa kwa faida ya usalama, ambayo inamaanisha kuwa ikiwa unashughulikia ukurasa mkuu, ukurasa wa iframe utatekelezwa.
Kimsingi katika changamoto hiyo, iframe iliyofungwa inatekelezwa na baada ya kupakia, ukurasa mzazi utatuma ujumbe wa post na bendera.
Walakini, mawasiliano ya postmessage yanaweza kuwa hatarishi kwa XSS (iframe inaweza kutekeleza nambari ya JS).
Kwa hivyo, lengo la mshambuliaji ni kuwezesha ukurasa mzazi kuunda iframe, lakini kabla ya kuruhusu ukurasa mzazi kutuma data nyeti (bendera), kuweka ukurasa mzazi kuwa na shughuli na kutuma mzigo kwa iframe. Wakati ukurasa mzazi uko na shughuli, iframe inatekeleza mzigo ambao utakuwa nambari ya JS itakayosikiliza ujumbe wa postmessage wa mzazi na kuvuja bendera.
Hatimaye, iframe imefanya mzigo na ukurasa mzazi hauna shughuli tena, kwa hivyo inatuma bendera na mzigo unavuja.
Lakini vipi unaweza kufanya ukurasa mzazi uwe na shughuli mara tu baada ya kuunda iframe na wakati huo huo unasubiri iframe iwe tayari kutuma data nyeti? Kimsingi, unahitaji kupata hatua ya kutekelezwa kwa njia ya async ambayo ukurasa mzazi unaweza kutekeleza. Kwa mfano, katika changamoto hiyo, ukurasa mzazi ulikuwa ukisikiliza ujumbe wa postmessage kama hivi:
window.addEventListener('message', (e) => {
if (e.data == 'blob loaded') {
$("#previewModal").modal();
}
});
hivyo ilikuwa inawezekana kutuma namba kubwa katika ujumbe wa postmessage ambao utabadilishwa kuwa herufi katika ulinganisho huo, ambao utachukua muda fulani:
const buffer = new Uint8Array(1e7);
win?.postMessage(buffer, '*', [buffer.buffer]);
Na ili kuwa sahihi na tuma hiyo postmessage tu baada ya iframe kuundwa lakini kabla haijawa tayari kupokea data kutoka kwa mzazi, utahitaji kucheza na milisekunde za setTimeout
.
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!
- Je, unafanya kazi katika kampuni ya usalama wa mtandao? Je, ungependa kuona kampuni yako ikionekana katika HackTricks? Au ungependa kupata ufikiaji wa toleo jipya zaidi la PEASS au kupakua HackTricks kwa PDF? Angalia MPANGO WA KUJIUNGA!
- Gundua The PEASS Family, mkusanyiko wetu wa kipekee wa NFTs
- Pata swag rasmi ya PEASS & HackTricks
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au nifuate kwenye Twitter 🐦@carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PR kwa repo ya hacktricks na repo ya hacktricks-cloud.