Приветствую,
Кодебай
! Сегодня пройдём машину средней сложности под названием 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_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
и порт.:Теперь опять поднимаем веб-сервер пайтона и ставим листенер, чтобы получить на него шелл:
Запускаем бинарник через
sudo
с указанием ссылки и строки lDnxUysaQn
:Получаем шелл от лица суперпользователя:
Друзья, спасибо большое, что нашли время прочитать мой райтап. Если есть какие-то ошибки, то напишите об этом в комментариях
Последнее редактирование модератором: