Ir al contenido principal

Explotación Web (X): Solución Reto 12 CyberOlympics 2018

En esta entrada la solución a uno de los retos de la categoría 'Web' de la edición de 2018 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 desafío, en mi opinión, presenta un nivel de dificultad bajo (☆☆☆).

Enunciado: Un alumno de un instituto harto de que un compañero se ría de él quiere crear una web para vengarse, un profesor lo descubre antes de que pueda terminar su labor, pero solo consigue acceder a un fichero de login de la web del alumno. Deberás descubrir qué pretendía decir este alumno de su compañero para poner paz entre ambos.

Recursos asociados al reto: archivo 12_Medium-20181015T184711Z-001.zip.

Solución: como recurso asociado al reto se proporciona un archivo comprimido que, a su vez, contiene un archivo (hulio.html). Lo Ejecuto en el navegador:
Hago clic en el botón derecho del ratón sobre el botón "Try it" y después pulso sobre “Inspeccionar”:
En la pestaña 'Sources' veo que hay código javascript ofuscado, lo que se hace con la intención de que sea difícil de entender y, por tanto, de aplicar ingeniería inversa:
Voy ahora a ver este mismo código en la pestaña 'Application' y la función 'check()' aparece desofuscada, que es donde se validan el usuario y contraseña que se introducen:
Copio todo ese código y creo un archivo con él, 'hulio.html_2'.

Cierro en el navegador 'hulio.html' y ejecuto el que acabo de crear ('hulio.html_2'). Ahora en la pestaña 'Sources' el código aparece desofuscado y ya puedo hacer algo de depuración (en inglés, 'debugging').

Pongo algunos puntos de ruptura (en inglés, 'breakpoints'), los que se muestran en la figura siguiente, para inspeccionar el código paso a paso, introduzco "a" y "b" en los campos 'user' y 'pass' del formulario de login, respectivamente, y pulso el botón 'Try it':
Como se ve en la figura anterior:

_0x3d44x3 contiene "a", el valor del campo 'user' que he introducido en el formulario de login.
_0x3d44x4 contiene "b", el valor del campo 'pass' que he introducido en el formulario de login.
_0x3d44x5 contiene una lista con los caracteres introducidos en el campo 'pass'.
_0x3d44x6 contiene 0, el valor con el que se inicializa la suma que se realizará en el bucle siguiente.
En el bucle (hasta tratar todos los caracteres introducidos en el campo 'pass') se va sumando a _0x3d44x6 el valor ASCII en decimal correspondiente a cada uno de ellos. En este caso, como he introducido "b" en el campo 'pass' y su longitud es 1, al final del bucle, _0x3d44x6 tiene el valor 98, que es el código ASCII en decimal de "b".
En la sentencia 'if' se valida que el valor introducido en el campo 'user' sea "admin" (no se ve en la figura anterior, pero es la segunda parte de esta sentencia), es decir, que los valores del código ASCII en decimal de los caracteres incluidos en dicho campo se correspondan con: 97 ("a"), 100 ("d"), 109 ("m"), 105 ("i") y 110 ("n"), y que el resto de dividir el valor obtenido anteriormente en _0x3d44x6 (en este caso 98) entre la longitud del 'placeholder' del campo 'user', es decir: 7 ("Usuario"), sea igual que la longitud de lo introducido en el campo 'user', es decir, 5 ("admin").

Como los valores introducidos en el campo 'user' y 'pass' no satisfacen la validación realizada en la sentencia 'if', se muestra "Status: No autorizado" en el formulario de login y el script finaliza.

Por tanto, me queda claro que para pasar la validación del usuario y contraseña debo introducir "admin" en el primer campo y en el segundo un carácter o caracteres cuya suma de sus códigos ASCII dividido entre 7 (longitud de "Usuario", 'placehoder' del campo 'user') sea igual a 5 (longitud de "admin"), por ejemplo: "6" (código ASCII en decimal 54), es decir, resto(54/7)=5:
Ahora en 'Status' se muestra una cadena de caracteres que podría ser un código o un criptograma, pero con lo pista que nos dan ("César") e incluso por el nombre del archivo que se proporciona con el reto (hulio.html), no me cabe ninguna duda de que se trata de un criptograma cifrado con el cifrado César consistente, en este caso, en sustituir cada carácter del texto en claro por aquel que se encuentra cuatro (IV) posiciones delante de él en el alfabeto español ('Ñ' incluida, es decir, 27 caracteres).

