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:
Publicar un comentario