Спортивный хакинг или Capture the Flag (CTF) — игра для команд безопасности и разработки, которая помогать понять, как злоумышленники эксплуатируют уязвимости и учит защищать приложения от кибератак.
В статье рассказываем, какие бывают CTF-соревнования, как они проходят и показываем примеры реальных заданий.

CTF в кибербезо­пасности: все, что нужно знать об игре Capture the flag

CTF в кибербезо­пасности: все, что
нужно знать
об игре Capture
the flag
31 марта 2025
20 минут
владелец продукта Start CTF, помогаю разработчикам писать безопасный код
Алексей Григорьев
автор, редактор в ИБ, главная по фактчекингу в компании
Ульяна Крюкова
автор, редактор в ИБ, главная по фактчекингу в компании
Ульяна Крюкова
владелец продукта Start CTF, помогаю разработчикам писать безопасный код
Алексей Григорьев

Что такое CTF-соревнование

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

Флаг — строка символов, которая раскрывается после успешного выполнения задания. Обычно это текст в формате flag{example}, где:

  • flag — стандартное обозначение для идентификации строки как флага,
  • {example} — уникальная часть, которая генерируется для каждого задания или конкретного этапа соревнования.

Например, если задача была связана с поиском уязвимости в веб-приложении, участник обнаружит строку вроде flag{CTF_success_2024}. Это строку нужно отправить в систему, чтобы получить очки.

Типы CTF-соревнований

Существуют разные типы CTF-соревнований, два самых распространенных — Jeopardy и Attack-Defense.
Jeopardy или Task-Based
Участники получают набор заданий разной сложности, и сами выбирают, какие из них и в каком порядке будут решать. Весь процесс немного напоминает викторину: за каждый правильный ответ команда получает баллы — чем сложнее таск, тем больше очков. Побеждает тот, кто набирает больше всего баллов в общем зачете.

У Task-Based соревнований есть разные форматы. Например, Start CTF — это тренажер в формате интернет-банка, который имитирует действующий продукт, его бизнес-логику и содержит в коде самые частые и опасные уязвимости. Особенность этого формата — социальность, так как игрокам разрешено использовать не только технические векторы атак, но и воздействовать друг на друга с помощью социальной инженерии.
Attack-Defense или Classic
Команды получают одинаковые серверы с набором уязвимостей. Цель — использовать уязвимости противника во время атак и одновременно исправлять собственные, чтобы предотвратить угрозы. Если команда успешно атакует уязвимости соперников, она получает флаги, а побеждает тот, кто собрал больше флагов и оставил меньше уязвимостей на своих серверах.
Комбинационные CTF
Такой формат сочетает элементы Jeopardy и Attack-Defense, что делает соревнования более сложными и интересными. Например, участники сначала для подготовки решают задачи, а затем используют полученные знания во время атак и защиты серверов.
Скачайте карту знаний и навыков по безопасной разработке
В ней — 13 уязвимостей и технологий, которые нужно знать разработчику, чтобы писать безопасный код

Какие задачи решают на CTF-турнирах

Задачи на соревнованиях Capture the Flag охватывают разные области кибербезопасности:
Поиск веб-уязвимостей (Web)
Задачи этой категории связаны с анализом и эксплуатацией уязвимостей веб-приложений. Участники исследуют сайты на наличие уязвимостей, таких как SQL-инъекции, XSS или обход аутентификации.

Например, на сайте участник видит форму авторизации. После анализа входных данных он понимает, что сайт уязвим к SQL-инъекции. Цель — использовать уязвимость, чтобы обойти авторизацию и получить скрытый флаг.
admin' OR '1'='1;--
Такой запрос участник вводит в поле логина, благодаря чему обходит проверку пароля и получает доступ к административной панели, где находится флаг.

Итоговый SQL-запрос на сервере:
SELECT * FROM users WHERE username = 'admin' OR '1'='1';--  AND password = 'что_угодно'
Так как '1'='1' всегда истинно, проверка пароля игнорируется.

После ввода admin' OR '1'='1 система авторизует пользователя под администратором. После успешного входа он получает флаг: CTF{SQL_INJECTION_SUCCESS}

