• XSS.stack #1 – первый литературный журнал от юзеров форума

CrackMe Решение Reverse задания с CyBRICS CTF Quals 2019 (writeup)

pablo

(L2) cache
Пользователь
Регистрация
01.02.2019
Сообщения
433
Реакции
1 524
Решение задания "Hidden Flag" с CyBRICS CTF Quals 2019

На прошлых выходных проходил CyBRICS CTF Quals 2019. Задания всё ещё доступны - https://cybrics.net/tasks/ Ссылка на событие - https://ctftime.org/event/836
Задание было на Reverse (обратную разработку) и было отмечено организаторами как сложное (категория Hard была самой сложной по задумке).

3e4d8f2404202e9e7b356.png


По условию задания нам нужно найти спрятанные флаг в дампе памяти. Дан торрент-файл. Скачиваем его и получаем архив.
499954eab0f460c900c57.png


Распакуем архив и получи 2 Гб дамп памяти.
ffe9465cf8ee999b65630.png


Отлично, начинается фаза исследования дампа.

Этап 1 - Исследование дампа (форензика).
По сути этот этап представляет из себя стнадратный набор действий при компьютерной криминалистики.
Нам надо определить следующее:
  • версию ОС, с которой был снят дамп
  • Запущенные процессы
  • Активные подключения
  • Историю браузера
  • Получить список доступных файлов
  • Сдампить интересные ключи реестра
  • Получить список драйверов
Все эти действия выполняются с помощью volatility framework, про который уже не раз упоминалось на канале в похожих постах.
Для начала определим версию ОС.
команда: volatility imageinfo -f 20190717.mem
bafa8ecd3a913ecd60c49.png


Windows 10. Это не очень хорошо, потому что не все функции volatility работают для 10-ки корректно (если вообще работают). При этом в начале нужно было "поиграться" с профилем, т.к. при установке первого профиля (Win2016x64_14393) дампы были не совсем корректными. В итоге рекомендуемый профиль - Win10x64_16299.

Далее пробуем дампить процессы, историю браузера (не вышло), файлы, сетевые подключения и всё остальное. В дампах ищем что-то за что можем зацепиться, ведь прямой задачи у нас нет, нам просто надо найти флаг спрятанный в памяти.
К сожалению ничего интересного в процессах, подключениях найдено не было. В автозапуске тоже не было ничего подозрительного. Директория пользователя (в дампе filescan) не содержала ничего интересного. На всё это исследование ушло около 2 часов и таск уже начинал казаться не особо решаемым.

Однако, после очередного просмотра сдампленных данных в дампе драйверов был обнаружен странный драйвер "FlagStor".
команда: volatility modules --profile Win10x64_16299 -f 20190717.mem
a0679435a973f389da203.png


При этом он явно был не системный, т.к. путь к нему содержал папку "t4est", которая со 100% вероятностью не была создана системой.
Отлично, мы нашли за что зацепиться, теперь нужно сдампить этот драйвер. Для этого можно использовать функцию дампа всех драйверов "moddump".
команда: volatility moddump -d drivers/ --profile Win10x64_16299 -f 20190717.mem
cfc155622cd14e17f3a24.png

Вывод команды у вас будет отличаться, т.к. в данному случае команда уже была запущена ранее и в кеше сохранилась информация о сдампленных драйверах.
Копируем необходимый нам драйвер (просто найдём его по адресу, который был получен при дампе модулей). И теперь начинается второй этап, а именно исследование драйвера.

Этап 2 - Исследование драйвера (ревёрс).
Откроем драйвер в IDA и удивимся небольшому количеству функций.
edb1cc3c3101a9c3c440f.png


Имена функций были даны в ходе анализа, при первой загрузке имён не будет, т.к. символьной информации у нас нет (хотя где-то лежала PDB, но при таком количестве функций - нет смысла возиться с её получением).
Почти сразу можно найти функцию загрузки драйвера.
5ab6d05218a19aa2a5775.png


Перед выводом на экран сообщения о загрузке, она вызывает ещё одну функцию. Посмотрим, что эта за функция.
8479196b6c87e34d36596.png


Данная функция вызывает ещё одну с некоторыми аргументами, первый аргумент вполне читаемая строка, а второй и третий равны между собой и являются указателями на некоторые данные в секции данных.
66de33ac610e2c7728e32.png


Можно предположить, что это какое-то шифрование по ключу.
6c48b97d414ceb630de0b.png


Функция вызывает ещё 2 функции. Первая работает только с ключом и генерирует "расширенный ключ", а вторая производит шифрование.
7843234433fe13b2f7cf3.png


Немного взглянув на алгоритм "расширения ключа" можно понять, что он очень похож на RC4. А функция шифрования подтверждает наши догадки.
884a6d60de5116aac6859.png


Даже если мы ошиблись, попробовать взять готовую реализацию RC4 и подставить туда наши данные - дело 5 минут.
Найдём готовый RC4 скрипт на Python - https://raw.githubusercontent.com/bozhu/RC4-Python/master/rc4.py
И поменяем ключи и текст.
72ff04a752e0005c8ddda.png


Теперь просто запустим скрипт.
a63a6e7601630e784fa3e.png

В итоге получим флаг.


авторство - Telegram-канал "Убежище Хакера"
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх