Facts — прохождение простой машины от HackTheBox

Facts — прохождение простой машины от HackTheBox

Простая машина от Hack The Box, на которой работает Camaleon CMS 2.9.0 под управлением nginx. В системе включена функция самостоятельной регистрации, а уязвимость, позволяющая повысить привилегии после аутентификации (CVE-2025-2304), дает возможность любому зарегистрированному пользователю получить права администратора CMS всего за один запрос.

В настройках хранилища медиафайлов в панели администратора можно обнаружить учетные данные для AWS S3. Перебор (перечисление) бакетов S3 позволяет найти внутренний бакет, содержащий закрытый SSH-ключ, защищенный парольной фразой, которую можно подобрать. В комментарии к ключу указано имя пользователя (trivia), что открывает доступ по SSH и позволяет получить пользовательский флаг. Повышение привилегий осуществляется за счет использования правила sudo, не требующего пароля, для утилиты /usr/bin/facter : флаг --custom-dir позволяет загружать произвольные скрипты Ruby с правами root, обеспечивая простой путь к получению SUID-оболочки bash и root-флага.

1. Recon (Разведка)

Смотрим исходный код и сканируем порты:

По стандарту 22 и 80 порт Видно, что на 80 порту есть некий сайт, который редиректит на домен facts.htb.

Добавляем его в /etc/hosts c ip адресом 10.10.15.138 в моем случае. Перейдя на сайт, видим что это сайт с картинкаим и фактами. Похоже на какую-то CMS, но из исходного кода пока непонятно, какая именно.

2. Фаззинг

Поскольку есть предположение, что это CMS, то должна быть админка.Приступаем к фаззингу. Наученный предыдущим опытом CTF, где я брал маленькие словари и ничего не находил, в этот раз я сразу беру большой словарь…

Да. Есть у нас много каталогов, но я пойду в админку…

Естественно ни имени ни пароля мы не знаем, однако мы можем создать новый аккаунт. После регистрации и входа в админ панель, мы наконец узнаем, что это Camaleon CMS версии 2.9.0.

Повышение привелегий до админа в CMS

Первое, что я сделал, это пошел в гугл искать уязвимости на эту версию. На гитхабе есть CVE позволяющая из обычного пользователя повысить привелегии до админа… CVE на гитхабе

Вот так одной командой становимся администратором на этом сайте и получаем практически полный контроль, над сайтом.

Вектора для получения флагов

Прокинуть реверс-шелл, я не смог и стал искать другие пути. В настройках сайта, я нашел такой пункт

Видно, что у нас есть облачное хранилище от амазона и креды от него. Нужно зайти в него и посмотреть, вдруг есть, что интересное. Для этих целей будем использовать утилиту AWS. Я этой утилитой ни разу не пользовался поэтому воспользовался гайдом на Медиуме

Здесь одни картинки и ничего интересного нет.Однако если воспользоваться командой:

То можно увидеть, что кроме randomfacts бакета есть еще и internal. И здесь есть приватный ключ ssh.

Имя пользователя неизвестно, а от рута, этот ключ не подходит, это было бы слишком просто. Много чего перепробовал из cms, но ничего не сработало.

К тому же на этом ключе есть парольная фраза:

Убираем парольную фразу и здесь находим имя пользователя:

Теперь мы в системе и можем прочитать юзерский флаг:

Повышаем привелегии до рута

По классике проверяем sudo -l.

И у нас есть утилита facter, которую можем выполнять без пароля.

Уязвимость здесь кроется в том, что в sudo -l не прописаны жесткие аргументы. Это значит, что мы можем запустить sudo /usr/bin/facter с любыми флагами.

У facter есть параметр --custom-dir, который заставляет его загружать пользовательские факты (скрипты на Ruby) из указанной директории. Так как facter будет запущен через sudo, любой наш Ruby-скрипт в этой папке выполнится с правами root.

Создадим временную директорию и напишем туда простейший Ruby-скрипт, который выдаст утилите /bin/bash права SUID.

Теперь запустим утилиту от имени суперпользователя и скормим ей нашу папку с вредоносным фактом:

Если скрипт отработал, у /bin/bash теперь есть бит SUID от рута. Запускай баш с сохранением привилегий (флаг -p):

Проверим командой id (должен быть euid=0(root))

Райтап подготовил @alfabuster

← Cybersecurity