mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
31 lines
2.2 KiB
Markdown
31 lines
2.2 KiB
Markdown
# Blocking main page to steal postmessage
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
## Winning RCs with Iframes
|
|
|
|
Kulingana na hii [**Terjanq writeup**](https://gist.github.com/terjanq/7c1a71b83db5e02253c218765f96a710) hati za blob zilizoundwa kutoka kwa asili za null zimewekwa mbali kwa faida za usalama, ambayo inamaanisha kwamba ikiwa utaweka ukurasa mkuu kuwa na shughuli nyingi, ukurasa wa iframe utaanzishwa.
|
|
|
|
Kimsingi katika changamoto hiyo **iframe iliyotengwa inatekelezwa** na mara **baada** ya **kupakuliwa** ukurasa wa **mzazi** uta **tuma ujumbe wa post** na **bendera**.\
|
|
Hata hivyo, mawasiliano ya postmessage ni **hayana usalama dhidi ya XSS** (**iframe** inaweza kutekeleza msimbo wa JS).
|
|
|
|
Kwa hivyo, lengo la mshambuliaji ni **kuruhusu mzazi kuunda iframe**, lakini **kabla** ya kuruhusu ukurasa wa **mzazi** **kutuma** data nyeti (**bendera**) **uweke shughuli nyingi** na utume **payload kwa iframe**. Wakati **mzazi ana shughuli nyingi** **iframe inatekeleza payload** ambayo itakuwa ni JS itakayokuwa inasikiliza ujumbe wa **postmessage wa mzazi na kuvuja bendera**.\
|
|
Hatimaye, iframe imekamilisha payload na ukurasa wa mzazi unakoma kuwa na shughuli nyingi, hivyo unatumia bendera na payload inavuja.
|
|
|
|
Lakini unaweza vipi kufanya mzazi kuwa **na shughuli nyingi mara tu baada ya kuunda iframe na wakati tu inasubiri iframe iwe tayari kutuma data nyeti?** Kimsingi, unahitaji kutafuta **kitendo** cha **async** ambacho unaweza kumfanya mzazi **atekeleze**. Kwa mfano, katika changamoto hiyo mzazi alikuwa **akisikiliza** **postmessages** kama hii:
|
|
```javascript
|
|
window.addEventListener("message", (e) => {
|
|
if (e.data == "blob loaded") {
|
|
$("#previewModal").modal()
|
|
}
|
|
})
|
|
```
|
|
ilikuwa inawezekana kutuma **nambari kubwa katika postmessage** ambayo itakuwa **imebadilishwa kuwa mfuatano** katika kulinganisha hiyo, ambayo itachukua muda:
|
|
```bash
|
|
const buffer = new Uint8Array(1e7);
|
|
win?.postMessage(buffer, '*', [buffer.buffer]);
|
|
```
|
|
Na ili uwe sahihi na **tuma** hiyo **postmessage** mara tu **iframe** inapotengenezwa lakini **kabla** ya kuwa **tayari** kupokea data kutoka kwa mzazi, utahitaji **kucheza na milisekunde za `setTimeout`**.
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|