Анализ Задач Мини-Ctf

Приветствую всех читателей хабра.

Прошло три недели с тех пор, как я приглашаю желающих решить мой CTF и я думаю, что пришло время опубликовать анализ проблем.

По своему опыту знаю, что очень неприятно оказаться в ситуации, когда ты потратил много времени на проблему и так и не нашел решения, поэтому публикую анализ проблем.

Решения разделены на шаги и спрятаны под спойлером, чтобы после любого шага вы могли попытаться решить задачу самостоятельно, преодолев трудный момент. XT_CTF_01 XT_TASK_101 Шаг 1 Открываем архив и видим длинные названия папок.

В последней папке находятся файлы, но без пароля их содержимое недоступно.

Запишите названия папок:

   

5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 2346ad27d7568ba9896f1b7da6b5991251debdf2 e3cbba8883fe746c6e35783c9404b4bc0c7ee9eb bef21e9bfcf9fab0a5aebd46a735efe5434da96b 86f7e437faa5a7fce15d1ddcb9eaeaea377667b8

Набираем последовательности в Google и быстро узнаем, что это sha1 из слов:

password hash 1000 letters a

Собрав все вместе, мы предполагаем, что пароль представляет собой хэш из 1000 букв «а».

Поскольку для слов использовался sha1, давайте попробуем и здесь — 291e9a6c66994949b57ba5e650361e98fc36b1ba. Извлекаем файлы, убедившись в правильности пароля.

Шаг 2 Проверка файлов показывает, что все они составлены примерно по общему принципу: имя в формате xt + число, содержимое пары строк, где первая — это несколько букв, а вторая — последовательность шестнадцатеричных чисел.

персонажи.

Шестнадцатеричные последовательности рассматривать довольно неинтересно, так как они содержат по 79 символов (кроме файла xt121785230414240585522142219912, где их 58) — это точно не хэши или что-то закодированное.

Поскольку везде одинаково, и только в одном файле меньше, то можно предположить, что все шестнадцатеричные последовательности нужно объединить, и та часть, которая меньшая, — это просто последняя часть.

Осталось понять порядок.

С названиями можно было поиграть, но ничего интересного не получится, а если обратить внимание на первые строки файлов, то присмотревшись можно найти закономерность.

Здесь я укажу некоторые строки: он, ли, н, о, нэ, мг, си, ца, су, зн, бр, кр, аг.

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

Открываем таблицу Менделеева и собираем шестнадцатеричную последовательность в один файл (всего файлов 53, это номер последней части с символом i, что соответствует Йоду, 53-му элементу).

Результатом является файл PNG с зеленым прямоугольником.

Шаг 3 Маловероятно, что метаданные содержатся в файле в открытом виде, поскольку все байты мы видим в шестнадцатеричном представлении.

Поэтому работать будем с самим изображением.

Можно заметить (не глазом, конечно, а инструментами), что на самом деле используется более одного цвета.

Давайте воспользуемся заливкой и посмотрим руководство к следующему шагу.



Анализ задач мини-CTF

Шаг 4 Мы хэшируем все имена файлов и располагаем их по порядку, начиная с предыдущего шага.



