Приветствую,
Кодебай! Сегодня пройдём машину средней сложности под названием Investigation. Основной упор будет сделан в форензику (логи Windows) и реверс. Приятного чтения Разведка
Начинаем со сканирования портов:
Переходим на 80-ый порт:
Чтобы попасть на домен нам требуется отредактировать файл
/etc/hosts:Теперь мы можем получить доступ к сайту:
На нём нам предлагают загрузить картинку для криминалистического анализа:
Пробуем загрузить текстовый файл:
Вылетает ошибка, значит на веб-сайте есть какие-то фильтры:
На данном этапе я потратил некоторое количество времени, чтобы обойти эти фильтры, но всё оказалось безуспешно. Попробуем загрузить валидный файл:
И нам вываливается ссылка на отчёт по файлу, кликаем по ней:
Оказывается, что файлы обрабатываются
exiftool'ом версии 12.37. Гуглим уязвимости/эксплойты:Мы можем получить
Command Injection, если будем эксплуатировать CVE-2022-23935. Возьмём какой-нибудь эксплоит (например, этот):Тут есть полная инструкция по эксплуатации. Для начала установим
pwntools:И запустим сам эксплоит:
У меня возникли некоторые проблемы с подключением (плохая оболочка), поэтому я взял от эксплойта только сгенерированный файл, а сам шелл получил через
netcat:Взятие пользователя
Проверяем какие имеются пользователи с хоум каталогом в системе:
И качаем
linpeas:Даём ему права и запускаем:
В отчёте мы можем увидеть следующую строку:
К сожалению, тут нет ничего особенного, чтобы что-то сразу проэксплуатировать, но есть дополнительная информация - это путь
/usr/local/investigation/.Переходим в
/usr/local/investigation и видим там .msg файл. Почитав мануалов, я пришёл к выводу, что данный файл нужно сконвертировать в evtx и прочитать с помощью "Просмотра событий" Windows.Для начала поднимем
python-сервер, чтобы скачать файл:Качаем файл на свою машину:
После этого переходим на любой онлайн сервис, где можно сконвертировать
.msg в .evtx:Я лично использовал
Windows для чтения evtx файла, но насколько мне известно, это как-то можно сделать и через Linux:Запускаем
"Просмотр событий" и нажимаем "Открыть сохраненный журнал...", где указываем путь до нашего evtx-файла:После этого у нас открылись все логи из файла:
Сначала я попытался пересмотреть абсолютно всё, но логов оказалось слишком много, поэтому я начал думать над тем, как оптимизировать поиск.
На сайте
Microsoft -
Ссылка скрыта от гостей
, мы можем посмотреть коды событий связанные с авторизацией для логов:Чтобы сделать поиск по событию требуется нажать на кнопку
"Фильтр текущего журнала...":И указать в нём код(ы):
В событии
4625 (Сбой входа) можно найти что-то похожее на пароль (т. е. пользователь ввёл пароль вместо юзернейма):Попробуем использовать его в качестве пароля для пользователя
smorton (о котором мы узнали ещё в самом начале):Пользователя взяли. Теперь переходим к руту.
Взятие рута
Используем стандартную команду
sudo -l после подключения за пользователя, чтобы узнать какие команды/инструменты мы можем использовать от лица суперпользователя:Скорее всего сейчас будет реверс
Огромное спасибо @Mogen за помощь в части с реверсом!
Переходим в
/usr/bin/ и поднимаем HTTP-сервер Python'а, чтобы скачать бинарник:Открываем его в
IDA и декомпилируем код:1. Функция
main принимает 3 параметра согласно прототипу функции: int main (int argc, char *argv[], char *envp[]). Для нас важныargc, argv.2. Если количество аргументов из командной строки (
argc) не равно 3, то завершаем программу. Это значит, что мы должны передать аргументы в таком виде: ./binary ARG_2 ARG_33. Если программа запущена не от лица суперпользователя, то тоже завершаем программу.
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 и порт.:Теперь опять поднимаем веб-сервер пайтона и ставим листенер, чтобы получить на него шелл:
Запускаем бинарник через
sudo с указанием ссылки и строки lDnxUysaQn:Получаем шелл от лица суперпользователя:
Друзья, спасибо большое, что нашли время прочитать мой райтап. Если есть какие-то ошибки, то напишите об этом в комментариях
Последнее редактирование модератором: