jueves, 22 de julio de 2010

smpCTF ( smpChallenges WriteUps )

Voy a escribir algunas soluciones a los retos del pasado CTF organizado por la gente de SMP.
Para mas información sobre el reto, por favor lee la entrada anterior.

[smpChallenge - 1]


En este nivel nos daban algunos datos y un procedimiento, con ayuda de astro pudimos encontrar una ecuación válida para el procedimiento y generar un pequeño script:

u@h:w$cat n.py
import sys

a=int(sys.argv[1])
r=int(sys.argv[2])
b=a+1
c=2*a+1
d=a*b*c
e=d/6
f=r*a
resp=e+f+1
print f
print resp
u@h:w$

Este script (el original creado en el momento de angustia :P) recibe dos valores como argumentos y genera el número de la secuencia que buscamos. En el código fuente de la página encontrábamos la información que el algoritmo cambiaba valores después de un tiempo, entonces la tarea era ejecutar algo rápido para que los valores funcionaran en ese rango de tiempo.

[smpChallenge - 2]


Donde esta waldo?, esa era la pregunta, una vez logueados en el sistema quedabamos directamente en el vim, y recordando un reto pasado en los prequals de defcon inmediata mente pudimos salir al shell ejecutando la sentencia en vi:

:set shell=/bin/bash
:!shell

Una vez en el sistema observamos todos los archivos posibles y tratamos de recuperar la integridad de unos archivos .swp que estaban generados en el home del usuario, pero finalmente ejecutamos el siguiente comando (un poco desesperados):

Buscamos todos los archivos donde se mencionara a waldo, luego seleccionamos los mas propensos a tener la bandera y finalmente lo encontramos.


[smpTrivial- 1]

Para resolver esta trivia es cuestión de analizar la salida del tcpdump e inmediata mente podemos analizar que se trata de DecNet (LOL).


[smpChallenge - 4]


Este fue el primer reto web, por lo que se asume que tiene un nivel de complejidad menor, pero nos quito un buen tiempo porque no probamos "las cosas de siempre".

Al cargar la página aparecía un formulario donde podíamos ingresar cualquier cosa y el nos devolvía el mismo nombre (un escenario para XSS, pero no permitia ningún tipo de explotación), pero si ingresábamos el nombre Administrator encontrábamos un letrero de DENEGADO, por lo que nos insinuaban que este nombre de usuario tenia algo que ver. Después de intentar cosas como Xss, SSI, Xpath, sql, pensar etc, decidimos hacer la misma petición pero usando el método POST, ya que siempre que hacíamos click en el botón del formulario enviaba los datos por GET.

Cuando lo hicimos por POST no paso nada, pero volvimos a intentar un par de veces y obtuvimos un resultado diferente.


Este texto era base64 y producía una imagen donde se encontraban las respuestas (la bandera y el ID). Después de chequear un poco el nivel nos dimos cuenta que el proceso era aleatorio, algunas consultas con método POST daban resultado y otras no, así que si alguien paso de largo y no probó varias veces el envió de datos, seguramente no pudo pasar el nivel.



[smpChallenge - 12]

El segundo nivel web era algo relacionado al parecer con cookies, sin embargo la pista nos decía que no se trataba de un ataque con las cookies del sistema.

Lo que hicimos en este nivel fue empezar a inyectar todas las posibles variables que se nos ocurrieran y descubrimos que existían las variables id, name, pass y otras que no me acuerdo, el asunto es que la que parecía mas vulnerable era la variable pass, pero al intentar un ataque que tuviera espacios nos denegaba el acceso. Como el objetivo era alcanzar una flag, asumimos que todo se encontraba en la base de datos, entonces intentamos una consulta anidada donde imprimiéramos el campo que nos interesaba, la inyección final quedó de la siguiente forma:



Al lado izquierdo se puede observar la respuesta correspondiente a la bandera para superar este nivel.


[smpChallenge - 13]

Este era el segundo reto forense que consistía en una descripción de un evento astronómico.
Lo primero que hicimos fue intentar buscar en Internet texto que correspondiera con el texto que aparecía en el reto y el resultado fue:

Lo que nos indicaba que los hechos ocurridos estaban relacionados con el choque de un cometa con Júpiter. Cuando consultamos con uno de los miembros del equipo SMP nos confirmó que la bandera era el titulo del articulo, pero aún nos faltaba el id del reto.

Aclaro que este wargame tenia algo diferente y era que para pasar un reto se tenían que tener 2 cosas, una era la bandera (una cadena de texto larga con una frase cualquiera) y el identificado del reto, casi siempre un código de 8 dígitos hexadecimales, por lo tanto el ejercicio era doble, a veces era sencillo encontrar el ID oculto en el código fuente de las páginas, pero a veces era mas complicado.

En este reto el ID no aparecía por ningún lado hasta que uno de los miembros del equipo dio con el resultado

El ID estaba oculto entre el texto que nos daban como pista para solucionar el reto, de que forma se sacó?, con una diferencia entre los textos originales y la pista se obtiene una única línea que no coincide, misteriosamente esa línea es muy elite ;)

Con estos dos datos pudimos pasar el reto.


Algunas otras soluciones se pueden encontrar en SinfoCol o ingresando "smpCTF writeups" en tu buscador favorito. ;)

Saludos y hasta la próxima.

Entradas populares