Как я на Кемпе колумбик получил

 Публичный пост
10 июня 2025  1204
Я понял!

Интро

Привет, меня зовут Мартин Ваня и я довольно редко пишу посты в клубе. Да и комментарии тоже. Да и читаю не часто, разве что Дайджест от Паши.

Но как-то так случилось, что в этом году я поехал на Кемп и решил сделать там CTF. В этом посте (посту?) я напишу о том, что это такое, как оно прошло и что из этого всего вышло.

Зачем на самом деле пишется этот пост

Чтоб дать ссылку на мой гитхаб, разумеется. Если вы уже в теме CTF - изучайте задачки, форкайте бота, делайте своё и тащите в клуб - порешаем!
Если нет - откройте в новой вкладке и продолжайте читать!

Что такое CTF

Capture The Flag - это такой режим игры в мультиплеерных шутерах, когда надо отобрать флаг вражеской команды и доставить его на базу. Кто больше флагов принёс - тот и победил.

А ещё - это соревнование, когда нужно решить задачу, получить доказательство решения (флаг) и отнести его на базу (в систему, которая считает очки). Кто больше флагов принёс - тот и победил.

Обычно задачи - это сервисы, которые нужно взломать. Но это обычно...

Как это было на Кемпе

Шаг 0 - питч идеи

Когда пришла пора заполнять заявки на активности, я написал там, что могу провести CTF. Я проводил их уже много, даже писал задачи на заказ, вроде бы моя область экспертизы.
Ну написал и написал.

Когда меня добавили в чатик и сказали, что моя идея принята - я сначала предложил сделать классический CTF: толпа хакеров сидит с ноутбуками и ломает всё подряд. Но мою идею засрали не одобрили.

Мне говорят, что ноутбуков не будет
Мне говорят, что ноутбуков не будет

Шаг 1 - сбор требований

Основных требований было 2:

  1. Игра должна быть доступна с телефона.
  2. Игра должна вовлекать, а не отвлекать.

Из пункта 1 вытекает необходимость написания telegram-бота.
Из пункта 2 - коллаборация с другими активностями.

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

Концепт был описан так
Концепт был описан так

Шаг 2 - поиск сообщников

Я начал искать людей, которые готовы были интегрировать свою движуху с моей.

Кажется, все чаты получили такое сообщение
Кажется, все чаты получили такое сообщение

Кто-то отозвался добровольно, остальных я долгое время заебывал уговаривал по чатам.
Итого: из 25 заданий - 9 требовали присутствия на Кемпе и хождения ногами по локациями, я остальные решались с телефона.

Шаг 3 - написание бота

Я написал его на Rust, разумеется. Внутри есть асинхронность, каналы, rate limit на token bucket алгоритме, интеграция с Vas3k API и админские команды, позволяющие управлять заданиями прямо из чата.

Бот говорит за таски
Бот говорит за таски

Шаг 4 - создание заданий

Интересный челленж был только один: дать задачки на шелл так, чтоб они работали с телефона.
Тут помог проект tty-share и немного кода на Perl :)

Шаг 5 - деплой и тестирование

В телеграм-чат про CTF к тому времени пришло много людей и некоторые согласились мне помочь. Спасибо вам!

Илья тестит задания
Илья тестит задания

Проведение

Пока мы ехали на Кемп на автобусах, я открыл задания для всех и написал пост в анонсах. По приезду я ещё походил и позаёбывал поуговаривал людей добавить оффлайн флагов на их события и всё поехало. Так появились флаги на карте, на радио и на почте.

Этот флаг многие искали
Этот флаг многие искали

А этот можно было спросить в штабе
А этот можно было спросить в штабе

Некоторые оффлайн флаги были очень креативны - например, кепка кальянщика :)

Тут был флаг бегущей строкой
Тут был флаг бегущей строкой

Некоторые требовали преуспеть в другой активности - например, решить задачи в игре Го.

Статистика

Всего в бота написало 57 человек, а решили хоть одно задание - 22.
8 человек решили 10 и более заданий.
Никто не решил все задания.

Итоги

Внезапно позвали на сцену в субботу и пустили к сундуку сокровищ.

Теперь у меня есть новый колумбик, он-же штангенциркуль
Теперь у меня есть новый колумбик, он-же штангенциркуль

Зачем еще был написан этот пост

Если вы играли в CTF - напишите, почему вы в него играли и что вам зашло.
Если вы решили не играть - напишите, почему нет?

Это поможет сделать следующий CTF лучше!

Спасибо :)

10 комментариев 👇
Юстас Исаев Предприниматель 10 июня в 14:01

О, отдельное спасибо за CTF, получилось очень прикольно. Я начал участвовать с самого начала, кажется ещё в автобусе, и потом было забавно позалипать на задания в перерывах между активностями, ожидая начала какой-то движухи или случайно замечая флаги в неожиданных местах (я прям кайфанул когда увидел флаг на карте на чьей-то чужой фотке). Из того "что сделать лучше" могу предложить во-первых изначально запланировать постепенное наполнение флагами в течение всего кемпа - я почему-то стремился как можно скорее набрать флаги в певые два дня, поэтому пристал к бармену, почте и остальным когда они ещё не были готовы и во второй раз не подходил. И второе - динамичные флаги хотелось бы сделать менее динамичными. Флаг на "кальянной станции" я пытался найти несколько раз, но видимо всегда в отсутствие нужного кальянщика с кепкой :-)

  Развернуть 1 комментарий
Anna Программист 17 июня в 20:30

Я когда ехала в автобусе на кэмп и увидела эти задания, они вызвали у меня много негодования - хоть открывать инспектор нигде не понадобилось, решать их без ноутбука все равно было чертовски неудобно. В итоге я думаю нарешали какое-то вменяемое число задачек только те, у кого с собой он был. У меня был)

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

Мне в целом нравятся подобные задачки, но уровень у меня невысокий. Я решил несколько штук ещё по дороге на кэмп и в паре заданий прошел часть пути, но не догадался до конца. А на самом кэмпе было уже не до того. И ходить по мероприятиям в поисках флагов мне было как-то лень. Я выбирал то, что мне было интересно, а про флаги не думал. Поэтому сразу стало понятно, что бороться за победу смысла нет. Так что я порешал ради удовольствия и забросил. И себе на лекцию решил не добавлять флаг, потому что не хотелось бы, чтобы это влияло на выбор людей приходить. Спасибо тебе, задачки классные

  Развернуть 1 комментарий
Alexey Ulyanov Работаю с умными людьми в безумном мире блокчейнов 10 июня в 12:03

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

  Развернуть 1 комментарий

@sibusernsk, бот тебе не отвечал? Это странно. Ты не был в исключениях вроде.

  Развернуть 1 комментарий

@annmuor, а я бы добавил похожую мысль, ощущение что про это было недостаточно много сказано и было не очень понятно что это будет. То есть как-то вроде бы оно было, да, но простого понимания как чего это сделать не хватило.

Думаю, тут помогли бы пара QR кодов ведущих на /start с ботом и каким-то кратким описанием чего нас в этом ждёт

  Развернуть 1 комментарий

@shrimpsizemoose, спасибо! Маркетинг, нам нужен маркетинг!

  Развернуть 1 комментарий

@annmuor, advertise like shameless whores!

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб