1. Главная страница » Компьютеры

Ctf соревнования как готовиться

Автор: | 16.12.2019

Если вы подумали, что я вам расскажу о великом «мочилове» в каком-нибудь крутом 3D-шутере, или дворовой игре с палками и тряпками — вы ошиблись. Речь пойдёт о соревнованиях в области компьютерной безопасности. В России.
Немного справочной информации:

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

Цель игры — обеспечить работоспособность своих сервисов, защитить флаги (некоторую информацию на сервере), захватить флаги противника. Тоесть по сути задача сводится к:

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

ОС на сервере, языки на которых будут написаны сервисы и тд. заранее неизвестно.
Соревнование длится обычно 7-8 часов.
Игра производится как локально, так и удалённо через интернет.

Собственно говоря CTF в России:

Что бывает страшнее русского пьяного хакера?:)
В России проводятся следующие соревнования:
UralCTF — с 2006 года суровые уральские студенты и аспиранты УрГУ и сборной Челябинска проводят соревнования регионального масштаба.
Официальный сайт UralCTF.

В 2008 году, при поддержку УрГУ и ряда спонсоров, команда HackerDom провела первые открытые межвузовские соревнования по защите информации RuCTF 2008. Тогда в соревновании приняло участие 9 команд.
В 2009 году заявку на участие в RuCTF 2009 подало уже 31 команда! Соревнование проходило в два этапа. Сначала проходил удаленный отборочный тур RuCTF Quals, на основании которого было отобрано 16 команд. Они прошли в основной этап соревнования, который происходил очно в УрГУ. Победила команда SiBears.
Официальный сайт RuCTF.

Читайте также:  Iphone 8 64gb м видео

27 июня 2009 года в ТТИ ЮФУ прошли первые на юге России состязания такого рода — UfoCTF 2009. Принимало участие 4 команды. В одной из них был я. 🙂
Официальный сайт UfoCTF.

Там в CTF играют давно. На Defcon, крупнейшем в мире съезде хакеров, проходящем каждый год в Лас-Вегасе, CTF является одной из самых любимых частей.
К примеру, Defcon 2009 Quals — удаленная игра, которая длится двое суток. По сути является отборочным туром, по результату которого отбирается 9 команд со всего мира, которые едут в Лас-Вегас на очный тур. Счастливчики побывают на Defcon’e!
Официальный сайт Defcon CTF.

Так же очень популярны C.I.P.H.E.R и UCSB iCTF. В них могут принимать участие только студенты и аспиранты 🙂 Соревнования происходят удалённо по интернету.

Теперь как наши участвуют в международных онлайн соревнованиях на примере двух команд — HackerDom и SiBears:
Обе команды участвуют в UCSB iCTF, C.I.P.H.E.R. и DEFCON.

2007 год, C.I.P.H.E.R.(3) — HackerDom 12/26 место.
2008 год, C.I.P.H.E.R.(4) — HackerDom 1/31 место. SiBears — 21/31.
2009 год, C.I.P.H.E.R.(5) — HackerDom 2/34 место. SiBears — 5/34 место.
2006 UCSB iCTF — HackerDom 19/25
2007 UCSB iCTF — HackerDom 3/36, SiBears — 10/36.
2008 UCSB iCTF — Sibears 2/39, HackerDom — 4/39.
2008 DEFCON — HackerDom 24/372
2009 DEFCON — 50/224 HackerDom, SiBears 55/224

Помимо этих двух команд в соревнованиях участвует ещё много команд с России. К примеру, на C.I.P.H.E.R.(5) из 33 команд — 12 русских. Скоро это станет русским соревнованием! 🙂

Подводя итог, могу сказать лишь то, что чертовски приятно, что CTF в России есть, и что он развивается! И чертовски приятно во всём этом участвовать!
В моём университете культура CTF только зарождается… Но мы приложим все усилия, чтобы это развить не только на уровне нашей команды, но и на уровне всего университета.

PS: Это мой первый пост тут, к тому же блогингом никогда не занимался, поэтому хотелось бы услышать объективные замечания, чтобы в дальнейшем не тянуть ошибки из поста в пост. Дополнительные вопросы по теме приветствуются. 🙂

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

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

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

Symantec Cyber Readiness Challenge — это турнир для IT-специалистов. Задача — научить вас думать как хакер, чтобы затем можно было противостоять угрозам безопасности, нависающим над вашей компанией (на турнире – придуманной, но потом знания пригодятся и в реале). Для начинающих это возможность разобраться, как всё работает, для опытных — отличное развлечение. Основная цель мероприятия — образовательная.

Предметная область

Итак, для начала надо разобраться с тем, что это турнир для техспециалистов, не для руководящего персонала точно. Ну, и не для тех, кто занимается далёкими от сетей вещами, веб-сайтами, например. Системные администраторы и системные программисты найдут очень много интересного для себя.

