05 septiembre 2009

4/4 - Wargame CP2009 - Pruebas de Binarios

Con bastante mas retraso de lo que me hubiera gustado, aquí está la última entrega de la saga 'Wargame CP2009': Binarios

La prueba Nº1 (cortesía de Iñigo Merchán) estaba basada en un fichero java compilado que debía ejecutarse con un parámetro (nombre de usuario) y requería que se respondiera a un desafío.

Haciendo uso de, por ejemplo, una herramienta como JAD, se podía decompilar todo el código y averiguar que el desafío era el sha-512 del usuario que se le suministraba como parámetro. Ejemplo:

eon ~/campus $ echo -n user | sha512sum
b14361404c078ffd549c03db443c3fede2f3e534d73f78f
77301ed97d4a436a9fd9db05ee8b325c0ad36438b43fec85
10c204fc1c1edb21d0941c00e9e2c1ce2
-
eon ~/campus $ java OhHai user
So ... WTF are you?
->b14361404c078ffd549c03db443c3fede2f3e534d73f78f
77301ed97d4a436a9fd9db05ee8b325c0ad36438b43fec85
10c204fc1c1edb21d0941c00e9e2c1ce2
Hoooray!! Your pass is "Knock, knock"

En la prueba Nº2 había que implementar un sistema para conseguir alterar la hora del sistema a los ojos de un binario que se negaba a dar el token hasta el 10-08-09. Evidentemente el usuario con el que se accedía al sistema no era root y por tanto no se podía cambiar la hora del sistema, adicionalmente para evitar que alguien 'se llevara el binario a casa' al ejecutarlo comprobaba la existencia del fichero /tmp/matrixhasyou y de no estar, no se ejecutaba. El binario contaba con una serie de protecciones anti-debug para que no resultara tan obvio que funciones llamaba y las variables estaban cifradas con Elf-Encrypter. También, a modo de despiste, el programa preguntaba por el nombre del concursante pero no había errores en el manejo de esa cadena.

Para resolver la prueba había que crear una librería compartida .so que fuera cargada mediante la variable LD_PRELOAD para devolver la salida de la función time() alterada.

Ejemplo de librería .so:

int time() {

long data= 1249862401 ;

return data;
}


La prueba Nº3 (cortesía de Javier Olascoaga) es un crackme en forma de aplicación simple que presenta un único punto de entrada de texto en forma de textbox y un botón que valida el texto introducido.

La temática del crackme es un homenaje al primer disco del grupo Oasis, What’s the story morning Glory?.

La aplicación está desarrollada en C#, por lo que es posible obtener el código fuente de esta, utilizando algún software para tal fin, como puede ser reflector. La única protección que se ha aplicado sobre el código es una ofuscación simple, sin cifrado de cadenas, por lo que el nombre de funciones y variables no son los originales.

El crackme es bastante sencillo, tiene una función que cifra/descifra con Rijandael utilizando como clave la fecha del sistema.

La particularidad de esta aplicación es que es necesaria una fecha específica para poder descifrar la cadena de forma correcta. Por lo que es necesario cambiar la fecha del sistema al día 2 de Octubre de 1995, fecha en que salió el disco “What’s the story morning Glory?” de Oasis.

La prueba Nº4 era un pequeño guiño remember en la que había que desarrollar un exploit contra un programa setuid que tenia un bug de tipo Buffer overflow. El programa actuaba a modo de 'echo' y se le podía explotar suministrándole un parámetro superior a 500 caracteres.

Mucha gente pensó que había que sobrepasar protecciones de pila o randomización de direcciones; nada mas lejos de la realidad, la maquina había sido configurada para deshabilitar todas las protecciones, así que aplicando las técnicas del mítico papper 'Smashing the stack for fun and profit' se podía pasar la prueba. Para 'desconfigurar' la Fedora Core 11 se hizo de la siguiente forma:

sysctl -w kernel.exec-shield=0

echo 0 > /proc/sys/kernel/randomize_va_space

Felicidades a Javi Moreno (vierito5) por ganar tan brillantemente el concurso y a todos los participantes por su fair play y altísimo nivel.

Y aprovechando este post, agradecemos enormemente a toda la gente que conocimos en la campus por su exquisito trato, calidad humana y la cantidad de horas divertidas que nos hicieron pasar. ¡¡¡ GRACIAS !!!