miércoles, 22 de octubre de 2014

Ganadores del Pre-CTF de la ekoparty 10!

Este es un reporte de resultados del prectf de la ekoparty, cuyo premio consistía en una entrada VIP para la conferencia.  El juego se abrió el 4 de octubre al medio día (hora colombiana) y se cerró el 19 de octubre a medianoche (hora Argentina). Dado que no incluyó registro previo, la mejor estimación del número de jugadores es el número de direcciones IP únicas en los registros del servidor, y que sugiere un número cercano a los 1350 jugadores.



El prectf incluía 5 niveles:

En el primero, una cookie muy volátil incluía un nombre de archivo (igual de volátil) codificado. Simplemente debían descargarlo, lo importante era la velocidad. 

El segundo nivel consistía en un web-service vulnerable a inyección de comandos y un primitivo WAF que intentaba protegerlo. Además del WAF el web-service incluía su propio filtro, que procesaba las salidas de la consola, y aunque los jugadores no lo sabían, se emularon también actualizaciones del WAF, por lo que algunas soluciones dejaron de ser explotables después de algunos días (aunque, el nivel siguió siendo explotable de muchas formas distintas).

El tercer nivel era un poco inusual pues era una autenticación basada en arrays, sin embargo, el nivel incluía algunos leaks que resultaban de ayuda (por ejemplo, el archivo trys.txt).

El nivel cuatro era un XSS, y esperábamos que explotaran un vector específico para obtener una flag, sin embargo decidimos aceptar como flag cualquier forma de explotación XSS. 

Finalmente, en el nivel cinco se les guiaba hacia un archivo pass.db que incluía las claves de los usuarios cifradas con RC4. Como todas las claves se cifraron con el mismo keystream, el problema correspondía a un multi-time pad. Curiosamente, las claves incluían muchos espacios, lo que las hace aun más simples de recuperar, pero al parecer, esto complico las cosas para los jugadores que no incluyeron el espacio en su conjunto de caracteres.

En cuanto a las soluciones recibidas, solo recibimos tres reportes con el juego completo y a continuación los comentaremos en orden de llegada.

El primer reporte nos llego desde Ucrania. Lo preparó el team dcua (Defcon Ukraine) y nos lo remitió Mykola Ilin. Este es un reporte conciso pero suficientemente claro, e incluye scripts para los niveles 1 y 5, así como las URLs para explotar los otros 3 niveles.  Además de ser el primero en llegar, este fue el único reporte que encontró la flag "real" del nivel 4 (por lea? ;) y el único que desarrolló su propio script (desde cero) para la solución del nivel 5, y como bono, incluía también un reporte de como explotar el nivel 2 para robarse el código fuente de todos los niveles!  Algo que estaba contemplado desde el inicio del juego. Sospechamos que el tener todas las fuentes influyó en que nos enviaran su reporte en menos de 24 horas de abierto el pre-ctf!

La  segunda solución la envió Felipe Andrés Manzano, el 15 de octubre, desde Argentina. El reporte incluía scripts en Python para todos los niveles (dos para el nivel 5), y un README con las salidas de los scripts. Nos divertimos mucho siguiendo su solución del nivel 5, pues al principio se ve tan compleja que llegamos a bromear diciendo que hasta podría incluir un troyano :), pero al seguir el script es fácil ver que usa un probador de teoremas (z3) para definir los requisitos de la solución y luego le deja hacer todo el trabajo.  Aunque esto puede verse un poco sobre-dimensionado para este nivel, es una aproximación extrapolable a otros escenarios y eso la hace muy interesante.

Finalmente la tercera solución nos la envió Emiliano del Castillo, también el 15 de octubre, y también desde Argentina. Técnicamente, llegó unos minutos antes que la de Felipe, pero el reporte era tan corto que solicitamos algunas adiciones para entender sus soluciones a los niveles 2 y 5.  Para el nivel 5, Emiliano presenta dos herramientas (cribdrag y cribstatic) y como una de ellas lo llevo a la solución.

Además, podemos hacer una mención especial a Ezequiel Escobar, Juan Lucas Armendares y Emiliano Fausto, a los que solo les falto resolver el nivel 5. 

Tanto Felipe Andrés Manzano como Emiliano del Castillo recibirán entradas VIP. Desde luego, Mykola también se la merece, pero está muy lejos como para aprovecharla :P.


Muchas gracias a todos los participantes de este PreCTF, nuestra intención siempre es pasar un rato agradable y los niveles se diseñan de una forma que permita ir construyendo conocimiento aunque empieces desde cero. Para todos los interesados durante la EkoParty #10 tendremos un CTF de 18 niveles que se tendrán que solucionar en 2 días, así que los esperamos allí!

Fernando Quintero, Rubén Molina, Giovanni Cruz Forero y Fernando Giraldo Montoya para ekoparty.






No hay comentarios: