Blocking main page to steal postmessage

Support HackTricks

Winning RCs with Iframes

Volgens hierdie Terjanq writeup is blob dokumente wat van nul oorspronge geskep is, geïsoleer vir sekuriteitsvoordele, wat beteken dat as jy die hoofblad besig hou, die iframe-bladsy gaan uitgevoer word.

Basies in daardie uitdaging word 'n geïsoleerde iframe uitgevoer en reg na dit gelaai is, gaan die ouer bladsy 'n post boodskap met die vlag stuur. Egter, daardie postmessage kommunikasie is kwetsbaar vir XSS (die iframe kan JS kode uitvoer).

Daarom is die doel van die aanvaller om die ouer te laat die iframe skep, maar voor die ouer bladsy die sensitiewe data (vlag) stuur, hou dit besig en stuur die payload na die iframe. Terwyl die ouer besig is, voer die iframe die payload uit wat 'n paar JS sal wees wat sal luister vir die ouer postmessage boodskap en die vlag lek. Laastens, het die iframe die payload uitgevoer en die ouer bladsy stop om besig te wees, so dit stuur die vlag en die payload lek dit.

Maar hoe kan jy die ouer besig maak net nadat dit die iframe gegenereer het en net terwyl dit wag vir die iframe om gereed te wees om die sensitiewe data te stuur? Basies, jy moet 'n async aksie vind wat jy die ouer kan laat uitvoer. Byvoorbeeld, in daardie uitdaging was die ouer besig om te luister na postmessages soos volg:

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

so dit was moontlik om 'n groot heelgetal in 'n postmessage te stuur wat in daardie vergelyking na 'n string omskakel sal word, wat 'n bietjie tyd sal neem:

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

En om presies te wees en daardie postmessage net na die iframe geskep is, maar voor dit gereed is om die data van die ouer te ontvang, sal jy moet speel met die millisekondes van 'n setTimeout.

Support HackTricks

Last updated