Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
MireaCTF – Tasks from Training PlatformMireaCTF – 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; просмотров: 33; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.198 (0.007 с.) |