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.




