Blocking main page to steal postmessage

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Pobeda RC-ova sa Iframe-ovima

Prema ovom Terjanq writeup-u blob dokumenti kreirani iz null origin-a su izolovani radi bezbednosti, što znači da ako održavate zauzetu glavnu stranicu, iframe stranica će biti izvršena.

U suštini, u tom izazovu se izvršava izolovani iframe i odmah nakon što se učita, roditeljska stranica će poslati post poruku sa flag-om. Međutim, ta komunikacija putem postmessage-a je ranjiva na XSS (iframe može izvršiti JS kod).

Stoga, cilj napadača je da omogući roditelju da kreira iframe, ali pre nego što roditeljska stranica pošalje osetljive podatke (flag), drži je zauzetom i šalje payload iframe-u. Dok je roditelj zauzet, iframe izvršava payload koji će biti neki JS kod koji će slušati postmessage poruku roditelja i procuriti flag. Na kraju, iframe je izvršio payload i roditeljska stranica prestaje biti zauzeta, pa šalje flag i payload ga otkriva.

Ali kako možete učiniti da roditelj bude zauzet odmah nakon što generiše iframe i samo dok čeka da iframe bude spreman da pošalje osetljive podatke? U suštini, trebate pronaći asinhronu akciju koju možete da izvršite na roditelju. Na primer, u tom izazovu roditelj je slušao post poruke na sledeći način:

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

tako je bilo moguće poslati veliki celi broj u postmessage koji će biti pretvoren u string u toj poređenju, što će oduzeti neko vreme:

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

I kako biste bili precizni i poslali taj postmessage odmah nakon što je iframe kreiran, ali pre nego što je spreman da primi podatke od roditelja, moraćete da manipulišete milisekundama setTimeout.

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Last updated