# Iframes in XSS, CSP and SOP {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %} ## Iframes in XSS Є 3 способи вказати вміст iframe-сторінки: * Через `src`, вказуючи URL (URL може бути крос-доменним або того ж домену) * Через `src`, вказуючи вміст, використовуючи протокол `data:` * Через `srcdoc`, вказуючи вміст **Доступ до змінних батьківського та дочірнього контексту** ```html ``` ```html ``` Якщо ви отримуєте доступ до попереднього html через http сервер (наприклад, `python3 -m http.server`), ви помітите, що всі скрипти будуть виконані (оскільки немає CSP, що цьому перешкоджає). **батьківський контекст не зможе отримати доступ до змінної `secret` всередині жодного iframe** і **тільки iframes if2 та if3 (які вважаються такими ж сайтами) можуть отримати доступ до секрету** в оригінальному вікні.\ Зверніть увагу, що if4 вважається таким, що має `null` походження. ### Iframes з CSP {% hint style="info" %} Зверніть увагу, що в наступних обходах відповідь на iframe-сторінку не містить жодного заголовка CSP, який заважає виконанню JS. {% endhint %} Значення `self` для `script-src` не дозволить виконання JS коду, використовуючи протокол `data:` або атрибут `srcdoc`.\ Однак навіть значення `none` для CSP дозволить виконання iframes, які вказують URL (повний або лише шлях) в атрибуті `src`.\ Отже, можливо обійти CSP сторінки за допомогою: ```html ``` Зверніть увагу, що **попередній CSP дозволяє виконання лише вбудованого скрипту**.\ Однак, **будуть виконані лише скрипти `if1` та `if2`, але лише `if1` зможе отримати доступ до секрету батьківського елемента**. ![](<../../.gitbook/assets/image (372).png>) Отже, можливо **обійти CSP, якщо ви можете завантажити JS файл на сервер і завантажити його через iframe, навіть з `script-src 'none'`**. Це **можливо також зробити, зловживаючи кінцевою точкою JSONP того ж сайту**. Ви можете протестувати це за наступним сценарієм, де куки викрадаються навіть з `script-src 'none'`. Просто запустіть додаток і отримайте до нього доступ через ваш браузер: ```python import flask from flask import Flask app = Flask(__name__) @app.route("/") def index(): resp = flask.Response('') resp.headers['Content-Security-Policy'] = "script-src 'self'" resp.headers['Set-Cookie'] = 'secret=THISISMYSECRET' return resp @app.route("/cookie_s.html") def cookie_s(): return "" if __name__ == "__main__": app.run() ``` ### Інші корисні навантаження, знайдені в дикій природі ```html ``` ### Iframe sandbox Вміст в iframe може підлягати додатковим обмеженням за допомогою атрибута `sandbox`. За замовчуванням цей атрибут не застосовується, що означає, що обмеження не діють. Коли використовується, атрибут `sandbox` накладає кілька обмежень: * Вміст розглядається так, ніби він походить з унікального джерела. * Будь-яка спроба надсилання форм блокується. * Виконання скриптів заборонено. * Доступ до певних API вимкнено. * Запобігає взаємодії посилань з іншими контекстами перегляду. * Використання плагінів через ``, ``, `` або подібні теги заборонено. * Навігація верхнього рівня контексту перегляду вмістом сама по собі заборонена. * Функції, які запускаються автоматично, такі як відтворення відео або автоматичне фокусування елементів форм, блокуються. Значення атрибута можна залишити порожнім (`sandbox=""`), щоб застосувати всі вищезазначені обмеження. Альтернативно, його можна встановити на список специфічних значень, розділених пробілами, які звільняють iframe від певних обмежень. ```html ``` ## Iframes в SOP Перевірте наступні сторінки: {% content-ref url="../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md" %} [bypassing-sop-with-iframes-1.md](../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md) {% endcontent-ref %} {% content-ref url="../postmessage-vulnerabilities/bypassing-sop-with-iframes-2.md" %} [bypassing-sop-with-iframes-2.md](../postmessage-vulnerabilities/bypassing-sop-with-iframes-2.md) {% endcontent-ref %} {% content-ref url="../postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md" %} [blocking-main-page-to-steal-postmessage.md](../postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md) {% endcontent-ref %} {% content-ref url="../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md" %} [steal-postmessage-modifying-iframe-location.md](../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md) {% endcontent-ref %} {% hint style="success" %} Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Підтримати HackTricks * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! * **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
{% endhint %}