# Блокування головної сторінки для крадіжки postmessage {{#include ../../banners/hacktricks-training.md}} ## Перемога RC з Iframes Згідно з цим [**описом Terjanq**](https://gist.github.com/terjanq/7c1a71b83db5e02253c218765f96a710), блоб-документи, створені з нульових джерел, ізольовані для безпеки, що означає, що якщо ви зайняті головною сторінкою, сторінка iframe буде виконана. В основному, в цьому виклику **ізольований iframe виконується**, і відразу **після** його **завантаження** **батьківська** сторінка **надішле** повідомлення post з **флагом**.\ Однак, ця комунікація postmessage є **вразливою до XSS** (**iframe** може виконувати JS-код). Отже, мета зловмисника полягає в тому, щоб **дозволити батьківській сторінці створити iframe**, але **перед тим**, як **батьківська** сторінка **надішле** чутливі дані (**флаг**), **тримати її зайнятою** і надіслати **payload до iframe**. Поки **батьківська сторінка зайнята**, **iframe виконує payload**, який буде деяким JS, що слухатиме **повідомлення postmessage батьківської сторінки і витікатиме флаг**.\ Нарешті, iframe виконав payload, і батьківська сторінка перестає бути зайнятою, тому вона надсилає флаг, а payload його витікає. Але як ви могли б змусити батьківську сторінку бути **зайнятою відразу після того, як вона згенерувала iframe і лише поки чекає, щоб iframe був готовий надіслати чутливі дані?** В основному, вам потрібно знайти **асинхронну** **дію**, яку ви могли б змусити батьківську сторінку **виконати**. Наприклад, в цьому виклику батьківська сторінка **слухала** **postmessages** ось так: ```javascript window.addEventListener("message", (e) => { if (e.data == "blob loaded") { $("#previewModal").modal() } }) ``` отже, було можливим надіслати **велике ціле число в postmessage**, яке буде **перетворено в рядок** в цьому порівнянні, що займе деякий час: ```bash const buffer = new Uint8Array(1e7); win?.postMessage(buffer, '*', [buffer.buffer]); ``` І щоб бути точним і **надіслати** це **postmessage** одразу **після** створення **iframe**, але **до** того, як він буде **готовий** отримати дані від батьківського елемента, вам потрібно буде **погратися з мілісекундами `setTimeout`**. {{#include ../../banners/hacktricks-training.md}}