December 21, 2022

Soccer HTB WriteUp by artrone

Поиск точки входа

Приветствую вас, мои маленькие хакеры. На повестке дня тачка Soccer. Она имеет сложность "Easy", но для меня она была сложнее, чем обычно

Итак, начнем. Сканим наш айпи и видим такую картину:

Открыт ssh, http и еще какая-то шляпа. Залетаем на сайт, предварительно изменив /etc/hosts:

Сайт выглядит так:

Ничего интересного тут нет, поэтому давайте перечислим директории сайта.
Находим /tiny и переходим туда:

Увидели страницу авторизации сервиса Tiny File Manager. Гуглим что это и с чем это едят и находим креды, хах:

Вводим данные и видим такую картину:

Исследовав все, что тут есть, заходим в папку и загружаем полезную нагрузку:

Теперь переходим к этому файлу и запускаем его, предварительно запустив nc:

Ура, мы зашли! Предлагаю немного покопаться в файлах:

Ага, нашли поддомен soc-player.htb

Получение юзер флага

Повторяем процедуру с /etc/hosts и залетаем на сайт:

Переходим на страницу авторизации и регаем аккаунт:

Так, у нас есть форма проверки билетов. Давайте посмотрим как это работает:

Вот оно что! На порту 9091 у нас работает вебсокет. А что это значит?

WebSocket — протокол связи поверх TCP-соединения, предназначенный для обмена сообщениями между браузером и веб-сервером, используя постоянное соединение.

Для дальнейшего пути нам понадобится websocat. Скачать его можно по ссылке: тык

Я пробовал просканить сайт через ZAP и обнаружилась критическая уязвимость: SQL инъекция по поводу времени: case randomblob(100000000) when not null then 1 else 1 end

Она натолкнула меня на мысль использовать sqlmap, но из этого ничего не вышло. Тогда я понял, что можно использовать полезный скрипт из этой замечательной статьи: тык

Создаем py скрипт, скопипастив его со статьи и меняем 2 строчки:

*ws_server и data*

Далее запускаем его и залетаем в sqlmap:

Почему в запросе localhost, а не таргет айпи? Все просто. Поскольку Sqlmap поддерживает ws// (вебсокет), мы можем использовать это в личных целях.

Данный скрипт позволяет каждый раз открывать новое соединение для полезной нагрузки, а localhost (мы) используется в качестве промежуточного сервера.

Далее я просто кину скрины по копанию в бдшке. Тут ничего нового нет.

НО ВЫ ДОЛЖНЫ ЗНАТЬ, ЧТО ЭТО ОЧЕЕЕЕЕНЬ ДОЛГО

Кул, получили данные. Залетаем в ssh с этими данными и лутаем юзер флаг:

Получение рута

Давайте поищем двоичные файлы suid:

Ага, нашли файл doas. Кстати, я еще покапался и нашел файл с таким же именем в /local/etc:

При его открытии нам говорится, что мы можем запустить некий dstat от root'a:

Так, ага, понятно. Так как мы можем запустить dstat от root'a без ввода пароля, то мы можем делать записи в пути share/dstat:

Давайте воспользуемся этой фичей:

Что тут произошло? Создали py скрипт и записали его в dstat_root.py, запустили от рута, как плагин и всё)

Далее дело за малым- находите флаг и кайфуете от +20 points