Новости Отчеты и впечатления от игры DA-Op3n

Progressor
, 07 September 2008

В субботу у команды Томского Государственного Университета намечалось очередное грандиозное событие - участие в международном CTF 2008, проводимом Дармштадтским университетом (Германия) - DA-Op3n.

С утра мы начали усиленно готовиться. Вовка заехал за мной на веле и мы поехали кататься по городу. По пути мы встретили несколько других членов команды, которые также усиленно готовились к предстоящему действу - они гуляли и наслаждались видом Томи. В общем, к началу цтф мы подошли без ничего но со свежими силами:) Ближе к вечеру мы с Вовкой традиционно подкрепились в Чинарке, зашли в магазин и затарились едой на ночь.

В 19.30 мы были в универе. На входе некоторое время ушло на разговор с охранниками, все благополучно разрешилось. На втором этаже нас уже ждали другие члены команды. Открыли 203, сложили на подоконник продукты, установили чайник и кофеварку, стали настраивать компы. Пришел Димка с работы, поднял маршрутизацию, появилась сеть. На сайте цтф у нас с вечера пятницы все также висел connection error тестового образа, хотя до этого там было running. Ну, убедившись, что все работает, мы решили, что они просто заморозили страничку эту. Итак, цтф начинался в 11 вечера, в запасе оставалось еще больше двух часов, народ расслабился.

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

Я очнулся, когда до начала оставалось 20 минут. Тут у меня в предвкушении забилось сердечко, двоякое чувство - как перед экзаменом, но в то же время весело. На всех компах уже лежал зашифрованный игровой образ, которым мы даже с ТУСУРом поделились (они его видать не скачали заблаговременно). На канале в мирке весь вечер висело мнооога народу, болтали на английском, ждали начала игры. На сайте у них была ссылка на страничку с обратным таймером до начала. И вот таймер дошел до нуля… и из обратного превратился в прямой:) В мирке hc - это главный информатор (да и вроде главный организатор) - запостил ключ от игрового сервиса. Начали расшифровывать. Сначала зашифрованный файл превратился в гиговый архив, который потом развернулся в восьмигиговый образ. Это заняло несколько томительных минут.

И вот перед каждым предстала игровая система - FreeBSD. Пароля к ней не дали. Ну, не сразу дали - сказали, чт очерез 20 минут в мирке скажут пароль:) В общем, пришлось его сбрасывать как обычно и ставить свой. Сделали. Логинюсь, лезу в /home. Там несколько директорий, вроде как сервисы. Но что-то какие-то не такие они там были. Некоторые ваще пустые, только скрытые файлы и все. Среди этих файлов, кстати, были файлы истории вводимых команд .history, которые оказались незатертыми:) Полазив в них, среди всяких cd и vi (кстати, только vi был, даж nano не было), обнаружился переход в директорию /usr/services. Там они и лежали, сервисы наши родимые. Пошел туда, обнаружил несколько сервисов, среди которых глаз сразу выхватил знакомое слово - irc :))) В основном все на питоне было. Еще ява, немного си. Полазив по сервисам, ничо интересного с первого взгляда не нашел, немного расстроился, что почти все на питоне. А время-то тикало. Тут Вовка на доске написал список сервисов и опросил народ, кто чем займется. Ну я вяло так заявился на irc - все к сердцу ближе:)

В общем, irc - это single IRC server, ирк-сервер, написанный на питоне. Здоровеееенный, со всеми положенными ChanServ, NickServ, HelpServ и прочими товарищами. Удовлетворяющий RFC. В директории было три интересных файла: irc, sirc и services.db . sirc - это сам ирк-сервер, irc - это файл, запускающий сервер на ожидание клиентов, services.db - некая база данных, в которой было нечто, подозрительно смахивающее на связки идентификатор-флаг.

