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

31 lines
2.1 KiB
Markdown

# Blokiranje glavne stranice za krađu postmessage
{{#include ../../banners/hacktricks-training.md}}
## Osvojiti RC-ove sa Iframes
Prema ovom [**Terjanq writeup**](https://gist.github.com/terjanq/7c1a71b83db5e02253c218765f96a710) blob dokumenti kreirani iz null izvora su izolovani zbog bezbednosnih prednosti, što znači da ako zadržite glavnu stranicu zauzetom, stranica iframe će biti izvršena.
U suštini, u tom izazovu **izolovani iframe se izvršava** i odmah **nakon** što je **učitan**, **roditeljska** stranica će **poslati post** poruku sa **flagom**.\
Međutim, ta postmessage komunikacija je **vulnerable to 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 pošalje **payload u iframe**. Dok je **roditelj zauzet**, **iframe izvršava payload** koji će biti neki JS koji će slušati za **roditelj postmessage poruku i ukrasti flag**.\
Na kraju, iframe je izvršio payload i roditeljska stranica prestaje da bude zauzeta, tako da šalje flag i payload ga ukrade.
Ali kako biste mogli da učinite da roditelj bude **zauzet odmah nakon što je generisao iframe i samo dok čeka da iframe bude spreman da pošalje osetljive podatke?** U suštini, treba da pronađete **async** **akciju** koju možete naterati roditelja da **izvrši**. Na primer, u tom izazovu roditelj je **slušao** **postmessages** na sledeći način:
```javascript
window.addEventListener("message", (e) => {
if (e.data == "blob loaded") {
$("#previewModal").modal()
}
})
```
tako da je bilo moguće poslati **veliki ceo broj u postmessage** koji će biti **konvertovan u string** u toj uporedbi, što će potrajati neko vreme:
```bash
const buffer = new Uint8Array(1e7);
win?.postMessage(buffer, '*', [buffer.buffer]);
```
I da biste bili precizni i **poslali** taj **postmessage** odmah **nakon** što je **iframe** kreiran, ali **pre** nego što bude **spreman** da primi podatke od roditelja, moraćete da **igrate sa milisekundama `setTimeout`**.
{{#include ../../banners/hacktricks-training.md}}