Positive Hack Days VII, день первый — quiz hunting

Обычно я публикую свои впечатления от посещения PHD или ZN в одном посте, но то были мои одиночные приезды. PHD VII — моя первая конференция в качестве специалиста offensive security и, по-видимому, не зря.

Прогуливаясь по площадке со Славой и Даней, мы искали, чем бы заняться — PHD, как водится, богат на активности и развлечения, но наше внимание привлекла викторина от Информзащиты.

Формат викторины: 180 секунд на 62 непростых вопроса из разных областей ИБ. Надо отметить, что викторина составлена действительно хорошо: от вопросов по ассемблеру и конкретики в области практического применения инструментов до «бумажной» безопасности с её отличиями между 30-ю днями и 30-ю рабочими днями. Квиз можно было пройти на большом сенсорном мониторе у стенда ИЗ или же, считав QR-код, перейти по ссылке на ресурс: https://phd.infosec.ru/.

Стоит сказать, что после SECON’2017 Слава уже шарит в том, как проходятся викторины.

Изначальный план состоял в том, чтобы отщёлкать квиз, сохранить все вопросы и надеяться на то, что они не случайно выбираются из большой базы, после чего нагуглить ответы и пройти его с высоким результатом. Запускаю викторину, таймер начинает тикать, через пару вопросов все вокруг говорят, что сеть упала. Проверяю — действительно, сети нет, а квиз как шёл, так и идёт. Стало ясно, что вопросы сохранились на клиентсайд. Иду в инструменты разработчика в Firefox, ожидая, что всё обфусцировано, но отнюдь:

В открытом виде в браузере лежат все 62 вопроса. Сохраняем страницу (5223 строки!), удаляем лишнее, выкладываем вопросы с вариантами ответа в расшаренный документ. После этого мозговой штурм вперемешку с гуглингом и вот все вопросы, кажется, решены. Заливаем PDF с ответами на ноут, идём к стенду ИЗ победоносно проходить квиз и… сливаемся. 33 балла из 62-х.

Возвращаемся работать над ошибками и обнаруживаем в коде JSON-строку, в которой просто-напросто указаны все варианты ответа в виде групп битов: например, 0,0,1,0 означает, что правильный ответ — 3. Мда, с этого следовало начинать. Парсим JSON, сопоставляем со своими ответами, исправляем ошибки.

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

Даже зная все ответы успеть за 180 секунд оказалось непросто. После пары проходов, наконец, все вопросы выучены. Два раза из двух получается набрать лишь 61 балл из предполагаемых 62-х.

Решив, что действовали по заведомо правильным ответам, стали подозревать ошибку в обработке на стороне сервера, но, по всей видимости, 62 балла набрать возможно, что спустя час доказал некто morkovchin02 (с чем его и поздравляем):

Таким образом, прямо на площадке уязвимость была обнаружена, ответственно зарепорчена разработчику, снабжённая рекомендациями, после чего был произведён PoC. От сотрудников ИЗ даже была получена bug bounty в виде отложенного на завтрашний день мерча.

Ну а по общим впечатлениям — как всегда, после второго дня.

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

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