HackTheBox. Прохождение OpenAdmin. RCE в OpenNetAdmin и GTFOBins в nano

в 8:56, , рубрики: ctf, HTB, pentest, ralf_rt, red team, red teaming, информационная безопасность
image

Продолжаю публикацию решений отправленных на дорешивание машин с площадки HackTheBox.

В данной статье мы проэксплкатируем RCE в OpenNetAdmin, покопаемся в конфигах веб сервера, прокинем порт с помощью SSH Forwarding, крякнем пароль к ключу SSH и используем технику GTFOBins для повышения привилегий.

Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ :)

Организационная информация

Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.

Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.

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

image

Теперь для получения более подробной информации о сервисах, которые работают на портах, запустим сканирование с опцией -А.

nmap openadmin.htb -p22,80

image

Таким образом на сервисе работает SSH и Web-сервер Apache. Глянем, что расположено на сайте.

image

Встречаем главную страницу 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

image

В выводе слишком много ответ с кодом 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”

image

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

image

image

image

И всего на одном из этих сайтов, есть функция авторизации (Login). Но стоит попробовать это сделать, мы переходим на страницу OpenNetAdmin.

image

При этом, как можно заметить, используется версия 18.1.1.

Entry Point

Поищем эксплоиты для данной версии.

image

И для данной версии есть RCE эксплоит. Код уже есть в локальной базе, давайте взглянем.

image

Таким образом скрипт принимает один параметр — это URL. (При запуске у меня были ошибки, поэтому можно открыть файл через mcedit и по убирать ^M символы).

image

USER1

Мы находимся в домашней директории.

image

И нас окружает большое количество файлов.

image

Какой-нибудь из них может содержать учетные данные. Давайте поищем во всех файлах рекурсивно имена пользователей.

image

И нет никаких результатов. Но будет много результатов при поиске слова “pass”.

image

Теперь глянем весь конфиг.

image

Это пароль для подключения к базе данных. Давайте попробуем его для пользователей. И мы успешно логинимся под пользователем jimmy.

image

USER2

Первым делом запускаем скрипт базового перечисления LinEnum.

image

Вывод нужно анализировать очень внимательно, каждую строчку!!! И единственное, за что можно зацепиться в выводе скрипта — это членство в группах.

image

Jimmy и Joanna состоят в одной группе internal. Посмотрим файлы, принадлежащие данной группе.

image

Судя по расположению — это сайт. Анализируем файлы. Первым смотрим main.

image

Если мы авторизованы, нам покажут закрытый SSH ключ пользователя joanna. Из index файла следует, что мы перейдем в main после успешной авторизации. Так же содержится SHA512 хеш от пароля.

image

Хеш легко ломается с помощью этого сайта.

image

Осталось узнать, как попасть на сайт. Порты, по которым обращаться на каждый из сайтов можно найти в соответствующем файле конфигурации каждого сайта в директории /etc/apache2/sites-available для apache.

image

Как можно видеть там есть интересующий нас internal.conf. Теперь пробросим SSH порт.

image

Из конфига понятно, что мы можем обратиться к сайту из локальной машины на 52846 порт по домену internal.openadmin.htb. Давайте прокинем порт — то есть сделаем так, чтобы наш локальный порт 52846 переадресовывался на удаленный 52846 порт. Данная техника называется SSH Port Forwarding.

image

Теперь на локальной машине внесем запись в файл /etc/hosts.
127.0.0.1 internal.openadmin.htb
И обратимся через браузер по адресу internal.openadmin.htb:52846/index.php.

image

Авторизуемся с известными учетными данными и получаем закрытый SSH ключ.

image

Сохраняем в файл и назначаем права.

image

Но при попытке подключиться, у нас спрашивают пароль для ключа, ведь он зашифрован.

image

Мы можем пробрутить ключ. Для этого приведем его к формату John’a, а потом отдадим на брут файл с уже преобразованным к формату ключом.

image

И успешно находим пароль. Подключаемся уже с ключом и паролем.

image

ROOT

Одна из вещей которую стоит проверять это настройки sudo для выполнения команд без пароля.

image

Строка NOPASSWD говорит о том, что мы можем выполнить данную команду под sudo без пароля. В данном случае вызывает команда nano. Есть такая техника как GTFOBins, которая позволяет с помощью разных утилит читать, писать файлы или выполнять целые команды. Полный список утилит и их возможностей можно глянуть тут. Давайте глянем как получить шелл с помощью nano.

image

Выполним нашу команду с sudo.

image

Теперь, следуя порядку команд, выбираем опцию чтения файла.

image

Теперь опцию выполнения команд.

image

И вводим последнюю строку из инструкции.

image

И получаем шелл от имени рута.

image

Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.

Автор: Ральф Фаилов

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js