Investigation Hack The Box WriteUp by artrone
Всех приветствую! Сегодня у нас муторная, на мой взгляд, тачка.
Сразу хотелось бы отметить, что статья будет длинной, ведь содержит мои личные рассуждения и ошибки. Я очень надеюсь, что данный формат покажется вам познавательней и интересней. А если нет, то напишите об этом в комментариях.
Разведка
Начинаем мы, как и всегда, с разведки:
Тут ничего подозрительного нет, поэтому идем дальше.
Мы люди простые: видим доменное имя - вносим изменения в /etc/hosts:
Переходим на сайт и, прошерстив его, обнаруживаем страницу загрузки файла.
Минутка моих рассуждений:
Изучив запрос в BurpSuite, я изначально подумал, что можно обойти запрещенные расширения ( доступны только jpeg и png). Поэкспериментировав, я сделал вывод, что по сути то фильтру плевать на само расширение, ведь его волнует само тело файла. Тогда через exiftool я добавил комментарий к картинке и отправил такой тестовый запрос:
Как мы видим, все прошло успешно. НО! Поскольку у нас нет страницы вызова файла по типу: http://target.htb/uploads/file.php, то мы никак не сможем "приказать" серверу обработать наш запрос.
Как мы знаем, мелочи в деталях. Нам стоит обратить внимание на первую строку этого документа и увидеть версию exiftool'a- 12.37. Погуглив, находим информацию о CVE-2022-23935:
В чем суть? Если мы изменим имя файла на "example |", то сервер обработает это, как команду. Да, если добавить " |" в конце название файла, то это будет являться уязвимостью в нашем случае.
Точка входа
Отлично, теперь мы знаем слабость системы. Давайте создадим простенькую полезную нагрузку и проверим ее работоспособность:
Что мы сделали? Мы изменили название картинки на "ping 10.10.x.x |" и загрузили, как файл. Дальше мы перехватываем icmp пакеты, проверив соединение. Если всё получилось, то идем дальше.
Следующим шагом создаем полноценный запрос aka reverse shell:
1. Создаем стандартный reverse shell
3. Переименовываем файл нужным нам образом
Примечание по синтаксису: echo "code"|base 64 -d позволяет нам расшифровать наш реверс шелл, а bash в конце выполнить команду. Зашифровывалось все для того, чтобы обойти такие символы, как $ /, поскольку они запрещены.
Получение user флага
Если все сделали успешно, то увидите следующую картину:
Мы зашли, как www-data. Уже есть успех!
Пошерстив немного, находим каталог investigation с интересным .msg файлом. Использовав cat, я понял, что это электронное письмо, поскольку используется протокол SMTP:
Поскольку мы его не так не прочитаем, то нам нужно открыть его в какой-то программе, предварительно скачав:
Тут есть оговорка:
Если вы также, как и я использовали команду python3 -m http.server 8080 на уязвимой машине и у вас ничего не получилось, то знайте, что при использовании netcat, wget может работать некорректно или не работать вовсе.
Поэтому скачивать будем через netcat:
После успешного скачивания файла, нам нужно его просмотреть. Тут вы можете юзать софт или онлайн инструмент.
Ссылка на софт: https://support.mozilla.org/ru/kb/ustanovka-thunderbird-na-linux
Ссылка на онлайн инструмент: https://www.encryptomatic.com/viewer/
Видим адресатов и zip-файл, который мы успешно распакуем и просмотрим содержимое с помощью прекрасной проги evtx_dump.
Ссылка на evtx_dump: https://github.com/williballenthin/python-evtx/blob/master/scripts/evtx_dump.py
Сначала я решил выполнить поиск по фамилии адресата и нашел логин учетки.
Дальше, покопавшись, находим и пароль:
Дальше находим наш флаг и радуемся)
Эскалация привилегий
Давайте посмотрим наши разрешения с помощью sudo -l
Как мы видим, мы можем от имени рута запустить какой-то бинарный файл.
Так как ничего полезного через cat binary мы не увидим, предлагаю изучить его в соответствующей программе, предварительно скачав:
Для своих целей я буду использовать Ghidra.
Установка: sudo apt install -y ghidra
Нас интересует main, поэтому давайте его просмотрим:
1. Сравнение количества аргументов с 3, иначе выход.
2. Проверка на рута. Если вы не рут- выход.
3. Проверка на сходство со строкой "lDnxUysaQn", иначе выход.
4. При выполнении условий, открывается файл, соединение через curl и происходит запись. Далее все закрывается (соединение и файл).
5. Форматируется строка «perl ./%s»
6. Запуск команды для запуска команд через оболочку.
7. Удаление "lDnxUysaQn" и выход.
После примерного понимания работы кода, давайте создадим perl скрипт и загрузим его на тачку:
Тут стоит обратить внимание на то, что права нам не позволяют свободно загрузить файл, поэтому загружаем его через "разрешенные действия".
Наш ТГ канал: https://t.me/hackerblog