Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

MireaCTF – Tasks from Training Platform

MireaCTF – Tasks from Training Platform

Данные задания представлены в качестве тренировочных на платформе MireaCTF Training. Рассчитаны таски на новичков. Целью написания данного разбора является ознакомление с базовыми принципами таких категорий, как реверс, web и возможно с другими.

 

 

Category: Reverse

В ходе выполнения тасков, ориентированных на реверс была использована такая программа, как IDA PRO (интерактивный дизассемблер, который широко используется для реверс-инжиниринга).

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


 

Task 1: static1

В данном случае можно увидеть, что происходит простое сравнение двух строк. Для начала, функцией printf() выводится сообщение «Enter right flag>». Далее ожидается пользовательский ввод, который обрабатывает функция scanf(). Затем результат ввода сравнивается с определенным шаблоном (наш флаг), который, как бы хранится в переменной Str2, но сама переменная не Str2 (в отличии от Str1) не объявлена явным образом (вернемся к этому чуть позже, когда будем рассматривать Cи код). Сравнение строк происходит при помощи функции strcmp(). Далее в зависимости от правильности пользовательского ввода выводится сообщение «Yes yes! Goooood!» или «No(((9(».

Конечно, флаг мы увидели сразу, но мы же здесь за полным пониманием ситуации, а также для изучения возможностей IDA PRO, поэтому, стоит нажать на F5, и мы увидим примерный код программы на Си:

Теперь мы можем убедиться в том, что программа работает именно так, как было описано выше. А еще мы не видим переменной Str2, но если сопоставить тот факт, что в функции strcmp() происходит проверка двух строк, то флаг хранится как раз-таки в Str2.

Флаг: mireactf{pr4tty_3asy}

Task 2: dynamic1

Посмотрим на второй таск. Заходим в разделе «Functions» в функцию main. Видим подсказку о том, что флаг находится где-то в другом месте.

Попробуем открыть исходный код:

Как видим, лучше не стало, поэтому смотрим более внимательно на раздел с функциями и замечаем func1:

Откроем раздел с этой функцией и из режима «Graph view» перейдем в режим перейдем в режим «Text view». Делается это по нажатию на ПКМ по рабочей области, далее «Text view»:

Что мы здесь видим? Во-первых, объявленные переменные: var_20, var_18, var_10, var_8, var_4. У этих переменных есть некоторые обозначения, которые разграничивают размеры переменной. Базовые обозначения:

Далее попробуем более детально разобраться, что происходит с этими переменными.

На сайте - http://ccfit.nsu.ru/~kireev/lab2/lab2com.htm представлен некоторый перечень и описание основных команд под архитектуру x86_64. На этот перечень я и буду опираться далее при описании работы.

Начнем с того, что у программы есть стек, куда и помещаются разного рода значения. В самом начале в стек помещается rbp, при помощи команды push. Это своего рода ограничитель, относительно которого происходит обращение к другим элементам в стеке. Далее к переменным добавляются поочередно байты (символы, которые можно увидеть в исходном виде – отмечены серым).

Далее можно заметить, что применяется XOR к символам. Для полноты понимания картины посмотрим код на Си:

Имеем массив на 3 элемента (v1[3]). Каждому элементу присваивается свое значение. Они у нас на данный момент отображаются в формате «hexdecimal». Нажав ПКМ по значению, выберем формат «char» и посмотрим (hotkey - R), что это за значения:

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

На данном этапе нам понадобится дебаггер, но нужно уметь определить, какой именно использовать. Как это сделать? В окне IDA View-A переключимся на текстовое отображение, нажав ПКМ и выбрав Text View. Отмотав в самый верх, можно увидеть общую информацию, в том числе и сведения об операционной системе:

Соответственно, нужно использовать дебаггер под Windows. В верхнем меню вместо No debugger выбираем Local Windows debugger:

Сверху в разделе Debugger переходим в Debugger options и устанавливаем нужные настройки, представленные ниже:

Далее переходим обратно в раздел Pseudocode-A (примерный исходный код, переход через F5 из функции func1), нажимаем ПКМ, Synchronize with -> IDA View-A, Hex View-1.

Category: Web

В данной части тренировочные задания ориентированы на отработку навыков владения таким инструментом как Burp Suite.

Task 1: hranilka

Переходим на сайт и наблюдаем то, что мы можем получить какой-то текстовый файлик:

Пробуем его получить, но видим сообщение о том, что файл просто найден, но самого файла мы не получаем:

Откроем Burp Suite. Перейдем в раздел Proxy, далее нажимаем на Intercept is off, чтобы перейти в активный режим (Intercept is on). Далее Open Browser, в открывшемся браузере вставляем ссылку и переходим на сайт. Регулирование переходов осуществляется при помощи кнопки Forward (или Drop). Теперь нажмем на кнопку внутри сайта для получения файла. В итоге запрос на получение перехвачен:

Вместо того, чтобы получать файл, загрузим его при помощи метода PUT:

После преобразования запроса нажимаем на Forward и смотрим на результат в браузере:

Файл успешно добавлен. Тогда попробуем его получить обратно:

Нажимаем на Forward и смотрим на результат:

Флаг: MireaCTF{intercept_change_win}

Task 2: bykvi

Открываем ссылку по аналогии с прошлым таском, но теперь для наглядности появившийся запрос переместим в Repeater. Для этого в появившемся запросе в окне Proxy нажимаем ПКМ и затем Send to Repeater:

Перейдем во вкладку Repeater и нажмем на Send, посмотрим на ответ:

Отправим полученный ответ в Decoder:

Decoder может работать в нескольких режимах – можно явно указать кодировку или же применить smart decode. Посмотрим, что у нас происходит в данном таске.

        

Знак «=» указывает скорее всего на кодировку base64. Выбираем Decode as… и Base64:

Получаем следующий результат:

Далее не совсем понятно, что применить, поэтому попробуем обратиться к Smart decode:

Флаг:Some_interesting_data

 

Task 3: greetings

При открытии страницы есть только «Admin» и «false». Открываем ссылку в Chromium (браузер в Burp Suite). Сначала видим что идет обычный запрос на показ содержимого сайта:

Далее нажимаем Forward и видим, что есть второй запрос через WebSocket. Ответом получаем 101 (код ответа, указывающий на то, что рукопожатие продолжается), потому жмем еще раз Forward:

Получаем данные, которые впоследствии будут переданы серверу:

Меняем в поле «admin» значение на true:

Нажимаем Forward и получаем в ответе флаг:

Флаг: MireaCTF{w3b-r0z37k4}

Task 4: logarithm

Открываем сайт:

Попробуем получить значение логарифма от какого-нибудь числа:

В общем-то нам надо найти такое значение, которое в ответе на запрос выдаст флаг. Перебирать 100 разных вариантов руками нецелесообразно, к счастью, Burp Suite может перебирать это сам, по крайней мере числа перебирает из коробки. Смотрим, как настроить такую атаку.

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

Теперь поставим специальные символы в запрос. Между этими специальными символами Burp будет сам вставлять значения, которые мы выберем далее:

Далее внутри вкладки Intruder перейдем в раздел payloads и зададим значения:

Далее нажимаем на Start Attack и следим за списком запросов-ответов. Ориентироваться можно на длину. Если везде она примерно от 215 до 219, то в запросе c /71 длина ответа составляет 202. Тут же можно и проверить response:

 

Флаг: MireaCTF{4u70m4t3_3v3ry7h1ng}

Task 5: Domain Check

Откроем сайт:

Видим только 1 окно ввода. Попробуем ввести что-нибудь:

А если таааак:

Так, разбираемся! если мы вводим условный домен и через символ «;» отделим команду, то в поле ввода этого символа не будет. Выясняем, почему так происходит. Заглянем в инспектор:

А вот и причина, по которой символ пропадает – на сайте присутствует фильтрация некоторых вводимы символов. Тогда перехватим наш запрос и сделаем магию (принцип будет позже). Вводим в поле ввода «vk.com», предварительно закинув сайт в Burp. Видим перехваченное вводимое значение:

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

Нажимаем Forward и смотрим ответ:

Вот таким вот образом выполняются две команды сразу, хоть это и не было предусмотрено изначально. Самое интересное – почему сейчас сервер обработал модифицированную часть запроса, а не отбросил ее из-за символа «;»?

Все довольно просто. Изначально мы вводим обычный домен, затем js-скрипт проверяет и фильтрует специальные символы, указанные в массиве (см. скрины выше), не найдя ничего подозрительного происходит формирование и отправка запроса, который в свою очередь уже перехватываем мы, но теперь, когда мы модифицируем запрос и отправляем его далее, js-скрипт не срабатывает, т.к. он остался «позади» на сайте, а мы уже после перехвата, пересылаем запрос напрямую к серверу, поэтому и происходит обработка двух команд. Ну что же, читаем флаг:

Флаг: MireaCTF{7h3_fu7ur3}

 

Task 6



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 4; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.159.163 (0.007 с.)