martes, 5 de noviembre de 2019

PentesterLab - XSS

Bienvenidos de nuevo a Who is secure. Antes de nada, siento esta parada de un mes pero he tenido complicaciones para preparar entradas para el blog, pero vuelvo a estar aquí. Esta vez traigo una práctica de XSS con un laboratorio de PentesterLab. Para acceder a este laboratorio hacemos click en "Files" en la columna de la izquierda y descargaremos la ISO que montaremos en una máquina virtual. Omitiré esta explicación ya que no es el objetivo de la publicación y debido a que es sencillo.



Una vez que hemos montado la máquina y desde nuestro navegador vamos a su dirección, saldrá algo como esto:

Index de PentesterLab MV

Hoy veremos los primeros ejemplos de XSS, pero en futuras entradas veremos el resto.

Nos dirigimos a el primer ejemplo. Aquí podremos ver que la variable name está declarada en la dirección como "hacker" y que es imprimida debajo. Veremos como encontrar la vulnerabilidad.

Ejercicio 1

La vulnerabilidad consiste en romper los filtros puestos para insertar código de javascript en la página, en mi caso el payload que intento ejecutar es <script>alert(document.domain)</script>, esto ejecutará un script que mostrará en pantalla el dominio. En escenarios reales, el atacante podría usar esta vulnerabilidad para ejecutar otros scripts con fines tales como robo de cookies.

Pruebo a sustituir "hacker" por mi payload y, ¡funciona! El primer reto es sencillo, los siguientes tendrán mayor complicación.


Como podéis ver, se ha mostrado la alerta, así que pasamos al siguiente.

La situación inicial es la misma que antes, pero si probamos a hacer la misma sustituición, veremos que algo falla:


Si nos fijamos, han desaparecido la apertura y el cierre, esto es porque el filtro elimina las partes que contienen "script", para saltarnos este filtro podemos probar con un cambio en las letras escribiendo alguna mayúscula. Esto evita que detecte "script" y lo elimine, permitiendonos ejecutar el script.


Genial, pasemos al tercer reto. De nuevo, nos encontramos con lo mismo, "name=hacker" y hacker es imprimido en el cuerpo de la web. Si probamos con las combinaciones que hemos usado antes, comprobaremos que ninguna da resultado.

El filtro detecta si hay "script" y lo elimina, probemos a separar un "script" con otro igual, si lo elimina nos unirá las dos mitades obteniendo la palabra completa.


¡El resultado ha sido el esperado! Pasemos al siguiente reto y el último de hoy.


El cuarto reto empieza como los demás, pero tiene una particularidad. Probemos a insertar <script>alert(document.domain)</script>.


La página nos muestra "error". Detecta que estamos insertando "script" y rechaza la petición, usar payloads que contengan esta palabra no nos servirá, por lo que toca buscar una alternativa. Hay muchas listas de payloads que nos pueden servir, en mi caso buscaré en alguna de las publicadas en GitHub como PayloadsAllTheThings.

Si usamos <img src=x onerror=alert(document.domain)</script>:


La explicación de este reto es que evitando usar las etiquetas de script, podemos ejecutar código de otras formas, como usando la etiqueta de imagen, que buscará en la ruta "x" la cual no existe y con "onerror" ejecutará la alerta al no encontrar dicha imagen.

Bueno, con esto termino por hoy, otro día seguiré con los retos de XSS de este laboratorio para terminarlos. Recordad que podéis descargar la ISO para montar el laboratorio y probar vuestros conocimientos. Muchas gracias por leerme un día más y nos vemos otra semana.

No hay comentarios:

Publicar un comentario