hacktricks/pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md
2024-02-11 02:13:58 +00:00

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

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