HackTheBox. Прохождение OpenAdmin. RCE в OpenNetAdmin и GTFOBins в nano
Продолжаю публикацию решений отправленных на дорешивание машин с площадки HackTheBox.
В данной статье мы проэксплкатируем RCE в OpenNetAdmin, покопаемся в конфигах веб сервера, прокинем порт с помощью SSH Forwarding, крякнем пароль к ключу SSH и используем технику GTFOBins для повышения привилегий.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ :)
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Recon
Данная машина имеет IP адрес 10.10.10.171, который я добавляю в /etc/hosts.
10.10.10.171 openadmin.htb
Первым делом сканируем открытые порты. Так как сканировать все порты nmap«ом долго, то я сначала сделаю это с помощью masscan. Мы сканируем все TCP и UDP порты с интерфейса tun0 со скоростью 500 пакетов в секунду.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.171 --rate=500
Теперь для получения более подробной информации о сервисах, которые работают на портах, запустим сканирование с опцией -А.
nmap openadmin.htb -p22,80
Таким образом на сервисе работает SSH и Web-сервер Apache. Глянем, что расположено на сайте.
Встречаем главную страницу Apache. В таких случаях сайты могут быть расположены не в домашней директории сервиса. Чтобы их обнаружить, нужно перебрать директории. Для этого используем программу gobuster (якобы самый быстрый сканер). Выбираем режим сканирования директорий (dir), словарь (-w), количество потоков (-t), расширения для страниц (-x), также расширенный вывод страниц (-e) и URL (-u).
gobuster dir -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -t 120 -x php,html,conf,txt -e -u http://openadmin.htb
В выводе слишком много ответ с кодом 403, чтобы их фильтровать, укажем нужные нам коды ответа (-s).
gobuster dir -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -t 120 -x php,html,conf,txt -e -u http://openadmin.htb -s "200,204,301,302,307,401”
И находим несколько директорий. Теперь обойдем все, чтобы узнать, что там расположено.
И всего на одном из этих сайтов, есть функция авторизации (Login). Но стоит попробовать это сделать, мы переходим на страницу OpenNetAdmin.
При этом, как можно заметить, используется версия 18.1.1.
Entry Point
Поищем эксплоиты для данной версии.
И для данной версии есть RCE эксплоит. Код уже есть в локальной базе, давайте взглянем.
Таким образом скрипт принимает один параметр — это URL. (При запуске у меня были ошибки, поэтому можно открыть файл через mcedit и по убирать ^M символы).
USER1
Мы находимся в домашней директории.
И нас окружает большое количество файлов.
Какой-нибудь из них может содержать учетные данные. Давайте поищем во всех файлах рекурсивно имена пользователей.
И нет никаких результатов. Но будет много результатов при поиске слова «pass».
Теперь глянем весь конфиг.
Это пароль для подключения к базе данных. Давайте попробуем его для пользователей. И мы успешно логинимся под пользователем jimmy.
USER2
Первым делом запускаем скрипт базового перечисления LinEnum.
Вывод нужно анализировать очень внимательно, каждую строчку!!! И единственное, за что можно зацепиться в выводе скрипта — это членство в группах.
Jimmy и Joanna состоят в одной группе internal. Посмотрим файлы, принадлежащие данной группе.
Судя по расположению — это сайт. Анализируем файлы. Первым смотрим main.
Если мы авторизованы, нам покажут закрытый SSH ключ пользователя joanna. Из index файла следует, что мы перейдем в main после успешной авторизации. Так же содержится SHA512 хеш от пароля.
Хеш легко ломается с помощью этого сайта.
Осталось узнать, как попасть на сайт. Порты, по которым обращаться на каждый из сайтов можно найти в соответствующем файле конфигурации каждого сайта в директории /etc/apache2/sites-available для apache.
Как можно видеть там есть интересующий нас internal.conf. Теперь пробросим SSH порт.
Из конфига понятно, что мы можем обратиться к сайту из локальной машины на 52846 порт по домену internal.openadmin.htb. Давайте прокинем порт — то есть сделаем так, чтобы наш локальный порт 52846 переадресовывался на удаленный 52846 порт. Данная техника называется SSH Port Forwarding.
Теперь на локальной машине внесем запись в файл /etc/hosts.127.0.0.1 internal.openadmin.htb
И обратимся через браузер по адресу internal.openadmin.htb:52846/index.php.
Авторизуемся с известными учетными данными и получаем закрытый SSH ключ.
Сохраняем в файл и назначаем права.
Но при попытке подключиться, у нас спрашивают пароль для ключа, ведь он зашифрован.
Мы можем пробрутить ключ. Для этого приведем его к формату John«a, а потом отдадим на брут файл с уже преобразованным к формату ключом.
И успешно находим пароль. Подключаемся уже с ключом и паролем.
ROOT
Одна из вещей которую стоит проверять это настройки sudo для выполнения команд без пароля.
Строка NOPASSWD говорит о том, что мы можем выполнить данную команду под sudo без пароля. В данном случае вызывает команда nano. Есть такая техника как GTFOBins, которая позволяет с помощью разных утилит читать, писать файлы или выполнять целые команды. Полный список утилит и их возможностей можно глянуть тут. Давайте глянем как получить шелл с помощью nano.
Выполним нашу команду с sudo.
Теперь, следуя порядку команд, выбираем опцию чтения файла.
Теперь опцию выполнения команд.
И вводим последнюю строку из инструкции.
И получаем шелл от имени рута.
Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.