696e7400b8a8c7da1c52e63550ddfdf8ae03be73 206d6100f4eb7c768890e8502db2bdeb81718301 696e2800f1c5c0df7676667ffca16856e808f9dd 297b69008e0d05b67df33c751da3c6f17a3fdb9d 6e742000bf96cea16e609731aa7397ac2b9f7b15 613d3400d2fedbf43ad7c43d678382d2ef83dde8 36303900b909f396c69c6d47ccb623cc83d5e2ea 313132007f6fdde9d3abad5545f44b2d2661b0be 3b696e0002582f22cab7aeaf730680b87780279a 74206200267e505a621cf264e303d3df63222fa7 3d343600ac031f166103b5319a273a867d5247ae 36393700d9e521b0e0d488b47fde51e5f5f9650d 37323b00bdf3caa241b2936f0355ad89e420389c 696e7400a1f9f8e62cd64c8e25d852e433bda80c 20633d009932d3b69b7a74296c7b75894bcddbc1 373639000ca31548a80fe28adf263bbe89f03069 33393400f56920f247d4d66798bb2c54e3db668c 373b6900222283ee79a5e7e3e79d55d4b159ffb1 6e742000fac60ac1f78aa90201e98b30a9c4adbc 643d3700b55bc0dda8bd748983716018b29fbd6f 38323300176db95a8aa4aaf1770346c353fd4753 32313400644e234a3899bd84e9f7d61a12bfecab 3b696e00654b4b7d8fb3b022777c6346342eba91 742065009720d2693f833788e69a6641e8de22f6 3d363800b1e40956ec8ca6a64013c8a651eff0f7 3435340008b5419f5139553c85b605009e3fb343 38393b004e5d66b6980c7cf14dc9bf0acf09e444 696e7400e648ffad4cde46b4d845f1ffad075da5 20663d00b9bdab8cb8721581f5aa8a2c2522d9de 3334330054fb4abaf144e818ec1199b7b4ffec47 34353900378490c3ba53a356327af1bbb2d2c8b0 313b69008803024e711baf3695402d3a13e0c905 6e7420006434f491ab51a923995a3daf56a65f5e 673d3800c5198ae1565cc5744d23ac492f6d2506 3231380000217a2c380bf9c9a6e122b1c01e90ea 373339003ef4f423f0d9c54ea5d8fbe4d8bf518c 3b70720073caad02c9cba60debf81f72c0ac23ad 696e7400d9ddb857a7608947aae60ed6d054c039 6628220061a3a81dcc20ce43903a18cea28b77db 2573250065285f647ed3e22a9233974ac24509a1 73257300678138427cc07ee072c987583db2fc5e 25732500d183d5303ed6bda0606eb5e4ccc1e7c8 73257300c5e9d7bfdb76b5fee122fe57bc8aa81a 25735c003675c4f732d95ae6a0d9bcc6769f94ca 6e222c0088503423d1f56148bbf2573a6e2e0518 26612c007c8d1d6b90d252fa7b2084bd8695a8f9 26622c00ec96a4edbdeb286484af38395a3fc928 26632c004a1db36cdef743283e6bc853b6995555 26642c00dd66db502138413e272deb2da78d4f57 26652c00bb1785b4e41444da4230b602f1860557 26662c00e739c24f55c0899b8eae2a948622c7d7 26672900f4b4843d0056571d293bec879cd1968f 3b7d20006750ebb44ffd784dc8afdd5b0f76816a

Если вы сделаете все вручную, то быстро заметите, что байт 4 всегда равен нулю, а слева от него находятся какие-то печатные символы.

Оставляем только их и собираем в одну строку.

Получаем следующую строку:

int main(){int a=4609112;int b=4669772;int c=7693947;int d=7823214;int e=6845489;int f=3434591;int g=8218739;printf("%s%s%s%s%s%s%s\n",&a,&b,&c,&d,&e,&f,&g);}

Запустите этот код на C , в результате мы получаем флаг.

Проверяем хеш, чтобы еще раз убедиться, что да, это тот флаг, который мы ищем.

XT_TASK_102 Шаг 1 Открываем архив и сразу видим имена файлов в шестнадцатеричном формате.

Содержимое файлов недоступно, поскольку требуется пароль.

Начнем называть имена.

Все имена имеют одинаковую длину, кроме файла с расширением 64F00000 (он короче).

В общем, расширения странные и нетипичные.

Но довольно легко заметить, что все файлы имеют разную длину расширения, и она варьируется от 1 до 7. Имя с самым длинным расширением является самым коротким.

Вполне логично предположить, что вам необходимо соединить все шестнадцатеричные последовательности по длинам расширений файлов.

Последовательность байт сохраняем отдельно, понимая, что это архив 7z, так как первые два байта (0x37 0x7a — 7z).

Шаг 2 Второй архив снова защищен паролем, но на этот раз у нас короткие имена файлов и небольшое содержимое файлов.

Хорошо, что просмотрщик архивов показывает метаданные файлов, а именно их контрольные суммы.

Несмотря на то, что crc довольно плохо гуглится, все же удалось проверить все последовательности и обнаружить, что при поиске crc 90c1667d прототип «четверки» все же был найден.

Или просто перебором трехбайтовых последовательностей найдите самые короткие файлы.

Любой метод позволил легко идентифицировать содержимое файлов — это были английские цифры «один», «два», «три», «четыре», «пять» и «шесть».

У нас нет других вариантов, кроме как объединить имена файлов в таком порядке.

Получаем VVNFIENSQzMy. Проверяем его как пароль к первому архиву - работает. Шаг 3 Наблюдательные решатели еще до пароля могли заметить, что crc32 из архивных файлов имеет довольно специфический вид, а именно 0xC0DExxxx. В CTF таких совпадений не бывает. Сами файлы представляют собой изображения PNG с текстом.

Поскольку мы посчитали crc32 на каждом шаге, стоит продолжать это делать.

После проверки первого текста с изображения (например, qnGyaQBc) становится ясно, что мы на правильном пути, ведь crc32 — это 0xc0de0831. Считаем crc от всего оставшегося и собираем в одну кучу.

CRC из изображений:

0xc0de094e 0xc0de054e 0xc0de0d7d 0xc0de0343 0xc0de0b52 0xc0de0734 0xc0de0154

CRC из текста:

0xc0de0831 0xc0de0430 0xc0de0c35 0xc0de027b 0xc0de0a33 0xc0de0654 0xc0de0058

Выкидываем общую часть, видим, что значение первого байта из двух бежит от 0x00 до 0x0d. Очень похоже, что это серийный номер.

Собираем, получаем флаг.

Проверяем sha1 и дополнительно убеждаемся, что все правильно.

XT_QUEST_103 список1 Дана последовательность чисел.

Мы просто берем символы с указанными номерами с карты, начиная нумерацию с нуля и пропуская переносы строк.

Имеет смысл заскриптовать это действие — оно понадобится не один раз.

Отвечать: awEs0me_sTart список2 Много цифр.

Название файла подсказывает, что вам необходимо узнать количество цифр 5. Считаем количество не только пятерок, но и всех чисел от 0 до 7 в целом.

Получаем последовательность: 135, 95, 61, 27, 58, 57, 85, 190. Ставим на карточку, получаем ответ. Отвечать: b1g_sTEp список3 Видим картинку с полиномом.

Подставляем n от нуля до 9, так как рекомендуем имя файла, получаем последовательность, которая при применении к карте дает ответ. Отвечать: крутоОл2математика! список4 Странное имя файла и странное содержимое.

Если погуглить fdhvdu, то среди нерелевантных результатов можно найти указание на то, что это слово «цезарь», закодированное шифром Цезаря — сдвигом алфавита на 3 символа.

Расшифровав содержимое, мы видим римские цифры.

Думаю, понятно, что делать с последовательностью цифр.

Отвечать: doinG_w3ll список5 Содержание задания буквально подсказывает, что необходимо сделать.

Хешируем файл, получаем 20 байт, которые можно интерпретировать как последовательность чисел для карты.

Отвечать: ExcelLlenT_impECc4ble визуальный1 Накладываем текст задания на текст карты, причем «накладываем» в прямом смысле.

Отвечать: fa5t!Один визуальный2 В тексте задачи 840 нулей и единиц.

Поскольку тема визуальная, мы пытаемся получить некоторое визуальное представление.

Если текст разделить на 5 строк по 168 символов, можно увидеть последовательность, ведущую к ответу.



Анализ задач мини-CTF

Отвечать: go_fUrth6r визуальный3 Имя файла прямо говорит нам о домино.

Попробуем соединить шестигранные домино и получить две цепочки.

Один круговой и неинтересен, второй можно рассматривать как последовательность чисел на карточке.

Результатом будет либо ответ, либо ответ в обратном порядке.

Отвечать: heRoic_effOr7s визуальный4 Нам даны шестнадцать шестнадцатеричных чисел, в которых явно много битовых единиц.

Переводим цифры калькулятором и буквально «накладываем» их еще раз.

Битовые нули будут обозначать нужные символы.

Читаем символы сверху вниз, слева направо.

Отвечать: их8БиЦ! визуальный5 Имя файла снова дает подсказку.

«b3s23» — обозначение конфигурации игры жизни.

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

Отвечать: просто_9еда прог1 В тексте задачи мы видим что-то вроде двумерной машины Тьюринга, которую просто нужно выполнить.

Отвечать: k1l0_Byte прог2 В задании явно указан код для Brainfuck, но если запустить его на эмуляторе, то программа выдаст сообщение, что задание не про Brainfuck. Да, вам просто нужно посчитать количество символов в каждой строке и применить его к карте.

Отвечать: l1kEl1Он! прог3 Опять мозготрах, но на этот раз вывод с нами согласен.

Требуемая последовательность для карты находится в памяти.

Отвечать: moRe_1nfO2me прог4 А потом трахнуть мозги.

Запускаем ее и программа выдает сообщение, что пароля нет. В памяти тоже нет ничего интересного.

Вам придется понять код. Код состоит из трех строк.

Первый устанавливает какие-то значения, второй делает то же самое, а третий отображает состояние памяти на экране.

Убираем вторую строку, запускаем ее и получаем последовательность для карты.

Отвечать: no_baRr13rs прог5 Последнее задание.

Опять код Brainfuck. Мы видим указание на то, что нам нужно вычислить какую-то функцию из какой-то строки карты и кода.

Запускаем код, который оставляет в памяти подсказку, что требуемая функция — декодирование base64. Мы проверяем строки карты, чтобы увидеть, что произойдет, если они будут декодированы из base64. Внезапно строка KysrWz4rPis8PC1d декодируется до +++[> +> +<<-].

We run the code with this addition and see an instruction to xorize all the symbols in each of the lines of the map. The result will be the last password. Отвечать: ofF1ci4l!УСПЕХА Вот и все.

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

Теги: #информационная безопасность #Аномальное программирование #ctf #головоломка #думай #задача

Вместе с данным постом часто просматривают: