Bypassing SOP with Iframes - 1
Iframes в SOP-1
У цьому виклику, створеному NDevTK та Terjanq, вам потрібно використати XSS в закодованому.
Основна проблема полягає в тому, що головна сторінка використовує DomPurify для відправлення data.body
, тому для відправлення власних html даних до цього коду потрібно обійти e.origin !== window.origin
.
Давайте подивимося на рішення, яке вони пропонують.
Обхід SOP 1 (e.origin === null)
Коли //example.org
вбудовано в sandboxed iframe, тоді походження сторінки буде null
, тобто window.origin === null
. Таким чином, просто вбудовуючи iframe через <iframe sandbox="allow-scripts" src="https://so-xss.terjanq.me/iframe.php">
ми могли б примусити null
походження.
Якщо сторінку можна вбудовувати, ви можете обійти цей захист таким чином (можливо, також потрібно встановити файли cookie на SameSite=None
).
Обхід SOP 2 (window.origin === null)
Менш відомий факт полягає в тому, що коли встановлено значення sandbox allow-popups
, тоді відкрите вікно успадкує всі атрибути sandbox, якщо не встановлено allow-popups-to-escape-sandbox
.
Отже, відкриваючи вікно з нульового походження, window.origin
всередині вікна також буде null
.
Рішення виклику
Отже, для цього виклику можна створити iframe, відкрити вікно на сторінці з вразливим обробником XSS (/iframe.php
), оскільки window.origin === e.origin
, оскільки обидва є null
, можливо відправити навантаження, яке використовує XSS.
Це навантаження отримає ідентифікатор та відправить XSS назад на верхню сторінку (сторінка, яка відкрила вікно), яка змінить місце на вразливий /iframe.php
. Оскільки ідентифікатор відомий, не має значення, що умова window.origin === e.origin
не виконується (пам'ятайте, походження - це вікно з iframe, яке має походження null
), оскільки data.identifier === identifier
. Потім XSS спрацює знову, цього разу в правильному походженні.
Last updated