
Простая машина от 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