Crear un router vulnerable con el Esp32

Aprender el funcionamiento de la WiFi, descubrir las vulnerabilidades con el fin de explotarlas es vital para todos los que le interesa el pentesting y el wireless testing. En este caso utilizaremos el Esp32 como router. Nuestro objetivo es utilizar el esp32 como un router con el cual podemos utilizarlo como router victima para realizar ataques como brute forcing, pmkid attack, etc. O bien utilizarlo como medio, para crear un evil-twin o MITM.

¿Cuales son los requisitos para crear un Access Point?

Los requisitos son minimos, solo necesitaremos:

    - PC     : con linux como sistema operativo.
    - Esp32  : para usarlo como router vulnerable. 
    - Python : necesitaremos que el python este instalado previamente.

Una vez que tengas los requisitos, podemos empezar con la instalación.

La instalación de las herramientas y el firmware.

Para empezar, debemos instalar el firmware que se enccuentra en el repositorio con este comando:

┌─[root@parrot][~]
└──╼ #git clone https://github.com/martin-ger/esp32_nat_router.git 

Se necesitara tambien la herramienta esptool que nos va permitir flashear el firmware en el esp32, la descargaremos con el siguiente comando:

┌─[root@parrot][~]
└──╼ #pip install esptool 

¿Cómo flashear el firmware en el esp32?

Despues de instalar esptool y el firmware, tenemos que movernos al directorio donde se encuentra los binarios.

┌─[user@parrot][~]
└──╼ $cd esp32_nat_router/

Y una vez dentro del directorio, flashearemos los binarios que vienen ser el firmware, con el comando:

┌─[user@parrot][~/esp32_nat_router]
└──╼ $esptool.py --chip esp32 \
--before default_reset --after hard_reset write_flash \
-z --flash_mode dio --flash_freq 40m --flash_size detect \
0x1000 build/esp32/bootloader.bin \
0x8000 build/esp32/partitions.bin \
0x10000 build/esp32/firmware.bin

Si todo paso bien, normalmente nos dara esto como resultado:

┌─[user@parrot][~/esp32_nat_router]
└──╼ $esptool.py --chip esp32 \
--before default_reset --after hard_reset write_flash \
-z --flash_mode dio --flash_freq 40m --flash_size detect \
0x1000 build/esp32/bootloader.bin \
0x8000 build/esp32/partitions.bin \
0x10000 build/esp32/firmware.bin
esptool.py v4.5.1
Found 1 serial ports
Serial port /dev/ttyUSB0
Connecting....
Chip is ESP32-PICO-D4 (revision v1.0)
Features: WiFi, BT, Dual Core, 240MHz, Embedded Flash, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: d8:a0:1d:66:17:48
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash will be erased from 0x00001000 to 0x00006fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Flash will be erased from 0x00010000 to 0x000f6fff...
Compressed 22656 bytes to 14222...
Wrote 22656 bytes (14222 compressed) at 0x00001000 in 1.6 seconds (effective 113.6 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 117...
Wrote 3072 bytes (117 compressed) at 0x00008000 in 0.1 seconds (effective 407.6 kbit/s)...
Hash of data verified.
Compressed 942832 bytes to 601480...
Wrote 942832 bytes (601480 compressed) at 0x00010000 in 53.7 seconds (effective 140.3 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

Y bingo! Ahora tenemos el esp32 como router.

Para configurar el router tenemos que conectarnos al AP(Access Point) ESP32_NAT_Router y usando un navegador web, ir a la direccion ip: 192.168.4.1

Nos encontraremos con el portal para la configuracion del AP:

Primero introduzca los valores apropiados para la red WiFi de enlace ascendente, la “STA Settings”. Deje la contraseña en blanco para las redes abiertas. Haga clic en “Connect”. El ESP32 se reinicia y se conectará a su router WiFi.

Ahora puede volver a conectar y recargar la página y cambiar la “Soft AP Settings”. Haga clic en “Set” y de nuevo el ESP32 reinicia. Ahora está listo para reenviar el tráfico a través del Soft AP recién configurado. Tenga en cuenta que estos cambios también afectan a la interfaz de configuración, es decir, para realizar una configuración adicional, conéctese al ESP32 a través de una de las redes WiFi recién configuradas. También puede utilizar el ESP32.

Si quieres introducir un ‘+’ en la interfaz web tienes que usar la codificación hexagonal estilo HTTP como “Mine%2bYours”. Esto dará como resultado una cadena “Mine+Yours”. Con esta codificación hexagonal puede introducir cualquier valor de byte que desee, excepto 0 (por razones internas de C).

Si desea desactivar la interfaz web (p. ej., por razones de seguridad), vaya a la CLI e introduzca:

┌─[user@parrot][~/esp32_nat_router]
└──╼ nvs_namespace esp32_nat
┌─[user@parrot][~/esp32_nat_router]
└──╼ nvs_set lock str -v 1

Después de reiniciar, ya no se inicia ningún servidor web. Solo puede volver a activarlo con:

┌─[user@parrot][~/esp32_nat_router]
└──╼nvs_namespace esp32_nat
┌─[user@parrot][~/esp32_nat_router]
└──╼nvs_set lock str -v 0

Si cometió un error y ha perdido todo contacto con el ESP, todavía puede usar la consola serie para reconfigurarlo. Todos los parámetros de configuración se almacenan en NVS (non volatile storage), que no se borra con solo volver a flashear los binarios. Si quieres borrarlo, usa “esptool.py -p /dev/ttyUSB0 erase_flash”.