Bypassing SOP with Iframes - 2
Iframes в 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 у своєму стандартному стані).Тому ви можете перекрити
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