Спектр знаний (если вы знаете — вам будет комфортно и весело играть, если разбираетесь не до конца — сможете обучиться в симуляторе):

  • Общие знания сетевого взаимодействия (TCP/IP, сетевые приложения).
  • Стоит знать Unix-подобные системы (у нас можно играть и на компьютере c Windows, правда, будет чуть сложнее).
  • Технический английский будет полезен.
  • Понимание приложений для работы с DNS, FTP, SMTP и вообще принципов работы этих технологий.
  • Если вы хоть раз поднимали Apache — это сильно поможет.
  • Часто попадаются задачи на популярные CMS, типа WordPress. Добавьте в закладки форумы по ним.

Обычно попадается много задач на social engineering: стоит прогуглить и повторить эту тему, если вы не ощущаете в себе силу джедая.

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

Советы по софту на турнир

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

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

По ходу турнира можно пользоваться Интернетом. Много ценной информации лежит на разных форумах системных администраторов, поэтому рекомендуем найти пару таких и зарегистрироваться, чтобы не заполнять формы пароля-логина на турнире, и сразу знать, где и как искать. Это займёт 15-20 минут, зато принесёт вам кучу опыта (ни за что не поверю, что вы не прочитаете там пару тем) и сэкономит 2-3 минуты на турнире.

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

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

CTF (capture the flag или захват флага) — это командные соревнования по информационной безопасности и системному администрированию, проходящие в двух форматах.

В формате task-based (или jeopardy) игрокам предоставляется набор тасков (заданий), к которым требуется найти ответ и отправить его. За верно решённый таск команда получает определённое количество очков.

Другой формат CTF-соревнования — classic (либо attack-defense). Каждая команда получает выделенный сервер или небольшую сеть для поддержания её функционирования и защиты. Во время игры команды зарабатывают очки за корректную работу сервисов своего сервера и за украденную информацию (она же — «флаги») с серверов соперников.

22–24 ноября, Москва, от 0 до 25 000 ₽

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

В этой статье мы обсудим следующий таск:

Инженер сайта acme.org запустил новый сервер для панели администратора по адресу http://104.236.20.43/. Он абсолютно уверен, что сервер невозможно взломать, кроме того, когда считывается файл с флагом, ему приходит уведомление. Он отметил, что используется стандартная страница Apache, но она была оставлена намеренно и не доставит проблем.

Ваша цель? Прочитайте флаг!

Анализ веб-сервера

Прим. перев. Идёт разбор таска с h1-212 CTF 2017 года, поэтому ссылки уже не работают. Но если есть желание, можете развернуть сервер самостоятельно, взяв исходники отсюда.

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

Затем мы проверяем сайт acme.org, но это ни к чему не приводит.

Стоит упомянуть принцип работы виртуального хостинга: он проверяет значение заголовка host в HTTP-запросе, т. е. сопоставляется имя хоста с соответствующим сервером. При этом имя хоста у нас уже есть — acme.org.

Следующим шагом нужно найти панель администратора. В первую очередь стоит попробовать отослать запрос с именем хоста admin.acme.org, но сделав это, мы получаем пустую страницу. Альтернативный способ решения проблемы — отредактировать свой /etc/hosts, добавив в него 104.236.20.43 admin.acme.org. Таким образом, когда мы будем пытаться посетить admin.acme.org, сервер перенаправит нас на правильную страницу.

Исследование ошибочных конфигураций и их исправление

Верно настроив виртуальный хостинг и посетив нужный нам сайт, мы обнаружили пустую страницу и получили куки admin=no.

Самым очевидным следующим шагом будет подмена параметра admin у куки на yes, но в ответ мы получаем HTTP 405, т. е. метод не разрешён. Значит, нам нужно найти верный HTTP-глагол и послать его серверу.

HTTP-глагол или метод HTTP используется для указания действия, которое нужно совершить веб-серверу. При посещении сайта мы в первую очередь отправили самый распространённый запрос GET. Чтобы изменить запрос или используемый метод, можно использовать либо Burp Suite Repeater, либо cURL. В первую очередь попробуем самый очевидный запрос — POST.

В ответ на запрос придёт другая ошибка — HTTP 406 Not Acceptable («неприемлемо»). Это означает, что тип контента, который мы отослали, не принимается сервером. В Burp мы можем задать тип контента, добавив content-type: example/example к нашему запросу, а затем менять example/example на разные значения, пока не получим положительный ответ.

Немного погуглив разные типы контента (application/html, text/xml и т. д.), можно найти подходящий — application/json. На такой запрос мы получим следующий ответ сервера: <“error”:<“body”:”unable to decode”>> с ошибкой HTTP 418.

Использование уязвимостей

Наконец-то мы можем послать данные серверу. Чтобы понять, что именно нужно отправить, для начала попробуем запрос с данными <“test”:”test”>, на который сервер ответит следующим образом: <“error”:<“domain”:”required”>> .