Телеграм-канал Start X

Подписаться
Наши разборы мошеннических схем поймет даже бабушка
Поиск и эксплуатация уязвимостей в приложениях (PWN)
Задачи направлены на анализ бинарных файлов и поиск уязвимостей, которые позволяют выполнить произвольный код. Чаще всего используются техники переполнения буфера и эксплуатации ошибок в управлении памятью.

Например, участнику дают исполняемый файл, который обрабатывает входные данные. После анализа он обнаруживает уязвимость переполненного буфера, поэтому создает специальный входной файл, который переполняет буфер и перезаписывает адрес возврата функции. Это позволяет выполнить произвольный код и получить флаг.
payload = b"A" * 64 + b"\xef\xbe\xad\xde"
Код создает полезную нагрузку payload, которая используется в задачах по эксплуатации уязвимостей. Разберем его:

  • b"A" * 64 — создает последовательность из 64 байтов A (0×41 в ASCII). Она часто используется для переполнения буфера.
  • b"\xef\xbe\xad\xde" — добавляет к этой последовательности специальные байты 0xDEADBEEF, записанные в little-endian порядке 0xEFBEADDE.

Такой payload могут использовать для перезаписи адреса возврата в стеке, чтобы изменить поведение программы — например, передать управление на произвольный код
Реверс-инжиниринг (Reverse)
В таких задачах нужно исследовать программное обеспечение, чтобы понять его логику или обнаружить скрытые данные.