Y aunque lo puedo hacer de forma manual sin gran esfuerzo, sustituyendo cada letra del criptograma por aquella que se encuentra cuatro posiciones detrás de él ("JulioNo..."), como hoy estoy un poco vago utilizo una herramienta 'online' para descifrarlo:
Por lo que la solución a este reto es: JulioNoSabeJavaScript.

Comentarios

Entradas populares de este blog

Criptografía (I): cifrado Vigenère y criptoanálisis Kasiski

Hace unos días mi amigo Iñaki Regidor ( @Inaki_Regidor ), a quien dedico esta entrada :), compartió en las redes sociales un post titulado "Criptografía: el arte de esconder mensajes"  publicado en uno de los blogs de EiTB . En ese post se explican ciertos métodos clásicos para cifrar mensajes , entre ellos el cifrado de Vigenère , y , al final del mismo, se propone un reto consistente en descifrar un mensaje , lo que me ha animado a escribir este post sobre el método Kasiski  para atacar un cifrado polialfabético ( conociendo la clave descifrar el mensaje es muy fácil, pero lo que contaré en este post es la forma de hacerlo sin saberla ). El mensaje a descifrar es el siguiente: LNUDVMUYRMUDVLLPXAFZUEFAIOVWVMUOVMUEVMUEZCUDVSYWCIVCFGUCUNYCGALLGRCYTIJTRNNPJQOPJEMZITYLIAYYKRYEFDUDCAMAVRMZEAMBLEXPJCCQIEHPJTYXVNMLAEZTIMUOFRUFC Como ya he dicho el método de Vigenère es un sistema de sustitución polialfabético , lo que significa que, al contrario que en un sistema de

Criptografía (XXIII): cifrado de Hill (I)

En este post me propongo explicar de forma comprensible lo que he entendido sobre el cifrado de Hill , propuesto por el matemático Lester S. Hill , en 1929, y que se basa en emplear una matriz como clave  para cifrar un texto en claro y su inversa para descifrar el criptograma correspondiente . Hay tres cosas que me gustan de la criptografía clásica, además de que considero que ésta es muy didáctica a la hora de comprender los sistemas criptográficos modernos: la primera de ellas es que me "obliga" a repasar conceptos de matemáticas aprendidos hace mucho tiempo y, desgraciadamente, olvidados también hace demasiado tiempo, y, por consiguiente, que, como dice  Dani , amigo y coautor de este blog, me "obliga" a hacer "gimnasia mental"; la segunda es que, en la mayoría de las ocasiones, pueden cifrarse y descifrase los mensajes, e incluso realizarse el criptoanálisis de los criptogramas, sin más que un simple lápiz y papel, es decir, para mi es como un pasat

¿Qué significa el emblema de la profesión informática? (I)

Todas o muchas profesiones tienen un emblema que las representa simbólicamente y en el caso de la  informática: " es el establecido en la resolución de 11 de noviembre de 1977  para las titulaciones universitarias superiores de informática, y  está constituido por una figura representando en su parte central  un  núcleo toroidal de ferrita , atravesado por  hilos de lectura,  escritura e inhibición . El núcleo está rodeado por  dos ramas : una  de  laurel , como símbolo de recompensa, y la otra, de  olivo , como  símbolo de sabiduría. La  corona  será la  de la casa real  española,  y bajo el escudo se inscribirá el acrónimo de la organización. ". Veamos los diferentes elementos tomando como ejemplo el emblema del COIIE/EIIEO (Colegio Oficial de Ingenieros en Informática del País Vasco/ Euskadiko Informatikako Ingeniarien Elkargo Ofiziala ) . Pero no sólo el COIIE/EIIEO adopta el emblema establecido en dicha resolución, sino que éste se adopta también como im