Мы сдвинулись с мёртвой точки. Теперь мы знаем, что нужно отослать веб-адрес в параметре domain. Для начала попробуем отослать имя хоста acme.org — <“domain”:”admin.acme.org” >. В ответ получим следующее: <“error”:<“domain”:”incorrect value, .com domain expected”>> .

Сейчас можно попробовать сменить домен верхнего уровня на .com. В ответ на новый запрос мы получим следующее: <“error”:<“domain”:”incorrect value, sub domain should contain 212">> .

Мы можем сменить admin на 212.acme.com, и наконец-то получим в ответ <“next”:”/read.php? >.

Откроем новую страницу сайта, введя её полный адрес admin.acme.org/read.php? > <“data”:““>.


Это указывает на то, что если мы подберём правильное значение поддомена, то сможем получить другой ответ от сервера. Перейдём на google.com и попытаемся найти обманку для сайта по маске 212.*.com. Для этого в строке поиска введём site:212.*.com. Появится несколько вариантов, из которых в итоге был использован 212.njzhuoding.com. Отправляем запрос на адрес admin.acme.org и в ответ получаем: <“next”:”/read.php? >.


Посетив новую PHP-страницу, обнаружим закодированный в Base64 ответ, расшифровав который получим HTML-код. Это означает, что, во-первых, эта конечная точка запрашивает информацию у сервера, а затем кодирует всё в Base64 перед тем, как разместить её на веб-странице admin.acme.org. Во-вторых, у нас есть возможность использовать SSRF-уязвимость. В-третьих, нам нужно обойти требования к поддомену и к домену высокого уровня .com, если мы хотим использовать эту конечную точку для получения флага.

SSRF (server side request forgery) — это эксплойт, с помощью которого можно заставить уязвимое приложение сделать запрос на предоставленный URL. Так можно получить доступ к внутренним службам или данным, недоступным для обычного пользователя.

Для начала нужно найти способ обойти требования к поддомену и домену высокого уровня. Одним из способов будет использование символов перевода или разрыва строки (CRLF — carriage return line feed), чтобы в запросе было несколько строк. Это позволит удовлетворить требованиям и заставит сервер обрабатывать каждую строку запроса в отдельности.

CRFL-символы используются для обозначения конца строки. Так как сервер использует дистрибутив Linux, мы можем просто использовать LF или
для создания новой строки.

Пример такого запроса: 212.
acme.org
.com. Сервер это расшифрует следующим образом: сначала он отправит запрос на поддомен 212, затем запрос на acme.org, а затем на домен верхнего уровня .com. Важно отметить, что каждый запрос заставляет id-номер увеличиваться на единицу. Запрос, упомянутый ранее, сформирует три новых id, по одному на каждый запрос. Если мы пошлём запрос <“domain”:”212.
acme.org
.com”>, то в ответ получим <“next”:”/read.php? >.

Чтобы увидеть ответ от acme.org, нам нужно вычесть единицу из id-номера >. Посетив эту страницу, мы обнаружим, что она закодирована Base64, как и ожидалось. Сейчас мы можем перейти к более лёгкой части таска — использованию SSRF.

Использование SSRF и получение флага

Так как теперь нам не нужно беспокоиться о требованиях к домену верхнего уровня или поддомену, можно попробовать обратиться к локальному хосту по порту 80, например, вот так: <“domain”:”212.
localhost:80
.com”>.

Декодировав ответ из Base64, мы, как и ожидалось, получим дефолтную страницу Apache. Более того, это подтверждает, что мы получили доступ к локальному окружению. Возможно, флаг находится на том же месте, что и фальшивый флаг, но на внутреннем порту. В первую очередь стоит попробовать распространённые порты, такие как 8443, 8080, 443 и 22.

Для проверки портов будем использовать тот же формат, что и для 80-го порта. В расшифрованном ответе с 22-го порта получаем версии SSH и OS, а также сообщение о несовпадающих протоколах. Все порты, кроме 22-го и 80-го, приводят к ответу 404, значит, скорее всего, используется какой-то нестандартный порт. Учитывая, что это CTF-соревнования, есть смысл попробовать 1337 порт, так как это хорошо известный хакерский лексикон (1337 означает «элита»). Попробовав его, получаем следующий ответ: <“data”:”SG1tLCB3aGVyZSB3b3VsZCBpdCBiZT8K”>.


Это расшифровывается как «Hmm, where would it be?» («Хммм, где же он может быть?»). Мы уже близко, давайте попробуем localhost:1337/flag, так как об этом была подсказка ранее.



Это даст нам следующее:

Декодировав сообщение, получаем наш флаг:

Мы получили флаг и успешно решили таск. Ещё можно было найти порт, просканировав все порты и проверив их ответы. Это было бы долго и довольно утомительно, но вполне реально с помощью Burp Intruder.

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

Если вам после этого райтапа захотелось попробовать свои силы в CTF, то список площадок с тасками можно найти здесь.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *