Блокування головної сторінки для крадіжки postmessage
Reading time: 2 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Перемога RC з Iframes
Згідно з цим описом Terjanq, блоб-документи, створені з нульових джерел, ізольовані для безпеки, що означає, що якщо ви зайняті головною сторінкою, сторінка iframe буде виконана.
В основному, в цьому виклику ізольований iframe виконується, і відразу після його завантаження батьківська сторінка надішле повідомлення post з флагом.
Однак, ця комунікація postmessage є вразливою до XSS (iframe може виконувати JS-код).
Отже, мета зловмисника полягає в тому, щоб дозволити батьківській сторінці створити iframe, але перед тим, як батьківська сторінка надішле чутливі дані (флаг), тримати її зайнятою і надіслати payload до iframe. Поки батьківська сторінка зайнята, iframe виконує payload, який буде деяким JS, що слухатиме повідомлення postmessage батьківської сторінки і витікатиме флаг.
Нарешті, iframe виконав payload, і батьківська сторінка перестає бути зайнятою, тому вона надсилає флаг, а payload його витікає.
Але як ви могли б змусити батьківську сторінку бути зайнятою відразу після того, як вона згенерувала iframe і лише поки чекає, щоб iframe був готовий надіслати чутливі дані? В основному, вам потрібно знайти асинхронну дію, яку ви могли б змусити батьківську сторінку виконати. Наприклад, в цьому виклику батьківська сторінка слухала postmessages ось так:
window.addEventListener("message", (e) => {
if (e.data == "blob loaded") {
$("#previewModal").modal()
}
})
отже, було можливим надіслати велике ціле число в postmessage, яке буде перетворено в рядок в цьому порівнянні, що займе деякий час:
const buffer = new Uint8Array(1e7);
win?.postMessage(buffer, '*', [buffer.buffer]);
І щоб бути точним і надіслати це postmessage одразу після створення iframe, але до того, як він буде готовий отримати дані від батьківського елемента, вам потрібно буде погратися з мілісекундами setTimeout
.
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.