Разбор задач из CTF по реверсу: Console version 1.337 | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Python Developer. Professional
-3%
Разработчик на Spring Framework
-5%
iOS Developer. Professional
-8%
Golang Developer. Professional
-6%
Базы данных
-12%
Agile Project Manager
-5%
Android Developer. Professional
-11%
Microservice Architecture
-5%
C++ Developer. Professional
-5%
Highload Architect
-6%
JavaScript Developer. Basic
-8%
Backend-разработчик на PHP
-9%
C# Developer. Professional
-9%
Team Lead
-6%
Алгоритмы и структуры данных Разработчик программных роботов (RPA) на базе UiPath и PIX Unity Game Developer. Basic Разработчик голосовых ассистентов и чат-ботов Vue.js разработчик VOIP инженер NoSQL Супер-практикум по использованию и настройке GIT Symfony Framework iOS Developer. Basic Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool"
Инфраструктура
DevOps практики и инструменты
-12%
Базы данных
-12%
Network engineer. Basic
-10%
Network engineer
-4%
Экcпресс-курс «ELK»
-10%
Инфраструктурная платформа на основе Kubernetes
-6%
Administrator Linux.Basic
-10%
Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Дизайн сетей ЦОД
-13%
PostgreSQL
-8%
Разработчик программных роботов (RPA) на базе UiPath и PIX Reverse-Engineering. Professional Внедрение и работа в DevSecOps Administrator Linux. Advanced Infrastructure as a code in Ansible Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Экспресс-курс «IaC Ansible»
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Разбор задач из CTF по реверсу: Console version 1.337

Revers_Deep_19.12-5020-9db410.png

Всем привет! Как известно, в CTF существует несколько вариантов проведения соревнований. В нашем случае мы остановимся на реверс-инжиниринге — исследовании программ без исходного кода. И поговорим про задание Reverse_50. Console version 1.337.

4b41e1bd82d3a1a3cd5c8_1-20219-eb2016.png

Into

Обратная разработка — исследование некоторого устройства или программы, а также документации на него с целью понять принцип его работы; например, чтобы обнаружить недокументированные возможности (в том числе «программные закладки»), сделать изменение, или воспроизвести устройство, программу или иной объект с аналогичными функциями, но без копирования как такового (© Wikipedia).

Эта группа категорий схожа по своей сути. Различия небольшие: reverse — обычно «раскрутка» алгоритмов, использованных в программе для получения флага; pwn — взлом программ и устройств теми же методами; binary — реверс программ под Linux; exploit, vuln — поиск и эксплуатация уязвимостей на удалённых сервисах (иногда имея в наличии исходный код, иногда сам сервис, иногда без него).

Reverse_50. Console version 1.337

A.U.R.O.R.A.: Lieutenant, you are standing in the Alpha base in front of the SCI430422 mainframe art console where its sixty-four LED lights are blinking in hypnotic patterns. As you know, this system is renowned for its top-notch security measures. Only the most expert or resourceful hackers are able to break in — and you are definitely one of them.

Решение

В этом задании нам нужно было попасть в систему консоли. Для начала запускаем файл на исполнение и видим окно с приветствием и предложением ввести пароль:

afc167b65ecf4199ad8cc50f72698260_1-20219-3312d3.png

Что же делать? Открываем файл в отладчике OllyDbg и находим строчку «Please enter password:» — в основном окне пролистаем листинг вверх, до адреса 004010F9:

033a4a050da541e9b8ed3212ce08ce3e_1-20219-01975b.png

Как вы можете видеть, проверка введённого пароля осуществляется в функции, расположенной по адресу 00401000. Попробуем поставить на этот адрес брейкпоинт (клавиша F2 в OllyDbg), затем нажмём F9 (продолжить исполнение) и для примера введём какую-нибудь строку в окне программы:

92c4d44bb2ec4df2b342853a26c9c6b9_1-20219-2ad500.png

Нажимаем «Enter», и происходит срабатывание брейкпоинта. Далее переходим в OllyDbg и нажимаем клавишу F7, чтобы перейти внутрь функции по адресу 00401000:

3a361d4d65a249ff88c7b5e386d13805_1-20219-5033dc.png

Сразу можно заметить, что по адресу 004010CF производится вызов функции strcmp() из стандартной библиотеки C. Эта функция сравнивает две строки и возвращает 0, если эти строки одинаковы. Ставим брейкпоинт на вызов функции (клавиша F2), нажимаем F9 (продолжить исполнение) и смотрим, какая еще строка, кроме введённой нами строки «password123», будет в неё передаваться:

07fb82f8e65d45e58e455de20be5ef01_1-20219-2e1ded.png

В окне стека (и в окне регистров) мы видим, что строка s1 равна «ctfzone{l33t_haxx0r_is_you!!1}» (без кавычек).

2d9160b02c44472bbfb6762b0ca58de0_1-20219-3b72f5.png

Вот и флаг!

Ответ: ctfzone{l33t_haxx0r_is_you!!1}

В следующих заметках мы продолжим рассматривать задания из CTF по реверсу, поэтому следите за новостями!

За подготовку материала автор выражает благодарность CTF-сообществу.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться