CTF Прохождение HackTheBox - Investigation (Linux, Medium)

1683281058613.png

Приветствую, Кодебай! Сегодня пройдём машину средней сложности под названием Investigation. Основной упор будет сделан в форензику (логи Windows) и реверс. Приятного чтения :)

Разведка

Начинаем со сканирования портов:

1683372443537.png


Переходим на 80-ый порт:

1683372480412.png


Чтобы попасть на домен нам требуется отредактировать файл /etc/hosts:

1683373891596.png


Теперь мы можем получить доступ к сайту:

1683373918859.png


На нём нам предлагают загрузить картинку для криминалистического анализа:

1683374520924.png


Пробуем загрузить текстовый файл:

1683376064890.png


Вылетает ошибка, значит на веб-сайте есть какие-то фильтры:

1683376085046.png


На данном этапе я потратил некоторое количество времени, чтобы обойти эти фильтры, но всё оказалось безуспешно. Попробуем загрузить валидный файл:

1683376141119.png


И нам вываливается ссылка на отчёт по файлу, кликаем по ней:

1683376205941.png


Оказывается, что файлы обрабатываются exiftool'ом версии 12.37. Гуглим уязвимости/эксплойты:

1683376250667.png


Мы можем получить Command Injection, если будем эксплуатировать CVE-2022-23935. Возьмём какой-нибудь эксплоит (например, этот):

1683376345515.png


Тут есть полная инструкция по эксплуатации. Для начала установим pwntools:

1683376381704.png


И запустим сам эксплоит:

1683376397638.png


У меня возникли некоторые проблемы с подключением (плохая оболочка), поэтому я взял от эксплойта только сгенерированный файл, а сам шелл получил через netcat:

1683376464986.png


1683376472973.png


1683376482086.png


Взятие пользователя

Проверяем какие имеются пользователи с хоум каталогом в системе:

1683376522983.png


И качаем linpeas:

1683376696664.png


Даём ему права и запускаем:

1683376718695.png


В отчёте мы можем увидеть следующую строку:

1683376736868.png


К сожалению, тут нет ничего особенного, чтобы что-то сразу проэксплуатировать, но есть дополнительная информация - это путь /usr/local/investigation/.

1683383484847.png


Переходим в /usr/local/investigation и видим там .msg файл. Почитав мануалов, я пришёл к выводу, что данный файл нужно сконвертировать в evtx и прочитать с помощью "Просмотра событий" Windows.

Для начала поднимем python-сервер, чтобы скачать файл:

1683410369800.png


Качаем файл на свою машину:

1683410389597.png


После этого переходим на любой онлайн сервис, где можно сконвертировать .msg в .evtx:

1683410429562.png


1683410759468.png


Я лично использовал Windows для чтения evtx файла, но насколько мне известно, это как-то можно сделать и через Linux:

1683410801315.png


Запускаем "Просмотр событий" и нажимаем "Открыть сохраненный журнал...", где указываем путь до нашего evtx-файла:

1683410822679.png


После этого у нас открылись все логи из файла:

1683410864488.png


Сначала я попытался пересмотреть абсолютно всё, но логов оказалось слишком много, поэтому я начал думать над тем, как оптимизировать поиск.

На сайте Microsoft - , мы можем посмотреть коды событий связанные с авторизацией для логов:

1683419248018.png


Чтобы сделать поиск по событию требуется нажать на кнопку "Фильтр текущего журнала...":

1683463143580.png


И указать в нём код(ы):

1683463186927.png


В событии 4625 (Сбой входа) можно найти что-то похожее на пароль (т. е. пользователь ввёл пароль вместо юзернейма):

1683462788139.png


Попробуем использовать его в качестве пароля для пользователя smorton (о котором мы узнали ещё в самом начале):

1683463230554.png


Пользователя взяли. Теперь переходим к руту.

Взятие рута

Используем стандартную команду sudo -l после подключения за пользователя, чтобы узнать какие команды/инструменты мы можем использовать от лица суперпользователя:

1683463373706.png


Скорее всего сейчас будет реверс :)

Огромное спасибо @Mogen за помощь в части с реверсом!

Переходим в /usr/bin/ и поднимаем HTTP-сервер Python'а, чтобы скачать бинарник:

1683463421416.png


1683463430833.png


Открываем его в IDA и декомпилируем код:

1683629213098.png


1. Функция main принимает 3 параметра согласно прототипу функции: int main (int argc, char *argv[], char *envp[]). Для нас важныargc, argv.

2. Если количество аргументов из командной строки (argc) не равно 3, то завершаем программу. Это значит, что мы должны передать аргументы в таком виде: ./binary ARG_2 ARG_3

3. Если программа запущена не от лица суперпользователя, то тоже завершаем программу.

4. В качестве второго аргумента командной строки принимается строка lDnxUysaQn, если же мы укажем что-то другое, то программа завершится.

5. Создаётся/открывается файл с названием lDnxUysaQn с правами wb (write/binary), т. е. мы можем в него записать бинарные данные.

6. Настраивается curl для первой части аргумента (ссылки).

7. Запускается curl. Если запуск неудачен, то завершаем программу.

8. С помощью функции snprintf определяется длина строки, которая будет записана в command_ptr, указывающая на команду perl для выполнения файла, заданного в ptr.
Пример определения длины: data = snprintf(0LL, 0LL, "perl ./%s", ptr);.
Выделяется память для command_ptr. С помощью функции snprintf записывается указанная команда в command_ptr.

9. Запуск от лица суперпользователя содержимого command_ptr в функции system() и удаление файла с названием lDnxUysaQn.

Резюме: мы можем указать ссылку, а затем lDnxUysaQn. Содержимое ссылки запишется в файл и запустится через интерпретатор perl от лица суперпользователя.

В таком случае нам нужно скачать любой шелл на перле, например, от pentest monkey. И указать в нём свой IP и порт.:

1683464807560.png


Теперь опять поднимаем веб-сервер пайтона и ставим листенер, чтобы получить на него шелл:

1683464869563.png


Запускаем бинарник через sudo с указанием ссылки и строки lDnxUysaQn:

1683464899130.png


Получаем шелл от лица суперпользователя:

1683464932259.png


Друзья, спасибо большое, что нашли время прочитать мой райтап. Если есть какие-то ошибки, то напишите об этом в комментариях :)
 
Последнее редактирование модератором:

Lexi Lyon

New member
10.08.2024
3
0
BIT
10
У тебя есть телеграм?Я хочу купить у вас много веб шелла
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!