
Enfoque de principiante para el hacking de firmware
Este documento es mi experiencia personal como novato en la reversión y explotación de firmware.

Para la demostración, analizaremos y reproduciremos CVE-2023-27216.
Para explotar cualquier firmware, se deben seguir los siguientes pasos:
gdbserver de forma estática para depurar.Por lo general, un archivo binario de firmware contiene un bootloader (uBoot), un archivo de kernel, un encabezado de kernel para el bootloader (uImage), un sistema de archivos comprimido (generalmente en formato SquashFS), una tabla CRC/MD5 (para verificar la integridad del archivo) y otros archivos varios.
Busca una forma de analizar el firmware primero, investiga un poco, obtuve algunos recursos:

Extraer firmware usando binwalk: binwalk -Me DSL-3782_A1_EU_1.01_07282016.bin

Obtuve la carpeta squashfs-root extraída y algunos archivos extraños.

Bonificación: Si no ves la carpeta squashfs-root, usa unsquashfs en cualquier archivo ".squashfs" que veas. Son como archivos zip 😅.
Verifica la arquitectura y el endianness del firmware. Esto se puede comprobar examinando algunos binarios extraídos del firmware. Verifica la arquitectura y el firmware: file <binary>

Aquí podemos confirmar casi con certeza que el firmware se ejecuta en arquitectura MIPS de 32 bits MSB. La razón de "casi" es que algunos firmwares pueden ejecutarse en una arquitectura diferente con MIPS Compatible, como Lexra.
Revisa la carpeta squashfs-root y encontré algunos archivos interesantes:
usr/etc/init.d/rcS => Este es el script que se ejecuta cuando el firmware arrancausr/etc/passwd => Este es el archivo que contiene la información del usuariouserfs/romfile.cfg => Hay una credencial admin:adminRevisa el archivo rcS y encontré un código interesante:
echo "admin:$1$$iC.dUsGpxNNJGeOm1dFio/:0:0:root:/:/bin/sh" > /usr/etc/passwd
passwdBoa es un servidor web antiguo, utilizado principalmente en dispositivos embebidos como routers en los años 2000. Sin embargo, el servidor Boa detuvo su desarrollo en 2005. Aunque el servidor Boa está muerto desde hace casi 20 años, aún vive hoy en día gracias a nuestros fabricantes.

Recomiendo usar un sistema operativo basado en Debian para el proceso de emulación, como Ubuntu o Kali. Existe otro sistema operativo centrado en la manipulación de firmware llamado AttifyOS. En este documento, utilicé Kali Linux. Comienza con el proceso de estimulación, hay 2 herramientas:

Veamos cómo usar FAT para emular completamente un firmware. Primero, clonamos el repositorio desde github a tu máquina Kali. Y pasamos por el proceso de configuración. También necesitas modificar el archivo fat.config, de lo contrario no funcionará.
git clone https://github.com/attify/firmware-analysis-toolkit.git
cd firmware-analysis-toolkit
./setup.sh
vi fat.config # Modificar a tu contraseña de sudo.
Luego copiamos el binario del firmware (el que descargamos del fabricante) a la carpeta de FAT en nuestra máquina Kali y lo ejecutamos.
./fat.py DSL-3782_A1_EU_1.01_07282016.bin
Nota: Durante el proceso de configuración de FAT, podemos encontrar errores. Puede decir que falta libmagic.

Simplemente ejecuta
pip unistall python-magic
pip install python-magic
Esto debería solucionar el problema, luego ejecutamos el comando de construcción nuevamente. Ahora debería funcionar perfectamente.

Presiona Enter para ejecutar. El proceso de emulación debería funcionar correctamente, puedes navegar a http://192.168.1.1 (en la máquina Kali) para verificar si funciona o no.

También puedes iniciar sesión en la consola si tienes las credenciales. Aquí está admin:admin.

Si decides apagar el firmware emulado, solo presiona Ctrl+A X. Cuando necesites ejecutarlo de nuevo, no vuelvas a ejecutar fat.py porque el firmware ya se ha compilado en una imagen. Solo necesitas ejecutar el script que ya se ha generado.
cd firmadyne/scratch/<Image-ID>
./run.sh

Compila gdbserver para fines de depuración. Hay muchas formas de compilar gdbserver. También puedes descargar un servidor compilado estáticamente. Hay un repositorio que almacena algunos compilados estáticamente. Sin embargo, prefiero compilar gdbserver yo mismo, ya que los del repositorio de github son bastante antiguos y pueden tener problemas de compatibilidad.