TGViewer
Codeby Codeby @codeby_sec · 37K subscribers
Post #10079 2.97K
Почему скорборд падает на 40-й минуте — и как это не допустить

🔥 300+ участников, динамический скоринг в CTFd, и база данных — SQLite по дефолту. Именно так выглядит рецепт катастрофы на реальном Jeopardy. Скорборд лёг через сорок минут после старта: динамический скоринг пересчитывал стоимость тасков при каждом сабмите, а SQLite просто не справился с нагрузкой. Итог — перезапуск, миграция на PostgreSQL, потеря двух раундов и час разборок в чате. Одна конфигурационная ошибка, которую тест за 10 минут поймал бы ещё до старта.

Организация CTF — это инженерная задача, а не «закинул таски на платформу и открыл регистрацию». Каждая деталь имеет значение.

⚙️ Три формата — три разных уровня боли

Jeopardy — самый доступный старт. Команды решают независимые таски из категорий web, crypto, pwn, reverse, forensics и других, сдают флаги вида flag{s0m3_t3xt} и получают очки. Масштабируется от 10 до 1000+ команд без изменения инфраструктуры. Главная трудность здесь — не сервера, а сами задания. Каждый таск нужно проверить на unintended-решения: один реальный кейс — таск по crypto за 500 очков решался командой strings на бинарнике, потому что автор забыл убрать дебаг-вывод. Второй автор нашёл бы это за минуту.

Attack-Defense — совсем другая история. Каждая команда получает идентичный уязвимый сервер (vulnbox) и одновременно атакует противников и защищает себя. Игра идёт по тикам — раундам длиной 1-5 минут. Отошёл на обед — потерял 20 тиков. Классическая ловушка: команда блокирует все входящие соединения через iptables -P INPUT DROP и радуется, что её «не сломают». Через тик gameserver фиксирует DOWN — и SLA-очки улетают в ноль. Нельзя просто выключить сервис и стать неуязвимым: в этом и есть главный баланс формата.

🛡 Скоринг: где ошибаются чаще всего

Статический скоринг прост: 100 очков за easy, 500 за hard. Но если организатор ошибся в оценке сложности и «хард» решили 80% команд — баланс турнирной таблицы рушится. Динамический скоринг решает эту проблему: чем больше команд решило таск, тем меньше он стоит. Но именно здесь живёт та самая история с SQLite — при большом потоке сабмитов база данных просто не выдерживает. Мигрируй на PostgreSQL до старта, а не во время.

💡 Хочешь разобрать полную механику скоринга, античит и выбор инфраструктуры — читай статью целиком.

https://codeby.net/threads/organizatsiya-ctf-sorevnovanii-formaty-skoring-i-antichit-na-praktike.92940/
  • ❤ 6
  • 👍 4
  • 😁 4
  • 🔥 3
  • 👎 2
  • 👾 1
More from @codeby_sec
  1. Sep 28, 2026377 вакансий в ИБ. И всего 63 резюме. Это не опечатка, это текущий счёт на доске «Карьера…
  2. Sep 28, 2026numasec Numasec - это агент безопасности на базе ИИ, работающий прямо в вашем терминале. О…
  3. Sep 26, 2026🚩 Новые задания на платформе HackerLab! 👩‍💻 Категория Pentest Machines (Active Director…
  4. Sep 25, 2026Post #10469
  5. Sep 25, 2026Tookie-OSINT: Инструмент разведки по имени пользователя Tookie-OSINT — инструмент с открыт…
  6. Sep 24, 202614 резюме за три дня. Где вакансии? За месяц работодатели не разместили на форуме ни одной…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →