Основная концепция обратной инженерии сообщения о скрытом файле.

Предыстория

Я занимаюсь Bug Bounty уже пару лет, как вы, возможно, знаете, большинство людей, работающих в этой области, имеют много общего. Типы фильмов, которые они смотрят, программы, с которыми нужно работать, и даже одна и та же группа пользователей YouTube, у которых можно получить информацию и получить дополнительные навыки.

Но что общего у большинства или всех Bug Hunters - это CTF. Я вроде как знал, что это было, но до сегодняшнего дня никогда не проявлял к этому особого интереса. Да, сегодня я впервые играл в CTF. Каким-то образом Youtube прислал мне видео конференции DEFCON, где говорилось о picoctf.org. Сначала было нетрудно найти большинство флагов, пока я не начал преобразование

Что такое Capture The Flag?

Capture The Flags или CTF - это своего рода соревнование по компьютерной безопасности. Команды конкурентов (или отдельные лица) соревнуются друг с другом в тесте на компьютерную безопасность. Очень часто CTF являются началом карьеры в кибербезопасности из-за их сплоченности и конкурентоспособности.

Как видно из фотографии, мне дали файл для загрузки, некоторый фрагмент кода Python и подсказку, чтобы попытаться решить проблему с флагом. Если вы хорошо разбираетесь в Python, то это была точка, с которой нужно было начать. Быть собой - это не то, с чего я начал, хотя должен был.

Приступим к действию

Первый выстрел

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

С первого взгляда видно, что ничего существенного не обнаружено. На этом этапе я был очень разочарован тем, что зашел в тупик, пока я не выбрал результат и не переключил шестнадцатеричный редактор с Signed Int на UTF- 8, как показано ниже;

Ха! Я кое-что понял, это были китайские слова для новогодней симфонии. Что теперь? После решения некоторых флагов с использованием ASCII в тот же день. Я подумал, а что, если мне нужно декодировать просто кодировку ASCII, а не настоящее предложение со смыслом? Оказалось, что это было именно так. Используя подсказку с веб-сайта, я попытался расшифровать ASCII, хотя в то время не знал, что это был ASCII.

Используя branah.com для декодирования 灩 捯 䍔 䙻 ㄶ 形 楴 獟 楮 獴 ㌴ 摟 潦 弸 強 㐸 㤸 扽, я получил следующие результаты ниже, из всех этих результатов единственное, что действительно привлекло мое внимание, - это Base64.

В результате декодирования в текст получилось «ioT {6bt_nt4_f87d88}». Это действительно было что-то хорошее.

Хотя я знал, что это часть фразы о флаге, это не ответ на флаг, чего-то не хватало, но я не знал, что именно. Флаг должен иметь вид picoCTF {XXXX}, а не IoT.

Второй выстрел

Присмотревшись к случайным строковым значениям из кода фрагмента Python, я понял, что скрипт использует chr () и o rd () функции python, цикл For и len. Пытаясь освежить свои славные дни питона, я обратил внимание на то, для чего в основном используются chr () и ord (). Именно в этот момент я нашел сообщение на StackOverflow.com, где парень просил о помощи, потому что он создал сценарий, использующий таблицу ASCII для кодировал сообщения, но не декодировал его обратно. По сути, после того, как я просмотрел его код, я понял, что ответ на мой флаг был закодирован с использованием скрипта python с этими двумя функциями.

Как-то мне нужно было создать скрипт ASCII decoder на Python и передать ему 灩 捯 䍔 䙻 ㄶ 形 獟 楮 獴 摟 潦 㕤 扽 в качестве входных данных. который затем декодирует его в обычный текст.

Придумав этот сценарий и запустив его в консоли Visual Studio Code, я получил следующие результаты;

Это был результат, которого я искал. Зная, что каждый флаг начинается с «picoctf {xxxx}» и отмечая «pi» в качестве первых двух букв в декодированном сообщении, я наконец извлек флаг из скрытого сообщения на китайском языке. , или, по крайней мере, я так думал. Присмотревшись, мы видим, что в декодированном сообщении есть дополнительные строки.

pi0co1CT2F{3164_b5it6s_7in8st93410d_11of12_813_7145d1548169817b}18

Последний выстрел

После всей этой работы все, что у меня осталось, это;

  • ioT {6bt_nt4_f87d88}
  • pi0co1CT2F{3164_b5it6s_7in8st93410d_11of12_813_7145d1548169817b}18
  • 灩捯䍔䙻ㄶ形楴獟楮獴㌴摟潦弸強㕤㐸㤸扽

Что мне делать дальше ?! Это похоже на конец. Что ж, решил попробовать в последний раз, если не получится, просто перейду к другому флагу.

Самым очевидным шагом было попробовать picoctf {6bt_nt4_f87d88} вместо ioT {6bt_nt4_f87d88}, очевидно, это не сработало.

Я перешел к удалению 0, 1, 2 и 18, чтобы больше флажков выглядело как picoCTF {3164_b5it6s_7in8st93410d_11of12_813_7145d1548169817b}, это тоже не сработало , но я знал, что меня закрыли. Все, что мне нужно было сделать, это смешать все, что было внутри {} первых двух результатов, в один, но как?

Размышляя над тем, почему я получил этот ответ из моего скрипта python pi0co1CT2F {3164_b5it6s_7in8st93410d_11of12_813_7145d1548169817b} 18, я понял, что мой код был написан неэффективно, поэтому он не мог максимально полно декодировать сообщение ASCII. Мне нужно было найти ответ самостоятельно, используя логику или просто догадки, отладка или повторное написание моего сценария не было вариантом для меня в 3 часа ночи.

Прорыв 👊

Все еще глядя на полусодекодированный флаг и думая о том, как python или просто мои знания о питоне подвели меня, именно в этот момент включился мой внутренний кодировщик. Люди начинают считать с 1, программисты знают, что 1 на самом деле означает 0. Это сделало Я заметил, что после «pi» было 0, еще две буквы после и было 1, еще две строки и было 2 и так далее. До достижения числа 18. Это и наличие ROT13 в моей голове, удаление любого числа после каждых двух строк / букв наконец дало мне декодированный флаг !

Окончательный результат

  • pi0co1CT2F{3164_b5it6s_7in8st93410d_11of12_813_7145d1548169817b}18

— to

  • picoCTF {16_bits_inst34d_of_8_75d4898b}

вуаля, это был расшифрованный флаг для этого упражнения.

Личные мысли, простые объяснения и предложения

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

Используя эту концепцию, я смог декодировать этот флаг. В тот же день я решил несколько флагов, связанных с ASCII, Base64 и rot13. То, что, как мы все видим, использовалось в этой задаче, вот как:

1) Строки файла были закодированы с использованием ASCII.

2) Расшифрованное сообщение было в формате Base64.

3) Каким-то образом результат моего скрипта дал мне неверный результат, похожий на скрытое сообщение, написанное как ROT13

Объединив все эти три фактора и с помощью знаний Python, я выполнил свою миссию. Да, для взлома необходимы некоторые знания в области программирования, но всякий, кто говорит вам обратное, лжет вам. Он был прав, детские шаги скоро заставят бегать быстрее. Когда вы занимаетесь хакерством, всегда пробуйте разные подходы.

PicoCTF - одна из самых увлекательных CTF для начинающих, потому что она достаточно проста для всех. Хотите увидеть пошаговые инструкции для более старых версий этого CTF? Взгляните на это Прохождение PicoCTF 2019.