Bypassing SOP with Iframes - 2
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
У рішенні для цього виклику, @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 є наступним:
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)