Что такое CTF и с чем его едят?

Что такое CTF и с чем его едят?

Henry Rozenttag @herrlestrate

Специально для @ctfby

Вообще, проще всего начать с определения CTF:

Capture The Flag (или, на русском, Захват Флага) - пришёл к нам из достаточно популярных игр, вроде Quake или даже из Пейнтбола. Основная задача подобных игр - захватить вражеский флаг и принести его на свою базу. Одновременно с этим - защитить свой от противника.

В компьютерной безопасности термин CTF стоит воспринимать следующим образом:
Есть определенная информация (называемая флагом). В реальной жизни на месте флага может быть всё что угодно, начиная от пароля вашего аккаунта и заканчивая данными вашей карточки. Чаще всего представляет из себя регулярное выражение, вроде такого: [0-9A-Z]{31}=, CC{[\x20-\x7A]+}, flag{[a-zA-Z0-9_]+} или других.
Пример: flag{this_is_flag}, ABCBCBCBCBC1337= и так далее.
Задача вашей команды - украсть такую информацию у противника и защитить свою.

Capture The Flag делятся на 2 категории: Attack/Defence (или, называемую классическим CTF соревнованием) и Task-based(aka Jeopardy или Своя Игра).

Проще начать с Task-based типа соревнований.

Такие соревнования представляют из себя микс задач на различные тематики. Например: Crypto (криптография), Web (уязвимости сайтов), Pwn (уязвимости в коде приложений), Reverse (реверс-инжиниринг, или поиск уязвимостей без исходного кода), Misc (категория для проверки ваших общих знаний/навыков. Чаще всего представляет из себя сборную солянку из различных тематик пониженного уровня сложности) и многое другое. Задача считается решенной, если была получена необходимая информация (aka флаг), например flag{wow_u_found_m3}.
Участникам необходимо решить как можно больше задач в этих категориях. Больше решил - больше баллов - выше итоговое место.

С Attack/Defence соревнованиями всё немного не так.

Каждой команде предоставляется выделенный сервер (машина/компьютер/называйте как хотите) с набором сервисов. У каждой команды изначально одинаковые сервисы. В ходе соревнования, команды должны найти и исправить обнаруженные уязвимости в своих сервисах и проэксплуатировать эти уязвимости на сервисах вражеских команд, добывая флаги.
Сервисы, чаще всего, представляют из себя Web сайты, с предоставленным исходным кодом (на самом деле, есть вид сервисов, где исходный код не предоставляется. Тогда командам приходится декомпилировать сервисы, а потом снова их собирать).

Примеры

Разбирать некоторые типы задач мы будем на примере сервиса электронной почты.

Начнём с Attack/Defence соревнований.
Вам предоставляется сервер с сервисом электронной почты (и даётся исходный код к этому сервису). Сервис поддерживает следующие функции:

  • Регистрация пользователя
  • Вход пользователя
  • Отправка письма от пользователя А пользователю Б
  • Проверка своего почтового ящика на наличие писем (входящих и исходящих)

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

Заголовок: Secret information
От: Даниил C#
Кому: Bob
Текст письма:
Боб, использовать циклы в продакшене очень плохая идея. Рекомендую тебе исправить это недоразумение. Больше информации ты можешь прочитать в нашей документации по адресу example.com, пароль доступа: ABCABCBABABCSHARP1337=

В данном примере интересующей нас информацией (флагом) будет текст ABCABCBABABCSHARP1337= (обычно, организаторы предоставляют информацию, как выглядит флаг. В данном случае он попадает под регулярное выражение [0-9A-Z]{21}=.

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

Вернёмся к примерам, это был пример для Attack/Defence соревнований, а теперь давайте рассмотрим варианты задач для Task-based формата.

Выберем для примера криптографию. Какого рода могут быть задачи?

Нам дано закодированное сообщение, необходимо его декодировать и вытащить важную информацию. Известно, что сообщение как-то связано с Цезарем...
Сообщение:
Рптмё нпёк тнёсуй, рспщф гбт, обипгйуё тбмбу нпйн йнёоён. Й еб, а трсаубм вфуьмпшлф цпспщёдп гйоб ф тгпёдп есфдб Всфуб, тлбзйуё ёнф хсбиф gmbh{j_mjl4_ijtupsz_3_n5di}, й по пуебту гбн ёж.

Согласно условию, сообщение связано с Цезарем...
Немного подумав, на ум приходит только одно - шифр Цезаря (подробнее вы сможете прочитать на wiki). Можно перебрать все варианты ключа (данный этап я опущу, попробуйте сделать это сами).
Перебрав все ключи, получим, что исходным ключом была единица. Тогда исходным сообщением будет:

После моей смерти, прошу вас, назовите салат моим именем. И да, я спрятал бутылочку хорошего вина у своего друга Брута, скажите ему фразу flag{i_lik3_history_2_m4ch}, и он отдаст вам её.

Флагом для этого задания будет flag{i_lik3_history_2_m4ch}.

Бонусом рассмотрим возможную задачу для тематики Web.

У нас есть поле ввода логина и пароля в электронный ящик. Необходимо получить к аккаунту пользователя Admin. Известно, что разработчик который писал сайт был очень невнимательным и не слышал про уязвимости SQLInject. А вы слышали?
Пример

SQLInject - обширная тема и я рассмотрю самый простой пример из возможных.

Давайте попробуем в поле ввода подставить символ ' и нажать Submit:

После нажатия кнопки Submit

Сайт выдал нам ошибку, когда мы ввели в поле логина '. Возможно, стоит попробовать ввести простенькую SQL инъекцию:

А после, нажмём Submit:

Очевидно, что флагом здесь будет flag{secret_password}

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

Литература

Чуть более подробно про CTF можно почитать здесь: https://ctfnews.ru/what-is-ctf/

Если вас заинтересовал CTF, то более узкоспециализированную литературу (и ссылки на сервисы, где можно порешать задачи) можно найти здесь: https://ctfnews.ru/literature/

Классный сайт, с которого я начинал своё погружение в мир CTF'a: https://kmb.cybber.ru/

Плейлист с общей информацией про всё, что может потребоваться в CTF от команды Hackerdom: https://www.youtube.com/user/h4ckerdom/playlists (да, в ссылке выше есть целая глава про их курсы)

Сайт с соревнованиями: https://ctftime.org/


Report Page