¡Resolvemos el CTF de estas Navidades!

Buenas a todos, tras unos días de margen para resolver el CTF que os propusimos estas navidades, vamos a lanzar el solucionario oficial.

La primera parte del reto se puede intuir a partir de la pista que dimos en el post del reto.
"La navidad siempre es mejor si la acompañamos con un buen villancico".


Con esto, podemos inferir que estamos buscando un audio en la imagen. En el hipotético y remoto caso de que en el día de la resolución durante las navidades estuviéramos un poco "piruleta", podemos echar mano de algún analizador de metadatos.

Si la imagen estuviera en formato bitmap, podríamos calcular los MB que debería ocupar la imagen con la siguiente fórmula:


Si nuestros cálculos son correctos, y el audio estuviera concatenado a un BMP, habrá bastantes más bytes que en el resultado, así que habría algo más en esa imagen.

Sin embargo, PNG utiliza un sistema de compresión sin pérdida, dificultando la tarea mencionada anteriormente.

En nuestro caso, para demostraros esto, hemos usado el siguiente analizador de metadatos:


Al utilizarlo con “felicitación.png”, todo parece indicar que es una imagen normal a excepción de un parámetro que debería extrañarnos…



¡Hay datos adicionales tras el chunk de finalización del formato PNG!

Ahora abriríamos el archivo con un editor hexadecimal y buscaríamos “IEND”


Y voilá, justo tras él, aparece la cabecera de un archivo wav. Si cortamos a partir de aquí, y lo pegamos en otro archivo con el editor hexadecimal, podremos guardarlo como .wav y el audio será por fin funcional.

Si lo reproducimos, nos daremos cuenta de que al comienzo hay un extraño sonido mezclado bajo la canción. Podemos abrir el audio con un programa de edición e investigar un poco. Si visualizamos la pista en modo espectrograma, veremos lo siguiente:  



Probablemente esta sea la parte más difícil del reto. Cuando miramos los metadatos, no hay nada interesante, llamémosle pista desconcertante  🙃. Sin embargo, es obvio que hay algo más en el audio. El quid en cuestión es LSB (Least Significant Bit). Estamos acostumbrados a ver esta técnica con imágenes, sin embargo, también es aplicable a audio, y nos parecía una idea interesante para dar algún quebradero de cabeza. Crear un script para decodificar LSB es bastante sencillo, así que nos ponemos manos a la obra y tras ejecutarlo con nuestro archivo de audio mágico…


¡Eureka! Esa cadena que acabamos de sacar tiene pinta de ser algo relacionado con Base64. Si probamos a decodificar la cadena, obtendremos la cabecera de un PNG.


Dicho esto, el siguiente paso es directo. Utilizamos un decodificador de B64 a imagen y por fin llegamos al final del reto.


¡Esperamos que os haya gustado! ¡Feliz 2020!