Attack Defence CTF. Гайд для новичков

Attack Defense CTF. Гайд для новичков

Введение

Мир CTF полон разными интересными способами практики и оттачивания своих навыков.

HackTheBox, root-me, hacktory, codeby.games и многие другие площадки дают разные задачи и разный экспириенс при прохождении. Но среди всех интересных активностей большим особняком стоит именно соревновательный хакинг, о котором мы сегодня и поговорим.

Немного про CTF

Вообще, существует два вида соревновательного хакинга. Задания Jeopardy и Attack Defence. Задания вида Jeopardy - это стандартные задания, в которых вам надо сломать ресурс, получить флаг и сдать его жюри. Обычно такие задания проходят, как отборочные, а после них уже и идет пресловутый Attack Defence.

Суть Attack Defence заключается в следующем:
Мы находимся в одной сети с другими командами, всем командам дают одинаковые сервисы (будь то веб-сервисы или сервисы бинарные, все зависит от конкретных соревнований и желания организаторов). Команды ломают друг друга через эти сервисы и сдают флаги организаторам. 

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

Организация подключений к сети

Вашу команду, как и все остальные подключают в одну внутреннюю сеть.
Подключить вас могут несколькими способами. Либо через OpenVpn (или Wireguard), либо через SSH, либо через образ виртуальной машины. Все зависит от самих
соревнований (могут даже через плату Raspberry PI). В любом случае в сети у вас будет один или несколько серверов, на которых и лежат сервисы.

Если говорить про некоторые интересные моменты, то стоит выделить момент с вулнбоксом (изображение виртуальной машины). Скорее всего вам нужно будет сломать эту самую машину и в некоторых случаях повысить привилегии, чтобы запустить сервисы. Желательно перед соревнованиями посмотреть, как именно с этим работать, ибо на своем опыте могу сказать, что многие моменты крайне не очевидны и возможны торможения процесса из-за, казалось бы, очевидных вещей.

Например можно искренне не понять, почему не ставится на голый образ docker-compose. Почему не назначается IP адрес в сети после попадания на вулнбокс (спойлер, надо просто ребутнуть машину, чтобы отработал DHCP). И многие другие моменты, которые лучше понять и перенять от других людей заранее.

При этом обязательно скопируйте все сервисы себе на локальный пк, чтобы в случае чего откатить изменения. Так же желательно открывать ПАПКУ с сервисом в том же visual code, чтобы быстро перемещаться по директориям и искать нужные файлы и нужные уязвимости.

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

Что нужно делать после входа в сеть?

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

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

В 99% случаев это будет делаться при помощи docker-compose. Вообще, на старте вам дадут так называемый Scoreboard, на котором помимо очков каждой команды будут отображаться статусы сервисов.

В идеале ВСЕ ваши сервисы должны быть зелеными (поднятыми), ибо даже за это в пассивном режиме начисляются очки.

Но вы можете спросить, а как вообще сервис может упасть?

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

Чекеры

Чекеры нужно воспринимать, как некоего бота, который имитирует действия легитимного пользователя. Каждый раунд (а он длится примерно 1-3 минуты) этот бот засылает на сервис флаг, на следующем раунде его проверяет, если все сходится, то сервис работает корректно.

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

Эксплоиты

Выше было упомянуто, что раунд длится в среднем 1-3 минуты, и чекер постоянно ложит новый флаг. И тут возникает вопрос, а как в таком случае сдавать флаги, если они обновляются каждую минуту? Тут в целом есть два пути: ручная сдача флагов и эксплоиты

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

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

Дабы упростить жизнь еще сильнее, была придумана так называемая ферма флагов, представляющая из себя настраиваемый скрипт, который будет парсить флаг определенного формата из вашего скрипта, при этом посылая эти запросы на сервера всех команд. Т.е вам как минимум не нужно будет самим включать функционал «гуляния» скрипта по сети и парсинга флага - ферма это сделает за вас, при этом еще и самостоятельно отправит эти флаги организаторам, да еще и статистику предоставит. (самой популярной фермой является Destructive Farm)

Сниффер трафика

Т.к вы будете с другими командами в рамках одной сети - вы сможете перехватывать трафик, который по этой сети гуляет. Объективно, можно набраться опыта на Attack Defence только регулярно их посещая, поэтому на первом этапе вам будет достаточно тяжело писать эксплоиты и находить уязвимости, поэтому хорошим вариантом будет смотреть траффик и наблюдать, какими запросами другие команды воруют друг у друга флаги, например, можно будет увидеть готовый SQL запрос, который вы попробуете повторить на других командах и тоже начать собирать флаги.

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

Заключение

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

Телефон: +7 499 444 17 50 | 8 800 444 17 50 бесплатно по России | E-mail: [email protected]
Все курсы Партнерам Возврат Контакты