hacktricks/src/pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md

31 lines
2.2 KiB
Markdown

# Blokkeer hoofblad om postmessage te steel
{{#include ../../banners/hacktricks-training.md}}
## Wen RC's met Iframes
Volgens hierdie [**Terjanq skrywe**](https://gist.github.com/terjanq/7c1a71b83db5e02253c218765f96a710) is blob-dokumente wat van nul oorspronge geskep is, geïsoleer vir sekuriteitsvoordele, wat beteken dat as jy die hoofblad besig hou, die iframe-blad uitgevoer gaan word.
Basies in daardie uitdaging word 'n **geïsoleerde iframe uitgevoer** en reg **na** dit **gelaai** is, gaan die **ouer** blad 'n **post** boodskap met die **vlag** **stuur**.\
Egter, daardie postmessage kommunikasie is **kwulnerabel 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** blad **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 sal lek**.\
Uiteindelik het die iframe die payload uitgevoer en die ouerblad stop om besig te wees, so dit stuur die vlag en die payload lek dit.
Maar hoe kan jy die ouer laat **besig wees reg 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 **aan die luister** na **postmessages** soos volg:
```javascript
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:
```bash
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`**.
{{#include ../../banners/hacktricks-training.md}}