Blocking main page to steal postmessage

Support HackTricks

Winning RCs with Iframes

Kulingana na hii Terjanq writeup hati, nyaraka zilizoundwa kutoka kwa asili za null zimewekwa mbali kwa faida za usalama, ambayo inamaanisha kwamba ikiwa utaendelea kuifanya ukurasa mkuu kuwa na shughuli, ukurasa wa iframe utaanzishwa.

Kimsingi katika changamoto hiyo iframe iliyotengwa inatekelezwa na mara baada ya kupakuliwa ukurasa wa mzazi uta tuma ujumbe wa post na bendera. Hata hivyo, mawasiliano ya postmessage hiyo ni hatari kwa XSS (iframe inaweza kutekeleza msimbo wa JS).

Kwa hivyo, lengo la mshambuliaji ni kuruhusu mzazi kuunda iframe, lakini kabla ya kuruhusu ukurasa wa mzazi kutuma data nyeti (bendera) uweke busy na kutuma payload kwa iframe. Wakati mzazi yuko busy iframe inatekeleza payload ambayo itakuwa baadhi ya JS itakayokuwa inasikiliza ujumbe wa postmessage wa mzazi na kuvuja bendera. Hatimaye, iframe imekamilisha payload na ukurasa wa mzazi unakoma kuwa na shughuli, hivyo inatuma bendera na payload inavuja.

Lakini ungeweza vipi kufanya mzazi kuwa busy mara tu baada ya kuunda iframe na wakati tu inasubiri iframe iwe tayari kutuma data nyeti? Kimsingi, unahitaji kutafuta kitendo cha async ambacho unaweza kufanya mzazi atekeleze. Kwa mfano, katika changamoto hiyo mzazi alikuwa akisikiliza postmessages kama hii:

window.addEventListener('message', (e) => {
if (e.data == 'blob loaded') {
$("#previewModal").modal();
}
});

hivyo ilikuwa inawezekana kutuma nambari kubwa katika postmessage ambayo itakuwa imebadilishwa kuwa mfuatano katika kulinganisha hiyo, ambayo itachukua muda:

const buffer = new Uint8Array(1e7);
win?.postMessage(buffer, '*', [buffer.buffer]);

Na ili kuwa sahihi na kutuma hiyo postmessage mara tu iframe inaundwa lakini kabla haijawa tayari kupokea data kutoka kwa mzazi, utahitaji kucheza na milisekunde za setTimeout.

Support HackTricks

Last updated