Я начал просматривать код сервера. Опеределение команд различных сервисов ирк-сети - чансерва, никсерва.. У чансерва мелькнули строчки обращения к базе данных каналов - подумал, что можно попробовать сделать инъекцию, создав в сети канал с хитрым именем, если в имени канала не фильтруются спецсимволы, хотя это маловероятно. Далее взгляд выхватил строку, в которой чансерв что-то пишет в фиксированный канал - #irclogs. Это уже точно не входит в функциональность ирк-сервера. Причем, пишет он туда что-то вроде логов всех действий, происходящих в его сети. Тут ко мне подошел Саня, который тоже копал ирк (но он вроде копал другой сервис - studbot, он тоже был завязан на ирк-сеть) и показал мне в икс-чате, как коннектиться к серверу других команд. Приконнектились. По-моему, к ENOFLAG. набрали /list. Выскочило 3 канала - два канала - это от сервиса studbot, а третий - его название очень смахивало на идентификатор, а топик - на флаг! Мы с Сашкой обрадовались, постим вручную этот флаг, но скорбот говорит, что флаг уже недействителен. На самом этом канале висит пользователь root со статусом опа. Далее примерный диалог (по памяти):

<+SiBears|JK> hello

<@root> hi

<+SiBears|JK> :)

<@root> :)

<@root> are you also have your flags not valid?

<+SiBears|JK> yes, I think

<@root> ok;)

В общем, это была обманка:) Это они так прикольнулись. Тут у меня в голове созрело несколько фактов. Во-первых, вспомнил про #irclogs. Во-вторых, он не отобразился при /list - значит у него включена опция +s - секретный. Втретьих, очень удобно было бы использовать и другие секретные каналы для размещения флагов (сначала я думал, что флаги будут кому-нибудь в приват сыпаться). Эту идею с каналами-флагами в мирке я кстати намеревался воплотить в тренировках SiBears, только писать для этого свой ирк-сервер - это для меня было бы неоправданно сложно, я хотел проскриптовать готовый ирк-клиент. И вчетвертых - раз при /list отобразился этот странный хитрый канал с топиком-флагом - значит, точно обманка:) Джойнюсь на канал #irclogs. Там висит ChanServ, топика нет. Хорошо, раз тут чансерв, значит точно что-то произойдет. Кстати говоря, икс-чат у нас в стандартной тренировочной системе в 203 не установлен, я его из привычки к мирке установил перед игрой, не подозревая, что он сильно пригодится:) В ожидании событий на #irclogs я вернулся к дальнейшему анализу кода сервера.

Ковыряюсь, ковыряюсь, тут вижу, покраснела вкладочка #irclogs в икс-чате. Смотрю, что произошло. А там чансерв выдал в канал фразу типа: такой-то_корявый_ник JOINED такой-то_корявый_канал. Название канала похоже на идентификатор флага. Захожу туда - в топике нечто, очень похожее на флаг. Неткатом к скорботу, вручную вбиваю родную строчку reportflag(17,” , копирую туда флаг из топика, “) , жму ентер - и получаю ответ - типа ваш флаг принят, у вас 3 offensive points! Отлично, значит мы нашли флаги в этом сервисе. Минут за 10 до этого Макс с Женькой нашли флаги в каком-то другом сервисе и запостили вручную два флага оттуда - мой третий. Хорошо, хорошо, думаю, как бы это автоматизировать. Икс-чат, я с ним дома не работал, у него скрипты на том же питоне… Дома у меня мирка, скрипты для мирки я писать люблю, только где ее взять-то, мирку. Поворачиваюсь назад - у меня за спиной сидит Вовка, у него на компе загружена винда, в ней запущен вмваре-сервер с игровым образом - и мирка, в которой мы общались на канале игры еще до старта! Отлично, поменялись компами с Вовкой, я сел за родную мирку. Первый вариант действий - делать /list, собирать оттуда топики. Не прокатило по двум причинам - каналы секретные и вообще живут недолго (бот, создающий канал, очень быстро его покидает, канал без посетителей не отображается). Второй вариант - скрипт, который бы реагировал на сообщения чансерва на канале #irclogs, заходил на соответствующие каналы, брал оттуда топики и складывал их в один файл.

