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