Writeup XSSive – HoneyCON18

Hola! Un poco tarde y como primera entrada del blog, os traigo el writeup del reto XSSive del CTF de HoneyCON de este año (2018). Este reto me gustó bastante ya que nunca me había enfrentado a un reto parecido.

El enunciado del reto es:


Cuando entramos en la web del reto nos explica mejor lo que tenemos que hacer:

Por un lado nos proporcionan el código fuente de la aplicación y por otro tenemos la web funcionando. Cuando entramos a la web funcionando, lo primero que vemos es esto:

Como suponemos, ese hacker que hay en la url es lo que muestra en la web a continuación de Hello.

Ahora si miramos el código fuente podemos observar que en JavaScript carga una variable llamada name que corresponde al valor por GET que le hemos pasado de forma que ese valor lo pone ahí el servidor web.

Es decir, el servidor web, en este caso flask, coge el parámetro y a la hora de devolver la web pone justo lo que le pasemos en el hueco donde pondría hacker.

Nuestro objetivo es hacerle un XSS así que vamos a probar a poner unas comillas dobles y a continuación poner un alert para ver si efectivamente hemos conseguido el XSS.

El resultado no es exactamente el que esperábamos ya que me ha escapado las comillas dobles que he puesto.

Para intentar bypassear esto lo que hago es introducir una barra de escape (\) antes de las comillas para que cuando el programa intente escapar nuestra comillas poniéndole la barra de escape, lo que esté escapando realmente sea la barra.

¡¡Ya tenemos el XSS!! Peeero todavía no podemos cantar victoria ya que ahora viene la parte más complicada; en el alert en vez de poner 1 tenemos que hacer que ponga XSS.

Cuando cambio el mensaje puedo ver como me dice que no puedo utilizar la letra S.

Ahora, lo que hago es mirar el código fuente para entender la lógica de la aplicación (cosa que debería haber hecho antes de ponerme a pegarme con la web).

Tras revisar el código, puedo ver como hay una blacklist de caracteres prohibidos. Éstos son “<>[]” y las letras en mayúsculas.

Tras un buen rato intentando meter de todas las formas posibles esas letras, me di cuenta de que el título de la página es justamente la cadena de texto que queremos que muestre.

Así que el payload que necesitaríamos sería \”;alert(document.title);// y cuando introduzcamos eso hace correctamente el bypass y nos muestra la flag.

Imagen simulada que fui tan listo que no hice captura xD

¡¡Si has encontrado otra forma de hacerlo ponla en los comentarios!!

¡Un saludo! @RaSr98

local_offerevent_note diciembre 10, 2018

account_box Rafael Sojo


local_offer

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *