💿XSS - Skills Assessment
Última actualización
Última actualización
Estamos realizando una tarea de prueba de penetración de aplicaciones web para una empresa que nos contrató y que acaba de lanzar su nuevo sitio web Security Blog
. En nuestro plan de prueba de penetración de aplicaciones web, llegamos a la parte en la que debe probar la aplicación web contra vulnerabilidades Cross Site Scripting (XSS).
Acceda al directorio /assessment
en el servidor usando el navegador:
Aplique las habilidades aprendidas en este módulo para lograr lo siguiente:
Identificar un input que sea vulnerable a una vulnerabilidad XSS
Busque un payload XSS que funcione y que ejecute código JavaScript en el navegador de destino
Usando las técnicas de Session Hijacking
, intenta robar las cookies de la víctima, que deben contener la flag.
Si en la home pinchamos en el título, nos lleva a una entrada de blog con un formulario para dejar un comentario. Es el único punto donde podríamos probar un XSS:
Al introducir en los inputs test
nos dice que tenemos que introducir un email válido, con lo que a priori ese campo no sería inyectable, ya que tiene aplicada la validación:
Al enviarlo de nuevo nos damos cuenta de que dice que los comentarios los debe validar un administrador, y no nos da más información, por lo que parece que podríamos estar ante un Blind XSS:
Si nos fijamos en la URL tenemos esto:
Un hash? Podría ser el del administrador? Interesante
Al hacer un escaneo de la URL con XSStrike nos devuelve esto:
Si nos fijamos en el primer objeto vulnerable encontramos un script parecido al de la sección de Session Hijacking
:
Podríamos probar a ver si funciona montando un servidor local con php y que nos devuelva la conexión.
Si inspeccionamos el código fuente encontramos los IDs de los inputs, que vamos a usar para enviarnos una petición y identificar el input vulnerable:
Vamos a preparar los payloads que vamos a introducir en cada input, basándonos en el script que encontramos con XSStrike:
El de email no lo vamos a usar, ya que tiene validación de input, por lo que en principio no sería vulnerable.
Vamos a abrir un servidor local con PHP de la siguiente manera:
Al enviarlo... obtenemos una petición GET con status 200 en el input url, con lo que ya hemos detectado un input vulnerable a XSS:
Ahora que hemos detectado el input vulnerable vamos a intentar un Session Hijacking para obtener la cookie de la víctima.
Vamos a crear un script.js
en el directorio /tmp/tmpserver
:
Nota: la IP debe ser la de nuestro equipo de atacante
Vamos a crear un archivo index.php
en el directorio /tmp/tmpserver
como el siguiente:
Vamos a abrir de nuevo un servidor local con php en el directorio /tmp/tmpserver
:
Vamos a crear el payload definitivo para usar en el input url
:
Le damos a enviar y... buum! Obtenemos la cookie, que lleva la flag implícita 🏆