htb
February 8, 2022

HTB | BountyHunter write-up

qq, В данной статье мы попробуем эксплуатировать уязвимость в обработке XML и Python eval, хотя зачем заранее спойлерить все самое интересное.

RESEARCH

Одна из первейших задач при исследовании любой сети это сократить (иногда довольно большой) набор возможных портов цели до списка активных или интересных. Для этой задачи хорошо подойдет nmap, который предоставляет большое разнообразие опций для различных методов сканирования.

Цель имеет IP адрес 10.10.10.144, следовательно нужно просканировать все доступные порты цели.

Увидев, что порт 80 открыт, попробуем сразу же открыть сайт http://10.10.11.100:80 и видим главную страницу BountyHunter.

Вместо ссылок везде заглушки и различные плейсхолдеры, да и в исходном коде страницы тоже ничего подозрительного не обнаружено. Значит нужно продолжить поиск.

ENUMERATION

Давайте попробуем перебрать все доступные директории, для это запустим gobuster с словарем /usr/share/wordlists/dirb/common.txt

Итак, gobuster нашел нам пару интересных директории, а именно:

  • /assets, /js и /css — При попытке открыть получаем ошибку 403-Forbidden Access
  • /resources — Список файлов, но находим в README очень интересное сообщение

Данная заметка даем нам понять что существует некий пользователь test. Запомним и вернемся обратно к сайту BountyHunter.

Entry Point

Потыкав еще немного сайт находим некий портал с формой для отправки отчета о найденной уязвимости.

При отправке данной формы формируется некая Base64 строка

Копируем строчку и пытаемся ее декодировать сначала с помощью URL-encode key characters декодера, а затем с помощью Base64. В итоге получаем XML

Может возникнуть вопрос — Что же делать с этим дальше? У нас открывается огромный выбор действий, но сперва попробуем определить какие данные данная ручка принимает и какие данные она может вернуть. Для этого мы изменяем XML и пытаемся заново его завернуть в Base64 и URL-encode.

Спустя несколько попыток мы понимаем что данный запрос возвращает часть указанных данных, то есть мы может провернуть некие действия и поучить xml в ответ который будет содержать результат — XXE Injection.

Самый простой способ реализовать XXE Injection это добавить в входные данные строчку

<!DOCTYPE replace [<!ENTITY file SYSTEM "file:///etc/passwd"> ]>

Которая добавит xml-переменную &file; в которой будет содержимое файла /etc/passwd. В результате получаем примерно такой XML.

Снова заворачиваем все в Base64 и URL-encode и отправляем запрос.

В ответ на наш запрос приходит список всех пользователей на сервере, уже что то. Как мы помним в системе остался некий тестовый пользователь (из файла README который нашли раньше), можно предположить что это development.

USER ACCESS

Потратив много времени на поиск и попытки подбора пароля development пользователя я вернулся обратно и продолжил исследование системы через найденную уязвимость в обработке XML`а. Добравшись до исходников портала я смог вытащить файл db.php с помощью данного XML.

Выполнив запрос получаем содержимое файла в формате Base64, естественно декодируем его. В результате получаем пароль от базы данных.

Поскольку на этапе разведки мы не обнаружили никаких открытых портов у баз данных продолжим, то попробуем тупо в лоб авторизоваться по ssh с найденным паролем.

Попробовав пользователей bounty, admin и д.р мы рано или позно приходим к комбинации development с паролем из db.php)

Та-дам! Мы внутри сервера, первым делом достаем первый флаг пользователя.

ROOT

— — TODO — —