Новости C.I.P.H.E.R. 5 : как это было.

Progressor
, 11 июля 2009

В ночь с четверга на пятницу, 9 июля, прошел ежегодный контест C.I.P.H.E.R. под номером 5. И в нем мы заняли пятое место.

В этот раз игровой образ весил больше 5 гб и распространялся через торрент. Организаторы вывесили ссылку на торрент за сутки, мы спохватились за 7 часов до начала игры. Начали качать с зеркала ХакерДома, но все равно не успевали. Тут нам помогли товарищи из Кевы, которые уже стянули образ в Томск, за что им большое спасибо.

Итак, на улице отличная погода, тепло, мы сидим в маленькой 203, жарко. Окно настежь, мошек - тучи. Эта мошкара была самым главным негативным фактором! У нас имелся термос, чайник, чипсы, всякие печеньки и даже колбаса. Но как-то потом стало не до этого всего...

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

Порыскав по сервисам, не найдя среди них сервисов "с одним большим недостатком" (написанных на ruby, прим. автора), обнаружив один недостающий сервис (который вообще надо было стянуть у других команд и заставить работать на своем образе), я остановился на сервисе cicero. Написан на питоне, очень маленький, функционал минимальный: store - разместить данные - они назывались поэмами, retrieve - получить поэму по имени, list - получить имена всех поэм. Сразу появился эксплойт в эдвайзори на получение всех поэм - делаем list, потом в цикле retrieve по именам поэм. В обычном сервисе, где скорее всего флагами являлись сами поэмы, такой эксплойт прокатил бы на ура. Однако здесь не понятно было, что есть флаг. Потом выяснилось, что поэма - это закодированный base64 звуковой файл wav. После препарирования одной поэмы виндовой медиа-плеер мне раскрыл тайну, что есть флаг. Флаг был записан голосом в файле...

Кинулись на поиск софта, который бы распознал нам эту речь, не нашли ничего подходящего, и мне пришлось заняться очень муторным делом. Прослушал запись, выписал на бумажку 32 символа флага и начал создавать сэмплы для каждого символа [0-9a-f]. Выдернул тишину между звуками - она имела довольно регулярный вид в шестнадцатиричном представлении. Понавырезал кусочков с произносимыми цифрами и, ориентируясь на тишину до и после цифры, стал вырезать уникальные строки для каждой цифры. Это дело, не гарантирующее результата, производимое в буквальном смысле на слух и на глаз и очень критичное к ошибке, заняло у меня больше часа. В итоге получили 16 файлов 0.sample - f.sample, соответствующих каждой шестнадцатиричной цифре в этих поэмах. Затем Дима стал писать эксплойт, который бы искал эти сэмплы в поэме. Не обошлось без трудностей, однако в итоге эксплойт научился переводить поэму в 32-символьный флаг! Отправили advisory, жюри нас похвалило. Но тут обнаружилась досадная проблема. Каждая поэма весит 700 кб, получение одной поэмы в среднем несколько секунд - да, мы получали кучу флагов, но 99% этих флагов были уже просроченными. В итоге под конец игры от нас шел мощный спам настоящими, но просроченными флагами на жюри. Обидно, запостилось всего 20 флагов. Однако, учитывая, что за всю игру было захваченно всего 39 флагов с этого сервиса, то мы очень даже круто его поэксплуатировали:)

Ну и вот, как обычно, занимаясь своим сервисом, я совсем не видел, чем занимались другие. Вовка занимался реверсингом и после игры отзывался об этом сервисе хорошо - мол, удачное сочетание реверсинга и сишного кода. Леха раскопал логику сервиса с говорящим название trajan - там было про торговцев и покупателей. Торговцы анонсируют услуги и продают товар, покупатели соответственно покупают. Фишка была в предпочтении покупателями определенного торговца и надо было написать бота-торговца, который бы натуральным и наглым образом демпинговал на рынке, привлекая покупателей:) Еще один сервис - brutus - вроде бы был нашим основным поставщиком флагов. Там надо придумать, как грамотно провести брутфорс и выцепить флаги с соперников.

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

В общем, в течение ночи мы побывали и на втором месте, и пообгоняли ХакерДом, но в итоге ХакерДом рванул вверх, а мы остались на пятом месте. В этот раз мы долго раскочегаривались. Начало было никудышным, но через пару часов команда собралась и начала достойно играть. Я считаю, что соотношение затрачиваемых усилий и результата довольно хорошее:)

Спасибо Lexi Pimenidis и другим организаторам за хорошую игру! Было весело и интересно:) И спасибо ТГУ за поддержку команды SiBears.

И спасибо всем медведям:) Молодцы! (Напишите что-нибудь тоже))

P.S. Вот финальный скорборд.