Solución a uno de los retos de la categoría 'Web' de la edición de 2019 de CyberOlympics, competición en modalidad 'on-line', estilo 'Capture the Flag' y formato 'Jeopardy' dirigida a centros educativos y organizada por el Instituto Nacional de Ciberseguridad (INCIBE) en el marco de la actividad llamada CyberCamp.
Este desafió, que llevaba por título "JSAdminPass", en mi opinión, presenta un nivel de dificultad bajo (★★☆☆☆).
Su enunciado decía lo siguiente:
Necesitamos conocer la información que hay detrás de este panel de control. ¿Puedes proporcionar la clave para el acceso?.
#beautiful #javascript #consoleoutput #debugging #stepbystep
Solución: como archivo asociado al reto se proporciona un archivo comprimido (JSAdminPass.tar.gz) que contiene dos archivos (index_megntlow.html y obfuscated_megntlow.js). Ejecuto en el navegador el primero de ellos:
Hago clic en el botón derecho del ratón sobre "Login"y después pulso sobre “Inspeccionar” :
Intento analizar el código (#javascript) de "obfuscated_megntlow.js" en la pestaña 'Sources':
:
Se entra en el script, el 'debugging' se detiene en la primera instrucción de la función validar() y voy ejecutando paso a paso el resto de instrucciones:
Como se ve en la figura anterior, en la sentencia "if" se compara el contenido de _0x1ec405, que contiene el valor del campo "Usuario" que hemos introducido ("user") con el contenido de _0x58a3('0x2'), que contiene el valor "admin", y el contenido de _0x50dfa6, que contiene el valor del campo "Clave" que hemos introducido ("key") con el contenido de _0x58a3('0x3'), que contiene el valor “XXXXXXXXXXXXXXXX” (he sustituido los caracteres de este campo por caracteres "X", ya que éste es el valor de la flag). Como la comparación de ambos campos es diferente se bifurca hacia el else y se produce el correspondiente error.
Es decir, sólo cuando el campo "Usuario" es igual a "admin" y el campo "Clave" es igual a “XXXXXXXXXXXXXXXX” se muestra la flag.
La que podemos ver en el 'debugging' o en la consola (#consoleoutput):
Lo que nos indica que la flag es el contenido del campo "Clave" introducido: flag{XXXXXXXXXXXXXXXX}
Este desafió, que llevaba por título "JSAdminPass", en mi opinión, presenta un nivel de dificultad bajo (★★☆☆☆).
Su enunciado decía lo siguiente:
Necesitamos conocer la información que hay detrás de este panel de control. ¿Puedes proporcionar la clave para el acceso?.
#beautiful #javascript #consoleoutput #debugging #stepbystep
Hago clic en el botón derecho del ratón sobre "Login"
Intento analizar el código (#javascript) de "obfuscated_megntlow.js" en la pestaña 'Sources':
Pero está ofuscado. Voy al mismo código en la pestaña 'Application'. Copio el código y sustituyo con éste el código del segundo archivo que se proporciona con el reto (obfuscated_megntlow.js). Cierro en el navegador el primero de los archivos que se proporciona con el reto (index_megntlow.html) y vuelvo a ejecutarlo. Ahora el código javascript de "obfuscated_megntlow.js" en la pestaña 'Sources' aparece desofuscado:
Y ahora voy a poner unos puntos de interrupción (‘breakpoints’), los que se muestran en la figura siguiente, para inspeccionar el código paso a paso (#stepbystep) mediante técnicas de depuración (#debugging). En los campos "Usuario" y "Clave" del formulario introduzco “user” y “key”, respectivamente, y pulso sobre el botón "Login"Como se ve en la figura anterior, en la sentencia "if" se compara el contenido de _0x1ec405, que contiene el valor del campo "Usuario" que hemos introducido ("user") con el contenido de _0x58a3('0x2'), que contiene el valor "admin", y el contenido de _0x50dfa6, que contiene el valor del campo "Clave" que hemos introducido ("key") con el contenido de _0x58a3('0x3'), que contiene el valor “XXXXXXXXXXXXXXXX” (he sustituido los caracteres de este campo por caracteres "X", ya que éste es el valor de la flag). Como la comparación de ambos campos es diferente se bifurca hacia el else y se produce el correspondiente error.
Es decir, sólo cuando el campo "Usuario" es igual a "admin" y el campo "Clave" es igual a “XXXXXXXXXXXXXXXX” se muestra la flag.
La que podemos ver en el 'debugging' o en la consola (#consoleoutput):
Lo que nos indica que la flag es el contenido del campo "Clave" introducido: flag{XXXXXXXXXXXXXXXX}
Comentarios
Publicar un comentario