Тут встала проблема - автоматически выцепить топик канала. Об этом я как-то при написании скриптов раньше не задумывался. Стандартная команда типа /topic в мирке - только меняет топик на новый. Тыкался, тыкался, полез в гугл, полез в рфц. Команды в мирке, тупо возвращающей топик канала - нет (ну, я не нашел). И тут я вспомнил про “сырые события”, raw events, доводилось как-то использовать их раньше. В общем, можно было вешать обработчик событий на “низком” уровне, на уровне протокола irc. Нашел список кодов сообщений от сервера, нашел там код 332 - ответ сервера клиенту RPL_TOPIC при запросе TOPIC. А запрос TOPIC клиент отсылает при присоединении к каналу. Отлично. Набросал скрипт, получил первые флаги в файле. Теперь встал вопрос их отправки на сервер. Был скрипт отправки флагов, но был он на баше. Нужно было под винду. Стали переписывать его на пхп - Илюха с Вовкой вроде написали, но какая-то ошибка все время обламывала нас, скорбот не принимал флаг, хотя по логам скрипта вроде все работало корректно. Фиг с ним, Димка переписал на питоне. Заработало:) Флаги постились, правда в полуавтоматическом режиме. Но уязвимость эта на виду, легко устраняестя (что мы ессно сразу сделали), ее потом описали в advisory. Кстати, когда я нашел эту дыру, встала дилемма - писать эдвайзори или писать скрипт:) Решили - скрипт. Ну вот, в общем. К концу игры почти все уже закрыли эту дыру, поток флагов иссяк. Вот в таком творческом напряжении прошла игра для меня.

Кстати, поскольку мирка изначально была запущена для благих целей общения на канале игры Вовкой, то ник там был SiBears|Argenet. Когда я туда сел тырить флаги - ник сменить не удосужился. В итоге от имени Аргенета из команды SiBears тырил у всех флаги “ваще беспалева”:))) Ну и вот, на протяжении всей работы в моей мирке был открыт канал daopen и ближе к утру я решил заглянуть туда. Пробежался взглядом по последним строчкам - и неожиданная догадка врезалась в мозг. По регламенту, за полчаса до конца разрешались хитрые дос-атаки. в 4.20 по нашему в мирке hc сказал, что через 10 минут можно начинать досить. Я увидел это в 4.40. Мы с самого начала думали, что игра закончится в 6.00. Выходило, что в 5.00. Примерный диалог на канале:

[04:40] <SiBears|Argenet> 20 minutes to the finish, am I right?

[04:40] <@hc> correct

Тут я заорал на всю аудиторию, что осталось всего 20 минут, а не час и 20 минут. В принципе, это нас устраивало, у нас как раз шла напряженная гонка с HackerDom’ом, мы их чуть-чуть обошли, отрыв колебался в пределах двух процентов, но это нас несказанно вдохновило, ведь наши товарищи с Урала весьма искушенные во всех этих делах и очч здорово, что мы играли в ногу с ними. Я переключился на ту страничку сайта, где тикал таймер и объявлял периодически время до конца. Рядом со мной Димка показал Вовке, как можно хитро повесить шелл чужой команде, правда, ввод команд на одном терминале, а вывод - на другом:)) Зато отлично работает, и причем у многих команд. А поскольку времени осталось меньше получаса, недеструктивные дос-атаки разрешены, то мы принялись забрасывать перловыми форк-бомбами другие команды:) Кстати, из-за того, что где-то в середине игры мы поторопились кинуть форк-бомбу раньше времени, с нас сняли 1% rule compliance, осталось 99%. Ну это мелочи. В общем, я подозреваю, что в генеральном плане организаторов последние полчаса игры значились как “МЯСО”:))) Были моменты, когда почти вся таблица состояний сервисов была красная от сообщений об ошибках.

И вот, минута до конца, 10 секунд, 5, финиш!!!! Мы на пятом месте, 56,30% , на 1,56% обошли HackerDom!! Супер! До начала игры у нас ставились планы - план-минимум, план-максимум - но мы перевыполнили план в разы:) В мирке начался стеб разгоряченных участников игры:) Всем понравилось, все взбудоражены. Игра прошла на высоком уровне, все круто. Мы еще немного там поболтали, всем спасибы сказали:) Хакердомовцы сказали, что мы заслужили свое пиво:) Кева чо-то гнать нереально начала на канале, ну и фиг с ними. Еще немного поболтав с другими командами и организаторами, выяснив, что детальная статистика будет на следующий день, еще раз сказал всем спасибо за игру и вырубил комп. В это время народ у нас скачал фильм, “Достучаться до небес”, время шестой час утра, врубили проектор и устроили киносеанс. Потом собрались, вернули позаимствованные стулья в 430, убрали остатки еды и пошли на выход. Настроение - отличное! Чувство выполненного долга, немного усталости, эйфория:)

Вышли ранним утром из стен родного универа, после бессонной, но плодотворной ночи, с пятым местом в кармане и пошли домой пешочком:) SiBears! Всем спасибо, игра была просто отличная:)