Solucionario reto hacking enise

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.

10 comentarios

  1. 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!

  2. 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 🙁

  3. 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? 😛

  4. 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!!!

  5. @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

Deja un comentario