Mostrando entradas con la etiqueta wargamecp2009. Mostrar todas las entradas
Mostrando entradas con la etiqueta wargamecp2009. Mostrar todas las entradas

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 !!!
Leer más...

16 agosto 2009

3/4 - Wargame CP2009 - Pruebas de Criptografía

Volvemos con la tercera entrega de las soluciones a los retos del concurso de hacking ético de la Campus Party, en esta ocasión con las pruebas de criptografía. Esta categoría como en el resto, se compuso por cuatro fases de distintos niveles.

El primer problema consistía en acceder al contenido almacenado de un archivo PDF, este PDF era el documento que describía las bases del concurso y dentro de el se encontraba un archivo p12 que será utilizado en el último nivel y otro de texto con la contraseña para pasar a la siguiente prueba. Uno de los métodos para acceder a esta información es el uso de Fuse::PDF.

En la segunda prueba se proporcionaba una web con una imagen de fondo que contenía un código QR y un md5 central para despistar. Al decodificar el QR con alguna herramienta como http://zxing.org/w/decode.jspx se obtiene un texto en Base64. Al descodificarlo se muestra otro texto que tampoco está en claro. Para resolver esta última parte, se analizan las frecuencias de aparición de cada letra y se observa que es un texto de sustitución simple, en el que hay que encontrar el alfabeto usado para llevar a cabo la sustitución (ya sea a mano o por diccionario).
Una vez realizada la sustitución si el texto era buscado en Google se accedía a una url de esta web. La contraseña para pasar el nivel era el título de la entrada.

En la tercera prueba se presentaba un twitter con mensajes cifrados con RC4, que se habían incrustado utilizando la herramienta CipherTwitter, para obtener la contraseña y acceder al siguiente nivel había que aplicar fuerza bruta en base a un diccionario generado de la página web de SecurityByDefault.

En la cuarta y última prueba había que utilizar el certificado obtenido del PDF, lo que requiere conocer su contraseña, algunos de los participantes diseñaron sus propias herramientas para obtenerla, aunque ya estaba disponible Brute12 de la que ya hemos hablado en otra ocasión. Una vez se accedía al contenido web usando este certificado, se visualizaba una imagen que mediante esteganografía ocultaba a su vez otra imagen con la palabra de paso para solucionar el nivel. Una opción para obtener la imagen final era el uso de OpenStego que aplica RandomLSB, tal y como se había diseñado.

Leer más...

08 agosto 2009

2/4 - Wargame CP2009 - Pruebas de Web

Llegamos a la segunda publicación sobre las soluciones del concurso de hacking ético de la CampusParty 2009. Hoy explicando las pruebas de aplicaciones web.

El primer problema era muy sencillo, se mostraba un formulario de autenticación en el que un usuario necesitaba recordar su contraseña para acceder, como pistas se proporcionaba la opción de recuperarla mediante una pregunta secreta. La respuesta estaba escrita en twitter bajo un usuario con su mismo nombre. Para resolverla bastaba con buscar en los sitios habituales para "perfilar" al usuario.

En segundo lugar otro formulario de autenticación escrito en flash, para superarlo era necesario analizarlo con alguna herramienta y conocer a que cadena de caracteres correspondía un md5 incrustado en el código. fuente. La respuesta aparecía en cualquier web tipo rainbowtables.

Para la tercera prueba utilizamos las grandes manos de Pedro Laguna y su intenso conocimiento de XML XPath Injection, facilitándonos un formulario de autenticación vulnerable y un sistema de blogs igualmente vulnerable a este tipo de ataque. Para pasar la prueba había que obtener la contraseña que se encontraba en un comentario de uno de los ficheros XML.

Como cuarta y última prueba se configuró un directorio de Apache con la directiva <Limit> para los métodos GET y POST, por lo que se solicitaba autenticación básica para acceder. Para saltarse esta restricción se puede aplicar una vulnerabilidad explicada por dos grandes hackers españoles, Frame y Madj0ker, en su documento "Bilbao Method Exposed".

Una vez con acceso al directorio se permitía ejecutar un PHP sencillo de autenticación "login.php", que era vulnerable a un Blind SQL Injection en MySQL y con el que se obtenía la contraseña para terminar la fase. La gracia de la prueba consistía en que todos los participantes tuvieron que modificar todas las peticiones web para sustituir los GETs por otro método distinto, algo que se puede hacer con herramientas de auditoría web como Burp Proxy.


Leer más...

05 agosto 2009

1/4 - Wargame CP2009 - Pruebas de Redes

El concurso de hacking de la Campus Party ha terminado. Ha sido tremendamente divertido organizarlo y ver a los concursantes participar.

El juego estaba dividido en cuatro partes: redes, web, binarios y criptografía, con cuatro pruebas por bloque. Cada prueba con una puntuación distinta partiendo de 100 y terminando en 250 con 50 puntos de diferencia entre prueba.

Para todos aquellos que nos lo han pedido, vamos a contar brevemente algunas pruebas y más detalladamente otras. Hoy nos centraremos en uno de los cuatro bloques en los que las dividimos: networking.

En todas las pruebas de redes se facilitaba un archivo PCAP con datos y una pequeña pregunta con lo que se pretendia obtener.

El primer archivo era la captura de una petición GET de un archivo comprimido con una contraseña tan compleja como "123456", una vez extraído el fichero con alguna herramienta como NetworkMiner, se podía leer en un archivo la contraseña para pasar la prueba.

La segunda prueba consistía en un archivo que mostraba un RETR de un FTP de un archivo de imagen, esta imagen contenía como información EXIF las coordenadas GPS de una tienda de Londres junto a una estación de metro, que era la respuesta a la pregunta que permitía superar la prueba.

La tercera prueba se complicaba un poco. Se capturó el tráfico generado por un nmap y se solicitaba los argumentos con los que había sido lanzado.

De la siguiente captura de wireshark del archivo pcap se pueden obtener casi todos los datos:


--source-mac fa:ba:da:fa:ba:da: fue de las más difíciles de detectar, ya que no todo el mundo vio que claramente no era una MAC real.
172.16.1.1: la dirección IP de destino, argumento obligatorio en Nmap!!
--ttl 100: time to live establecido a 100.
-g53: puerto de origen, para obtener este dato había que ver varios paquetes y observar que en todos ellos el puerto de origen siempre era el 53.
--sN: sin flags de ningún tipo, escaneo denominado "Null"
-p100-9453: para conocer los puertos de destino, la forma más sencilla era ordenar por puerto de destino y observar el primero y último. Por suerte no decidimos eliminar ninguno de por medio!!
La cuarta y última prueba era un poco más difícil, aunque nada que se haya resistido a los geniales hackers de la campus que la resolvieron en unas cuantas horas. En esta ocasión se facilitaba el tráfico de una autenticación de RADIUS y se solicitaba la SharedKey. Para pasar la prueba es necesario entender la negociación CHAP/EAP, como se genera el MD5 y realizar un ataque de fuerza bruta mediante el desarrollo de alguna utilidad, ya que no existe ninguna. Podéis consultar el RFC3748 y el RFC1994 para obtener más información. En esta prueba se utilizó una herramienta desarrollada por Pablo Ruiz (Pci) que ya ha colaborado con nosotros, para generar el MD5 que aparecía en la captura.

¡¡Enhorabuena a todos aquellos que superaron todas las pruebas!!

Leer más...