[Microcorruption] Sidney, entre canguros anda el juego

Hola chicos y chicas! Vamos con la segunda entrega de soluciones de Microcorruption. Para esta misión, nos dirigimos a Sidney, Australia. Hogar de koalas, wombats, canguros y demás fauna fantástica. En este caso, para poder cobrar nuestra pasta tendremos que investigar otra versión del microcontrolador de la cerradura digital. En este caso, ha habido un pequeño cambio que no nos lo pondrá tan fácil cómo en la versión anterior.

Primera lectura

Ahora que tenemos un poco más de soltura, si le echamos un vistazo al código de la aplicación, veremos el punto de interés rápidamente. La función check_password:

  • 448a: check_password

Veremos que su bloque está formado por diferentes instrucciones de comparación (cmp) y salto (jnz,jne, jeq).  De momento no vamos a prestarle mucha atención. Vamos a poner un punto de ruptura en su instruccion Return y ejecutamos.

Sidney check_password
check_password

Tras introducir cualquier cosa de contraseña y que la ejecución se pare en nuestro punto de ruptura. Si examinamos la pila y la memoria, esta vez no veremos ningún rastro de una posible contraseña.

Un vistazo a check_password

El siguiente paso es poner un punto de ruptura en la primera línea de la función y cuando pare, comenzamos a analizar que hace exactamente.

La primera instrucción compara un valor fijo con la dirección donde apunta el registro R15. Y este registro apunta justo a la posición donde se almacena la contraseña que hemos introducido. Si examinamos el resto de instrucciones de comparación, vemos que van comparando los valores fijos con partes de nuestra contraseña. Exactamente de dos en dos bytes.

Así que para la siguiente ejecución, vamos a juntar todos estos valores fijos e introducirlos como contraseña. Acordaros de marcar el input: “Check here if entering hex encoded input.” A la hora de escribir, ya que vamos a usar los valores hexadecimales.

Sidney 2 Check here if entering hex encoded input.
Importante! Marcar este check para indicarle que es un valor hexadecimal lo que estamos introduciendo.

Otra cosa a tener en cuenta esque el formato de instrucción es Little Endian. Con lo cual si nuestro valor fijo en la instrucción viene así 0x695f, el comienzo de la contraseña será 5f69.

Haciendo lo anterior, al introducir todos los valores fijos de las comparaciones juntos y ejecutamos y …. ¡Abrete sésamo!

¡Tendrian que ponernos 4 wombats furios y 1 un canguro mosqueado para detenernos!

Conclusión

Esta segunda prueba nos ha servido para aprender a mirar más profundamente el código del controlador de la puerta  y seguir familiarizandonos con el entorno. El próximo reto se complicará un poco más, pero no nos preocupemos por eso. Ahora disfrutemos de nuestra victoria y vamos a tomarnos una copa.

Una cerveza bien fresquita siempre es una buena recompensa

Entradas

  1.  Mi primer CTF. Practicando ensamblador con microcorruption
  2.  Resolviendo el CTF de Nueva Orleans a Ritmo de Jazz
  3. Sidney, entre canguros anda el juego

Deja un comentario

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