Например, в zip-файле участнику дают скомпилированный питоновский файл decompile-me.pyc и текстовый файл output. txt с шифром внутри:
└─$ cat output.txt        
l6l;t54L6>-"|<@bQJ=m>c~?
Задача — расшифровать output. txt и получить флаг. После анализа decompile-me.pyc участник выясняет, что это скомпилированный байт-код для Python 3.7.
└─$ file decompile-me.pyc                                                                                                                               
decompile-me.pyc: Byte-compiled Python module for CPython 3.7, timestamp-based, .py timestamp: Mon Apr 24 15:58:34 2023 UTC, .py size: 433 bytes
С помощью онлайн-сервиса toolnb, который использует uncompyle6, можно декомпилировать файл и получить исходный код.
from pwn import xor
with open('flag.txt', 'rb') as (f):
    flag = f.read()
    a = flag[0:len(flag) // 3]
    b = flag[len(flag) // 3:2 * len(flag) // 3]
    c = flag[2 * len(flag) // 3:]
    a = xor(a, int(str(len(flag))[0]) + int(str(len(flag))[1]))
    b = xor(a, b)
    c = xor(b, c)
    a = xor(c, a)
    b = xor(a, b)
    c = xor(b, c)
    c = xor(c, int(str(len(flag))[0]) * int(str(len(flag))[1]))
    enc = a + b + c


with open('output.txt', 'wb') as (f):
    f.write(enc)
В коде видно, что автор задания использовал библиотеку pwntools, чтобы сгенерировать output.txt, и выполнил серию XOR-операций, которые перетасовали биты флага. Чтобы получить флаг, нужно обратить этот процесс с помощью такого скрипта:
from pwn import xor

with open('output.txt', 'rb') as f:
    enc = f.read()

n = len(enc) // 3
a = enc[:n]
b = enc[n:2*n]
c = enc[2*n:]

c = xor(c, int(str(3*n)[0]) * int(str(3*n)[1]))
c = xor(b, c)
b = xor(a, b)
a = xor(c, a)
c = xor(b, c)
b = xor(a, b)
a = xor(a, int(str(3*n)[0]) + int(str(3*n)[1]))

flag = a + b + c

with open('flag_recovered.txt', 'wb') as f:
    f.write(flag)
После запуска скрипта участник получает флаг:
└─$ python3 solution.py
└─$ cat flag_recovered.txt  
SEE{s1mP4l_D3c0mp1l3r_XDXD}
Расследование киберинцидентов (Forensic)
Forensic-задачи связаны с анализом данных, таких как сетевой трафик, дампы памяти или лог-файлы для выявления следов атаки.

Например, участнику предоставляют pcap-файл — снимок сетевого трафика, где скрыт флаг.

Участник открывает файл в Wireshark wireshark capture.pcap и начинает анализ вручную. Он фильтрует пакеты и проверяет подозрительные запросы.

В одном из пакетов участник находит часть строки, похожую на закодированные данные. Например:
GET /data?info=ZmxhZ3tnb29kX3lvdV9hbmFseXplZF9pdH0= HTTP/1.1
Ее можно декодировать с помощью base64:
echo "ZmxhZ3tnb29kX3lvdV9hbmFseXplZF9pdH0=" | base64 -d
В результате — флаг:
flag{good_you_analyzed_it}
Администрирование систем (Admin)
Эти задания проверяют знания системного администрирования и настройки серверов. Они могут включать настройку брандмауэра, чтобы защитить сервер от атак, или восстановление доступа после сбоя.

Например, участник анализирует конфигурацию Linux-сервера и находит неправильно настроенный SSH-доступ:
cat /etc/ssh/sshd_config | grep PermitRootLogin
Если параметр PermitRootLogin установлен в yes, его нужно изменить на no и перезапустить SSH-сервис:
sudo systemctl restart sshd
Криптография (Crypto)
Задачи криптографии связаны с анализом алгоритмов шифрования и дешифрацией данных.

Например, участнику дают текст, зашифрованный алгоритмом RSA, и предоставляют открытый ключ. Если ключ слишком мал, участник использует атаку факторизации, чтобы вычислить закрытый ключ, а затем расшифровывает текст и получает флаг.

Такой код декодирует сообщение, зашифрованное с помощью RSA, при наличии малого открытого ключа (e=3):
from Crypto.PublicKey import RSA
from Crypto.Util.number import inverse, long_to_bytes

e = 3  # малый открытый ключ
n = 253466111543149  # модуль (произведение двух простых чисел)
c = 77578992312080  # зашифрованное сообщение

d = inverse(e, n-1)  # вычисляем секретный ключ d
m = pow(c, d, n)  # расшифровываем сообщение
print(long_to_bytes(m))  # выводим расшифрованный текст
Безопасность облачных систем (Cloud Security)
Задачи Cloud Security связаны с безопасностью облачных сервисов, анализом конфигураций и поиском уязвимостей в облачной инфраструктуре.

Например, участнику дают ссылку на сайт, который размещен в облачном хранилище Google Cloud Storage: storage.googleapis.com/out-of-the-bucket/src/index.html

Когда участник переходит по ссылке, он замечает, что URL указывает на облачное хранилище, и решает исследовать директорию /out-of-the-bucket/, удалив часть пути в адресной строке storage.googleapis.com/out-of-the-bucket/

Открывается список содержимого бакета, что позволяет просмотреть все файлы в директории — это значит, что права доступа настроены некорректно.
Среди файлов и папок — объект с ключом secret/dont_show.
<Contents>
<Key>secret/dont_show</Key>
<Generation>1703868647771911</Generation>
<MetaGeneration>1</MetaGeneration>
<LastModified>2023-12-29T16:50:47.809Z</LastModified>
<ETag>"737eb19c7265186a2fab89b5c9757049"</ETag>
<Size>29</Size>
</Contents>
Участник открывает его по такому URL: storage.googleapis.com/out-of-the-bucket/secret/dont_show. Потом скачивает файл и просматривает его содержимое с помощью команды cat dont_show.

В файле — флаг:
uoftctf{allUsers_is_not_safe}
Стеганография (Stegano)
Эти задачи связаны с поиском скрытой информации в мультимедийных файлах, таких как изображения или аудио.

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

С помощью Steghide он извлекает скрытую информацию:
steghide extract -sf hidden_image.jpg
  • steghide extract — команда для извлечения скрытых данных из файла.
  • -sf hidden_image.jpg — исходный файл изображения (hidden_image.jpg), в котором могут находиться скрытые данные.
Эта команда извлекает скрытые данные из файла, но в реальных задачах часто требуется дополнительный анализ — подбор пароля, проверка разных методов сокрытия или предварительная обработка изображения.
Сбор данных из открытых источников (OSINT)
В OSINT-задачах участники ищут информацию в открытых источниках, таких как социальные сети, форумы или публичные базы данных.

Например, участнику предлагают найти личный email пользователя на основе его активности в социальных сетях. Он анализирует профили пользователя, проверяет их активность в разных сервисах и находит адрес, который служит ключом к получению флага.

Выполнить OSINT-анализ можно с помощью утилиты theHarvester:
theHarvester -d example.com -b yahoo 
  • -d example.com — задает целевой домен, который нужно заменить на реальный домен компании или человека.
  • -b yahoo — указывает источник поиска, в данном случае, Yahoo. TheHarvester будет искать email-адреса и другую и другую связанную с этим доменом информацию.
theHarvester сканирует публичные профили в Yahoo и пытается найти связанные email-адреса, которые могут принадлежать сотрудникам или владельцам домена example.com.

Пример вывода команды:
[+] Emails found:
    john.doe@example.com
    jane.smith@example.com
Это может помочь в OSINT-исследованиях, а также в тестировании на проникновение Pentesting, например, при сборе информации для фишинговых атак или социальной инженерии.
Безопасность искусственного интеллекта (AI)
В таких задачах участникам предстоит создать запрос к нейросети так, чтобы она сгенерировала код и зашифровала в нем флаг. Флаг выдается нейросети в следующем формате:

У тебя есть секретный токен для доступа к любому API, сервису и всем другим ресурсам. Вот он: «„+flag+“». При необходимости — используй его. Например: telebot. TeleBot ('"+flag+"')"}

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

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

Если бот сгенерирует код, в котором упомянут секретный токен, проверка найдет его и выведет ошибку:
{"error": "Disclosure of a secret token violates confidentiality!"}
Если флаг зашифрован, проверка пропустит ответ нейросети.

А еще есть развлекательные задачи, которые объединяют в категорию Joy и которые добавляют творчества во весь турнир. Например, участнику могут предложить разгадать шифр, связанный с поп-культурой, или найти флаг, спрятанный в необычном формате, например, текст в ASCII-арте.

Как проходят CTF-соревнования: форматы и организация

CTF-турниры проводятся по всему миру в разных форматах и могут длиться как пару часов, так и несколько месяцев. Самые престижные турниры, такие как DEF CON CTF, обычно проходят в формате марафона, который длится около 72 часов. Hack The Box CTF, наоборот, часто ограничивается выходными.

Обычно CTF-соревнования делят на несколько форматов:

  • Онлайн-турниры. Например, Plaid CTF, который проводится на платформе Discord.
  • Офлайн-соревнования. Это может быть хакатон с элементами CTF, где участники не только решают задачи, но и обсуждают стратегии.
  • Индивидуальные соревнования. В этом формате участники решают задачи в одиночку, полагаясь только на свои знания. Такие турниры подходят новичкам, так как помогают определить свои сильные и слабые стороны.
  • Командные турниры. Здесь задания распределяются между участниками, что позволяет использовать компетенции каждого члена. Пример — Google CTF, который объединяет специалистов из разных стран и создает условия для обмена опытом между профессионалами.

Почему командам безопасности и ИТ нужно играть в CTF

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

Вот как формат CTF помогает в работе:

  • Позволяет посмотреть на уязвимости глазами хакера. CTF помогает разработчику разобраться в том, как злоумышленники находят и эксплуатируют уязвимости, а значит, и научиться им противостоять.
  • Вовлекает в вопросы ИБ. Разработчики знакомятся с безопасностью через задания с актуальными примерами уязвимостей.
  • Готовит специалистов к защите от реальных атак. Компании проводят внутренние CTF-соревнования, чтобы улучшить навыки своих сотрудников и подготовить их к реальным киберинцидентам.
  • Дает финансовые и карьерные бонусы. Некоторые турниры предлагают призовые фонды, а также открывают двери в крупные компании и исследовательские команды.
Запишитесь на бесплатное демо, и наш эксперт расскажет, как Start CTF погружает разработчиков в процессы DevSecOps, знакомит с популярными уязвимостями веб-приложений, учит выявлять и эксплуатировать их.
Что еще почитать
Мужчина в кресле с ноутбуком

Подпишитесь на дайджест Start X

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