# Clickjacking {{#include ../banners/hacktricks-training.md}} ## Qué es Clickjacking En un ataque de clickjacking, un **usuario** es **engañado** para **hacer clic** en un **elemento** en una página web que es **invisible** o disfrazado como otro elemento. Esta manipulación puede llevar a consecuencias no deseadas para el usuario, como la descarga de malware, redirección a páginas web maliciosas, provisión 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 **llenar 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 Drag\&Drop 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), puedes simplemente pedirle que **Drag\&Drop** algo que escriba tus datos controlados como en [**este ejemplo**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/). ### Carga útil básica ```css
Click me
``` ### Carga útil de múltiples pasos ```css
Click me first
Click me next
``` ### Drag\&Drop + Click payload ```css
.
1. Click and press delete button
3.Click me

2.DRAG ME TO THE RED BOX

``` ### 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 para 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** 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 la **carga útil XSS** y **engañando** al **usuario** para que **envíe** el formulario. Así, **cuando se envía el formulario** y los valores son modificados, el **usuario ejecutará el XSS**. ### DoubleClickjacking Primero [explicado en esta publicación](https://securityaffairs.com/172572/hacking/doubleclickjacking-clickjacking-on-major-websites.html), esta técnica pediría a la víctima que haga doble clic en un botón de una página personalizada colocada en una ubicación específica, y usaría las diferencias de tiempo entre los eventos mousedown y onclick para cargar la página de la víctima durante el doble clic, de modo que la **víctima realmente haga clic en un botón legítimo en la página de la víctima**. Un ejemplo se puede ver en este video: [https://www.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18) Un ejemplo de código se puede encontrar en [esta página](https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html). > [!WARNING] > Esta técnica permite engañar al usuario para que haga clic en 1 lugar en la página de la víctima, eludiendo toda protección contra clickjacking. Por lo tanto, el atacante necesita encontrar **acciones sensibles que se pueden realizar con solo 1 clic, como solicitudes de OAuth que aceptan permisos**. ## Estrategias para Mitigar 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 ruptura de marcos pueden ser eludidos: - **Configuraciones de Seguridad de los Navegadores:** Algunos navegadores pueden bloquear estos scripts según sus configuraciones de seguridad o la falta de soporte para JavaScript. - **Atributo `sandbox` de iframe HTML5:** Un atacante puede neutralizar los scripts de ruptura de marcos configurando el atributo `sandbox` con valores `allow-forms` o `allow-scripts` sin `allow-top-navigation`. Esto impide que el iframe verifique si es la ventana superior, por ejemplo, ```html ``` Los valores `allow-forms` y `allow-scripts` habilitan acciones dentro del iframe mientras deshabilitan la navegación de nivel superior. Para asegurar la funcionalidad deseada del sitio objetivo, pueden ser necesarios permisos adicionales como `allow-same-origin` y `allow-modals`, dependiendo del tipo de ataque. Los mensajes de la consola del navegador pueden guiar sobre qué permisos permitir. ### 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 `` o `