Загрузка...

Crown Task Writeup (решение задания)

Тема в разделе Безопасность создана пользователем Infern0 2 ноя 2019. (поднята 2 ноя 2019) 424 просмотра

  1. Infern0
    Infern0 Автор темы 2 ноя 2019 Ебашу адовые биржи 54 22 фев 2018
    Почти неделю назад я выложил таск в формате CTF. Данный таск включал в себя много внутренних заданий и был неплохой тренировкой для тех, кто решил разбираться в инфобезе. Так как никто по сути не решил задание (хотя само решение занимало минут 20 чистого времени) я решил выложить решение. Так что начинаем разбираться.

    Легенда:
    Код
    Нам удалось перехватить беседу одного известного хакера, есть предположение, что была передана очень важная информация, не могли бы Вы нам помочь? Провайдер передал программу, которая лежала на сервере у хакера, думаю она Вам поможет.

    1. Для начала анализируем файл dump.cap. В нем находим два интересных потока. Первый IP:(192.168.100.4), судя потому что содержит ответы в открытом тексте, исходит от одного клиента (Gidro). Это нам не очень интересно, поэтом смотрим дальше.
    [IMG]
    Дальше находим еще один поток, который идет с другого IP (192.168.100.9). Тут идут ответы другого пользователя с ником crown. Также есть еще один интересный файл. Похожий на PDF, судя по сигнатуре. Сохраним эти потоки в два файла и приступим к анализу самой программы для общения.
    [IMG]

    2. Для анализа будет использоваться софт DnSpy, так как он лучше всего анализирует .NET Код (то, что это .NET понятно из подгружаемых библиотек и анализа через DiE). Файл имеет три пространства имен и 6 классов, начнем с SecretPtotocol.SDK.Structs. В этом пространстве имен есть два интересных класса, а именно ClientMessage и DataTransform. Просмотрев повнимательнее код, можно понять, что используется в качестве сериализации данных MessagePack.
    [IMG]

    [IMG]

    Отлично, мы знаем, как сериализуются пакеты, осталось разобраться в том, используется ли шифрование и как работает сам клиент с сервером. Для этого Посмотрим на классы в пространстве имен SecretProtocol.SDK. Класс ChatBase не имеет вообще ничего особенного, и просто хранит три публичные переменные и является родителем классов Client и Server. Класс Server лишь принимает новые подключения и занимается рассылкой сообщений всем пользователям, используя сериализацию.

    [IMG]

    [IMG]

    В классе Client есть лишь интересный метод Process, который занимается как раз приемом и передачей сообщений. Судя по этим классам, никакого шифрования нет. Однако остался класс Program.

    [IMG]

    Но и в классе Program нет никакого намека на шифрование, однако есть метод SendMessage, который показывает, как работает чат. Там есть команда /send_secret, которая позволяет отправлять файл, отлично, значит никакого шифрования нет и можно спокойно разбираться с бинарными файлами.

    [IMG]

    3. Для начала рассмотрим спецификацию самого сериализатора. Судя по информации на сайте, перед каждым типом стоит префикс, типа, а также, для строк и массивов используется длина. Что же, можно написать небольшую программу для тестирования библиотеки. Для этого создадим тестовый класс и сохраним его в бинарном виде.

    [IMG]

    Как можно заметить массив сериализуется в открытом виде, к тому же в начало добавляется длина. Выглядит это так

    [IMG]

    Осталось получить сериализованный пакет. Хотя данные идут сплошным потоком без шифрования, поэтому можно оставить так и просто найти в потоке PDF Файл. Это можно сделать руками, просто удалив все до и после сигнатур в дампе, в результате мы получим готовый PDF. Но вот проблема, он защищен паролем

    [IMG]

    4. Так, в трафике есть слова о том, что защита прочна как скала. Сразу идет ассоциация с rockyou. Поэтому попробуем перебрать пароли из этого словаря.

    [IMG]

    Pdfcrack ругается на то, что файл не соответствует формату Acrobat 6, поэтому воспользуемся John The Ripper. И данная программа успешно подобрала пароль для нашего хеша. Пароль – sweety21

    [IMG]

    5. Мы получили доступ к PDF к которому прикреплен docx документ, а также в PDF есть картинка и подпись к ней.
    [IMG]

    Отрыв этот документ, мы обнаруживаем в нем еще один мем, однако картинка находится в виде полного PNG файла. Можно открыть ее и покурить в StegSlove.

    [IMG]

    После прохода по каналам можно заметить, что в 0 бите каждой из палитр находятся данные, так что можно попробовать их вытащить.

    [IMG]

    Как мы и предполагали, там находится что-то похожее на base64. Что же, сохраняем данные и декодируем.

    [IMG]

    Из Base64 мы получили код на brainfuck. Выполняем его и смотрим что получилось.

    [IMG]

    [IMG]

    Так, на выходе вышел непонятный текст, если проанализировать трафик, можно заметить, что crown говорит о каком-то hell code. Можно погуглить это словосочетание

    [IMG]

    Поисковик выдает информацию о языке Malbolge, посмотрев примеры кода, можно понять, что то, что мы получили, очень похоже на код на код на этом языке.

    [IMG]

    [IMG]

    Осталось найти интерпретатор этого языка и выполнить код.

    [IMG]

    Сайт выдал ссылку на github репозиторий. В нем можно найти картинку kek.jpg

    [IMG]

    6. Скачиваем ее и анализируем. Можно заметить, что в ней также находится скрытая информация, однако догадок для решения не так много, разве что что-то про то, что ставить пароль в честь себя – глупо.
    [IMG]

    [IMG]

    Тут можно либо погуглить утилиты для стеганографии с шифрованием данных, либо воспользоваться хинтом и сразу использовать steghide. В качестве пароля будем использовать crown. После использования утилиты мы получаем архив.

    [IMG]

    7. В архиве обнаруживается еще один .NET Exe файл. Однако этот файл накрыт обфускатором, поэтому воспользуемся утилитой De4t чтобы сделать код более читаемым.

    [IMG]

    [IMG]

    Судя по коду, программа выгружает из себя во временную директорию Dll библиотеку, а потом вызывает у нее функцию, которая, проверяет введенный пароль и, судя по всему содержит флаг. С помощью отладки получаем библиотеку и начинаем анализ через IDA.

    [IMG]

    8. Можно убедиться, что это наша библиотека, просмотрев таблицу экспорта

    [IMG]

    Получив псевдокод, можно понять, что вначале выделается массив под 7 символов, потом каждый из этих символов проверяется с входным параметром, и если хоть один не совпал, то программа возвращает 0. Что же, это как раз наш пароль, он получается amor15

    [IMG]

    [IMG]

    9. Осталось ввести пароль в программе и просмотреть флаг.

    [IMG]

    Получается флаг: shb{t00_m4nys_573ps}

    В целом (как сказали мои друзья), таск получился достаточно объемным, однако вполне решаемым (за исключением места со steghide, поэтому я и дал хинт). Жаль, что никто с этого форма (да и с других тоже) не смог решить это задание. Надеюсь это решение было понятно всем и те, кто интересуется CTF и инфобезом в целом нашел тут что-то полезное.
     
Top
Загрузка...