January 24, 2023

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

2. Кодируем его в base64

3. Переименовываем файл нужным нам образом

4. Включаем netcat

5. Загружаем файл

Примечание по синтаксису: echo "code"|base 64 -d позволяет нам расшифровать наш реверс шелл, а bash в конце выполнить команду. Зашифровывалось все для того, чтобы обойти такие символы, как $ /, поскольку они запрещены.

Получение user флага

Если все сделали успешно, то увидите следующую картину:

Мы зашли, как www-data. Уже есть успех!

Пошерстив немного, находим каталог investigation с интересным .msg файлом. Использовав cat, я понял, что это электронное письмо, поскольку используется протокол SMTP:

Поскольку мы его не так не прочитаем, то нам нужно открыть его в какой-то программе, предварительно скачав:
Тут есть оговорка:

Если вы также, как и я использовали команду python3 -m http.server 8080 на уязвимой машине и у вас ничего не получилось, то знайте, что при использовании netcat, wget может работать некорректно или не работать вовсе.
Поэтому скачивать будем через netcat:

Шаблон скачивания файлов через 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

Сначала я решил выполнить поиск по фамилии адресата и нашел логин учетки.

Дальше, покопавшись, находим и пароль:

Отлично, погнали в ssh:

Дальше находим наш флаг и радуемся)

Эскалация привилегий

Давайте посмотрим наши разрешения с помощью 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