Bypassing SOP with Iframes - 2
Iframes in SOP-2
У рішенні для цього виклику, @Strellic_ пропонує подібний метод до попереднього розділу. Давайте перевіримо це.
У цьому виклику атакуючий повинен обійти це:
Якщо він це зробить, він може надіслати postmessage з HTML-контентом, який буде записаний на сторінці за допомогою innerHTML
без санітизації (XSS).
Спосіб обійти перевірку - це зробити window.calc.contentWindow
undefined
і e.source
null
:
window.calc.contentWindow
насправді єdocument.getElementById("calc")
. Ви можете знищитиdocument.getElementById
за допомогою<img name=getElementById />
(зауважте, що API санітизації -тут- не налаштовано для захисту від атак DOM clobbering у своєму стандартному стані).Отже, ви можете знищити
document.getElementById("calc")
за допомогою<img name=getElementById /><div id=calc></div>
. Тодіwindow.calc
будеundefined
.Тепер нам потрібно, щоб
e.source
булоundefined
абоnull
(оскільки використовується==
, а не===
,null == undefined
єTrue
). Отримати це "легко". Якщо ви створите iframe і надішлете postMessage з нього, а потім відразу видалите iframe,e.origin
будеnull
. Перевірте наступний код
Щоб обійти другу перевірку щодо токена, потрібно надіслати token
зі значенням null
і зробити значення window.token
undefined
:
Надсилання
token
у postMessage зі значеннямnull
є тривіальним.window.token
у виклику функціїgetCookie
, яка використовуєdocument.cookie
. Зверніть увагу, що будь-який доступ доdocument.cookie
на сторінках зnull
походженням викликає помилку. Це призведе до того, щоwindow.token
матиме значенняundefined
.
Остаточне рішення від @terjanq є наступним:
Last updated