Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Друзья, начинаем публиковать решения нашего CTF-марафона! В нем было пять уровней сложности, в каждом по пять заданий — всего 25 заданий. Каждую неделю мы будем выкладывать по 5 решений — сегодня начнем с самых простых.
Результаты марафона мы подвели в начале апреля, но задания все еще доступны — и вы можете попробовать решить их для себя.
CTF-2023 от «Доктор Веб»: задания уровня Normal
1. Simple .exe
Первый шаг в решении задания — определить, что это файл питон, закомпилированый в исполняемый файл. Это можно увидеть, если немного проскролить файл и обратить внимание на строки:
Два самых популярных варианта подобной упаковки скриптов — py2exe и pyinstaller. Чем именно был упакован питоновский скрипт, видно здесь:
Узнать, как достать скрипт из такой упаковки, можно в Google — самым простым способом будет утилита unpy2exe. Этот процесс довольно прост: поставить утилиту через pip, запустить ее, получить .pyc-файлы и запустить модуль uncompyle6. В результате получится такой скрипт:
Мы можем запустить его — тогда станет видно, что плейсхолдер “XXXXXXXXXXXXXXXXXXXXXXXXXXX” заменяется на строку 44. На выходе получаем паучка со строкой “DrWeb{PYPYPYPYPYPYPYPYPYPY}”:
В дебаггере эта строка превращается в флаг: “flag = DrWeb{Un3x3fy_M3_70_Py7h0n}”.
2. Tools -> Repair
Если открыть файл через Hex-редактор, то можно увидеть его сигнатуру “PK (50 4B 03 04)” — это значит, что файл формата .zip:
Если взять любой другой zip-архив и открыть его через Hex-редактор, то мы увидим следующее:
Структура этих файлов одинаковая за исключением одной строки — в файле из задания есть “<PADDING><PADDING<PADDING><PADDING>”, которую нужно вырезать, что «починить» файл. После этого можно будет распаковать исполняемый файл, который печатает флаг: “DrWeb{b3rry_51mpl3_z1p}”.
3. Supreme paycheck
В задании дается документ Microsoft Office в формате .docm. Так как большая часть вредоносного ПО распространяется либо через VBA-макросы, либо через эксплоиты, а искать эксплоит до проверки на макрос не имеет смысла, сначала необходимо проверить файл именно на макрос. На него в документе могут указывать строки, используемые для названий, и маркировки самого документа, например файлы:
Чтобы попробовать достать макрос из этого документа, можно использовать одну из многих тулзов, например olevba, oledump, officeparser — или любую другую. Скрипт, который получается результате, обфусцирован:
Обфусцирование было сделано одним из самых базовых обфускаторов, и для деобфускации достаточно поменять “Execute” на “MsgBox” или “WScript.Echo”. Конечный скрипт выглядит так:
В результате находим флаг: DrWeb{51mpl3_m4cr0_71m3}
4. Donut? DONUT!
Это ELF-файл, в котором не стрипнута никакая информация и флаг совершенно не зашифрован, следовательно, отобразив пончик в терминале и достав строки, можно сразу найти флаг “DrWeb{b463l_m4dn355}”.
5. DRW- ████
Задание нацелено на то, чтобы участник освоил синтаксис неизвестного языка и прочитал его, чтобы найти флаг. «Код», который дан в задании, написан на языке LOLCODE. Наиболее бросается в глаза строка “MzIwMGE3NDM5MWU2MzMyMGQ3MTMyNzY3MzFlMmY2MTMzNjE=” — именно в ней и содержится флаг, зашифрованный XOR. Выглядит он так: “3200a74391e63320d713276731e2f613361”. Об этом говорит несколько подсказок: "FORM A HEX", "UNXORED".
Ключ формируется в строке “I HAS A KEY ITZ SMOOSH KIKI KIKI QEQE WAWA RURU QEQE MKAY” — это единственное подходящее место. Значит, необходимо пройтись по всей последовательности конкатенаций строк в обратную сторону, составить строку и заXORить ее вместе с флагом “3200a74391e63320d713276731e2f613361” — и получить ответ: “DrK3k_1s_0u74_h3r3”. Следовательно, весь флаг выглядит так: “DrWeb{DrK3k_1s_0u74_h3r3}”.