Este reto esta dedicado a todos aquellos que consideren que ganarse una entrada con un sorteo no es meritorio y prefieren hacer un poco mas de esfuerzo ;)
La primera persona que envíe la respuesta correcta al correo fernando.a.quintero AT gmail.com acompañada de un corto resumen explicando como logró solucionarlo se ganará una entrada* para el evento Security Zone que se realizará el 6 y 7 de Diciembre de 2012 en la ciudad de Cali, Colombia.
Muchas veces un XOR es solo el inicio, no pierdas la cabeza con este reto.
Bienvenido al mini reto #4 : XOR IT!
*Gastos adicionales como transporte, alimentación, alojamiento, cerveza, talleres, etc. NO están incluidos.
Buena suerte.
UPDATE:
UPDATE:
Durante el reto recibí muchas consultas relacionadas sobre el procedimiento para solucionar el reto, la mayoría de las personas estaban bien encaminadas sin embargo se perdían en algunos detalles.
Aqui les dejo algunas soluciones propuestas:
@XKORPION : http://pastebin.com/7rYeiYuu
Juan Esteban Valencia: http://www.sendspace.com/file/yrrd7n
@crodallega : http://www.sendspace.com/file/4u9fsw
Como siempre hay varias formas de resolver los retos, un procedimiento de ejemplo es el siguiente:
1. El archivo descargado parece simplemente DATA, si tenemos las pistas (xor) de que es posiblemente un PDF entonces con un "strings" podemos tener pistas para encontrar un byte ("s") repetitivo con el que se hace el xor. En las respuestas publicadas hay varias formas de acercarse a este valor.
Herramientas útiles:
xor:
xorsearch:
2. El obtener el PDF es solo la primera parte, lo que sigue es abrirlo y tratar de entender de que se trata, el contenido del PDF sirve como pista también. A la mayoría de las personas se les ocurrió buscar el nombre en Internet y efectivamente van a encontrar el PDF original. Cuando los comparen se darán cuenta de que no son iguales. Puede compararlos con:
vbindiff:
Se pueden ver en rojo los bytes que no son iguales en el archivo entregado para el reto.
3. Conociendo los bytes diferentes los extraigo y los pongo en un archivo diferente, en total serán 256 bytes. Esto se hace con un script en el lenguaje que mas les guste.
4. El paso difícil aqui es entender que hacer con los 256 bytes, pero la pista que se dio apunta a que se trata de un shellcode, para Linux de 64 bits. El shellcode se puede convertir en un binario, la mas fácil es usar un stub que funcione para 64 bits (ojo, no todos los stubs funcionaran y menos los tradicionales). Aqui pueden encontrar algunos:
5. Lo siguiente es analizar el shellcode anterior, el binario generado o ejecutar el binario y analizar su comportamiento (ojo, en algunos casos puede ser realmente maligno :P , se asume que están en un entorno de pruebas o están haciendo un análisis estatico). Con un simple "strings" al binario, con un análisis del shellcode o después de ejecutar el binario encontraran este string:
"|h.l$.L.d$.H..l.%...L.l$.L.t$.l.|$.h.\\\\$.h..a..i..h...i..|.H..T.1...@.l..L..D..a...H.H9.R.H.\\\\$.H.L$|h.L$.l.d$.h..L.%...l.l$.L.t$.l.|$.h.\\\\$.h..a..I..h...I..|.h..T.1...@.l..L..d..A...H.h9.R.h.\\\\$.H.L$|h.l$.l.d$.H..l.%...l.l$.L"
Este string esta fabricado a proposito pues es un string generico en muchos binarios de Linux, así que bien podría ser una pista o ser algo mas. La mayoría de los concursantes llegaron hasta aquí y falto solo un paso como se dijo en los tuits de ayuda.
El ultimo paso era usar este string en el software de horrografia de @hecky :
Dando como resultado la flag ganadora: secxone ;)
Gracias a todos por jugar!