"Разграничивай работу и хобби": твердят нам отовсюду, но что если работа приносит лишь наслаждение? Программисты в свободное время пишут игры, устраивают соревнования, ведут блоги о своей работе. Музыканты играют и сочиняют песни себе в удовольствие. Литературоведы и историки читают, художники рисуют и ищут вдохновение, математики с физиками думают над проблемами, а плотники, я уверен, собирают шкафы и прикручивают полки.
У хакеров тоже есть увлечения, например взлом сервера на скорость и наоборот, соревнования "у кого система безопаснее". Но в душу мне запало другое из развлечение.
Capture the flag
CTF или "захват флага" - интереснейшее соревнование между кибербезопасниками. Всего есть 3 вида соревнований: Attack-defense, King of the Hill и мой любимый Task-based.
В первом варианте каждой команде дают сервер. Задача взломать сервера врага и достать оттуда флаги. У кого больше флагов - тот и победил.
Второй вариант более интересный. Здесь сервер один на всех, в него тоже нужно приникнуть и залатать все дыры, чтобы ими не смогли воспользоваться другие команды. Царём горы становится тот, кто залез на самую вершину сервера, то есть получил полные права.
И третий вариант. Здесь на сайте вывешивают задания, за их выполнение можно получить флаг, побеждает команда с наибольшим количеством флагов.
Task-based
Почему именно этот тип соревнований мой любимый? Просто потому что принять в нём участие может совершенно любой человек, даже вы и я. Конечно, просто так задания не решить, для этого необходимы профессиональные знания, но ведь никто не запрещает использовать гугл! А теперь поговорим о заданиях.
Все задания, или таски - как их принять называть - могут представлять из себя что угодно: файл без расширения, картинку, ссылку, архив, exe-шник. При этом, естественно, никто не будет говорить что нужно со всем этим делать. Например у картинки можно поменять канал, или перевести её в hex и вы получите флаг. Но обычно не всё так просто. В каждом таске особый метод шифрования.
Пример таска
Дан образ ROM для Nintendo Entertainment System с игрой Battletoads с подписью "Вот она — ваша уникальная возможность познакомиться с классикой и пройти ее до конца!", что намекает на то, что чтобы получить флаг нужно пройти игру до конца (Что довольно долго).
Решение
Все диалоги в игре хранятся в сжатом виде и сжимаются алгоритмом Хоффмана, значит если их расшифровать, то мы сможем получить искомый флаг. Но если мы расшифруем их, то получим какую-то белиберду. Значит в код шифрования были внесены изменения. Скачиваем образ настоящей игры и бинарно сравниваем его код с кодом игры из таска. Находим данные изменения:
Погуглив что значат эти команды ассемблера можно понять, что перед шифровкой к каждому байту применяется xor с байтом 0x1F. Применив эту операцию к нашему тексту получим текст всех диалогов в игре.
В глаза бросается фрагмент из финального монолога главного злодея:
I LOST! THIS CAN’T BE! I’M CC!THERE-ARE-NO-HARD-GAMES-FOR-NES! А DARK IS STRONGER THAN LIGHT! GRRRR!
А именно часть CC!THERE-ARE-NO-HARD-GAMES-FOR-NES!
Заменяем ! на {} и получаем флаг
CC{THERE-ARE-NO-HARD-GAMES-FOR-NES}
Всё просто!
Как бы не так, подумали вы. Но, на самом деле, даже если вы ничего не решите (как было на моём первом захвате), то всё равно получите интересный опыт и станете чуточку ближе к умению думать нестандартно.
Итоги
Всем программистам настоятельно рекомендую поучаствовать хотя бы в одном подобном соревновании. Да и не только программистам, многие соревнования достаточно просты и для обычных людей.
Всем добра!
#хакинг #программирование #интернет