mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
31 lines
2.1 KiB
Markdown
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}}
|