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

4.4 KiB

Blokkeer hoofbladsy om postmessage te steel

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Wen RC's met Iframes

Volgens hierdie Terjanq writeup word blob-dokumente wat vanaf nul-oorsprong geskep is, geïsoleer vir veiligheidsvoordele, wat beteken dat as jy die hoofbladsy besig hou, die iframe-bladsy uitgevoer sal word.

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

Daarom is die doel van die aanvaller om die ouer die iframe te laat skep, maar voordat die ouer-bladsy die sensitiewe data (vlag) stuur, moet dit besig gehou word en die payload na die iframe stuur. Terwyl die ouer besig is, voer die iframe die payload uit wat 'n bietjie JS sal wees wat sal luister vir die ouer postmessage-boodskap en die vlag sal uitlek.
Uiteindelik het die iframe die payload uitgevoer en hou die ouerbladsy op om besig te wees, sodat dit die vlag stuur en die payload dit uitlek.

Maar hoe kan jy die ouer besig hou net nadat dit die iframe gegenereer het en terwyl dit wag vir die iframe om gereed te wees om die sensitiewe data te stuur? Jy moet basies 'n asynchrone aksie vind wat die ouer kan uitvoer. Byvoorbeeld, in daardie uitdaging het die ouer geluister na postmessages soos hierdie:

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 omgeskakel sal word na 'n string, wat 'n bietjie tyd sal neem:

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

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

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!