Como han quitado el reto no me acuerdo muy bien de algunas pruebas pero algunas soluciones serían:
Nivel 1-A
Había que saltarse la siguiente expresión regular: ^\-(?=.*d)(?=.*[a-z])(?=.*[A-Z]).{6,}
Una posible solución es: -o=o o=oo o=oO66
Para resolverlo yo cogí y lo dividí en 3 apartados (en una copia en local) y fui saltando uno a uno los filtros:
(?=.*d) -> se pasa con o=0
(?=.*[a-z]) -> se pasa con o=00
(?=.*[A-Z]).{6,} -> se pasa con o=oO66
Esta es una posible solución, pero hay muchísimas.
Nivel 1-B
Editando el fuente de la página vemos al final un comentario con un texto en base64: cDNwMXQwXzA=
Que en texto plano es: p3p1t0_0
Una web para convertir de base64 a ASCII es: http://home2.paulschou.net/tools/xlate/ aunque hay millones
Nivel 1-C
Yo la pasé con la siguiente inyección:
user: enise
pass: ‘ or ‘a’=’a
Nivel 2-A
Nos descargamos el ejecutable y con el PeID vemos que está empaquetado con UPX. Con el OllyDbg quitamos la protección de UPX usando el método de pushad / popad o cualquier otro método, ya que es una protección muy frágil y se puede saltar de muchas formas.
Una vez llegamos al OEP, buscamos en memoria la palabra INCORRECT y al lado está nuestra contraseña: Este3sTuP4$$!
Nivel 2-B
Este no lo pasé pero parece que habían dos carpetas ocultas: bin y log
Nivel 2-C
Yo la pasé con la siguiente inyección:
pass: ‘ or ‘a’=’a’#
Nivel 3-A
Yo la pasé con la siguiente inyección:
user: ‘ or 1=1 or ‘a’=’a
pass: xx
Nivel 3-B
Aquí había que programar. Si probamos todas las combinaciones por fuerza bruta no terminamos nunca así que acotamos aplicando ingeniería inversa, es decir:
^ es un XOR
<<< 8 desplaza 8 bits a la derecha y rellena con ceros a la izquierda
<<< 4 desplaza 4 bits a la derecha y rellena con ceros a la izquierda
Por tanto,
– nuestro valor final debe ser 436 (en hex = 1B4 y en binario = 110110100).
– al meter 4 bits (1 byte) a la derecha, como desconocemos el valor, tendríamos 16 combinaciones, de 0000 a 1111 en binario. Por tanto el resultado oscila entre 6976 y 6991.
– luego multiplicamos por 3 (siempre lo inverso que el javascript original) y por tant0 las combinaciones se disparan, ya que tenemos que multiplicar cada combinación anterior por 3.
– es decir, iria desde 6976*3 (20928) a 6991*3 (20973).
– después, al meter 8 bits (2 bytes) añadimos de 00 a FF, es decir, 256 combinaciones más.
– valor mínimo: 20928 = 51C0 (en hex) … por tanto 51C000 = 5357568 XOR 77886655 = 83211455.
– valor máximo: 20973 = 51ED (en hex) … por anto, 51EDFF = 5369343 XOR 77886655 = 83204416.
– el valor final está entre 83204416 y 83211455 = 7039 combinaciones posibles.
– dentro de estos valores probamos la contraseña si el resultado es 0.
El script (en perl) que use es este:
#!/usr/bin/perl use LWP::UserAgent; my $p = 83204416; my $res = 0; while(1) { $res = $p ^ 77886655; $res = $res >> 8; $res = $res / 3; $res = $res >> 4; $res = $res ^ 436; enviar($p) if ($res eq 0); $p++; } sub enviar { my $dato = shift; my $cookie = "PHPSESSID=AQUI_MI_COOKIE"; my $uri = "http://wargame.inteco.es/level3b.php"; my $ua = LWP::UserAgent->new(); $ua->agent("Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008072820 Firefox/3.0.1"); @header = ('User-Agent' => $useragent, 'Cookie' => $cookie, 'Connection' => 'keep-alive', 'Keep-Alive' => '300', Content => [ password => $dato ]); my $response = $ua->post($uri, @header); }
Nivel 3-C
Este era un fichero Flash. Editando el fuente de la web vemos el fichero SWF. Lo descargamos y con una versión de pruebas de Shothink SWF lo abrimos y echamos un ojo al fuente.
Hay un user/pass para despistar pero al final tenemos un hash con nuestra clave. No pa recuerdo ahora mismo pero era algo así como palillos o alguna palabreja similar.
jajajaja el 3C era botella no palillos :P. Yo para las inyecciones tiré con:
1’or’1’=’1
1’or’1
‘or»=’
Al final el de idea feliz no conseguí sacarlo, ni reparé en hacer un escaneo por si encontraba alguna carpeta oculta, y sobre el de fuerza bruta, lo mismo, ya de paso aprendo cómo enviar respuestas por post manteniendo al cookie en python, que yo tiraba de java y php.
Eso sí, el reto podría estar mejor preparado que vaya telita, si quieres quitarte el mal sabor de boca, aquí tienes el CTF de FluxFingers http://hacklu.fluxfingers.net/challenges.php
Gracias por compartir las respuestas y un saludo!
Hola 0xroot 🙂
Yo sabía que tenía doble ‘l’ jajaja pero es quee no la anoté y así de cabeza …
El reto de fluxfinger ya terminó .. me dio tiempo a hacer 1 y cuando fui a meter la solución de otro … ya no estaba abierto 🙁
anda pues fluxfingers vuelve a estar abierto 🙂
Ami sinceramente el 3-B me parecía un tanto desorbitado, su valor deran 5 puntos y la puntuación mínima para el premio eran 16 con lo cual habia que hacerlo si o si si querias recibirlo. Por lo que veo no todos usamos las mismas inyecciones, el reto era mas abierto de lo que pensaba. Pf, y no conseguí sacar el maldito 1-C con lo simple que era..
Tiene fecha límite el de fluxfingers? Os veré por ahi? 😛
el fluxfingers ya terminó y ya hay 3 ganadores. Creo que lo han vuelto a abrir para que los menos listos podamos seguir jugando un rato 🙂
Venga pepelux!! otro reto destripao 🙂
Gracias!
jeje. Esto fue algo muy light. Los de fluxfingers sí que son para dejarte los sesos pensando xDD
Muchas Gracias!!
Yo el nivel 1a lo hice asi:
«-1levIN»
En el segundo igual que lo cuentas
El de ingenieria inversa, sin quitar proteccion ni nada. Depurando con el olly ejecutas, le das al boton para comprobar contraseña, y cuando salta la ventanita, vuelves al olly, das unos pasos atras, y buscas las cadenas de texto, las cuales estaran desencriptadas mientras este la ventanita de «incorrecto» abierta.
en el 1c juro por dios que puse ‘ or ‘1’=’1
A partir de ahora metere en las pruebas tanto numeros como letras, el caso es el user, ahi si era mas complicado acertar que fuera «enise»
Muchas Gracias!!!
@Peludito: ‘ or ‘1’=’1 es lo mismo que usar letras. Al meterlo entre comillas le dices que es un string y no un número.
El problema quizás era intuir el usuario. La verdad es que el 1c lo saqué tras varios 2x y 3x.
Viendo que algunos de estos no eran complicados y que el 1c sólo valía 1 punto, pensé que debía ser muy facilón y como en estos ya use inyecciones básicas … pues me vino a la cabeza el usuario admin y el usuario enise
Vaya retos que hacen los de inteco…!xD
Saludos Jose 😉