Безопасность как искусство
263,59
рейтинг
12 августа 2013 в 15:27

Разработка → Chaos Construction 2013: hackquest review-writeup

Как многие знают, на этих выходных в Санкт-Петербурге проходил фестиваль компьютерного творчества, в т.ч. на которым был hackquest (по типу Capture The Flag). Так как у меня сейчас нет личного блога, решил поделиться решением заданий здесь, думаю многим будет интересно :) в т.ч. есть были задачи, которые обсуждались на Хабре (заливка «запрещенной» музыки в ВК). Тематика была — Prism, АНБ и т.д.
Я не сохранил весь список заданий, но многие из них еще работают, восстанавливаю по памяти.

iPrism (mobile)


hack
this
secret
app

Скачиваем, находим приложение под iOS. Я не особо силен в реверсе, решил оставить на после. Но читая твиттер (полезно быть подписанным на организаторов), наткнулся на запись о сервисе hackapp.com
image HackApp is web based service, for mobile apps static security analysis. It identifies critical and suspicious information in bundle, such as:
— Certificates and keys
— Authentication secrets
— License Control
— Compilation flaws

Сервис для поиска security багов в мобильных приложениях. Грузим наш файл, он генерит по нему отчет — hackapp.com/open#e55bece90691913812ef6e0da5c8278a, находим ключ
Affected files:
— b00067.app/Defaults.plist
Plain text authentication secrets seems to be saved in app bundle

AuthTokenString:C_C_13_F_L_@_G:8204e7efa933e2521a69417c4ab2357e


Flag: 8204e7efa933e2521a69417c4ab2357e

Prismtestm (web)


Скажу сразу, что это задание я не решил. Решение спросил после у команды (Hardc0de). Переходим на сайт задания, видим вебсайт с формой, где можно заполнить адрес проверки сайта на «PRISM» (обязательно попадающий под регулярку (.*).com ). Сразу заподозрил тут SSRF (1 причина — организаторы ONSec, вторая — просто логически). Копал SSRF Bible, зарегал домен .com, натравил скрипт на свой сервер с включенным tshark — ничего, в общем, как только не бился. Решение — обходим регулярку через /?, т.е. в хост пишем
127.0.0.1:80/?.com
Заставляем скрипт коннектится к локалхосту (?.com просто вырезается в функции на сервере как URI), передаем так же &debug (который можно было увидеть в комментах html). Момент в том, что порт надо указывать обязательно, иначе ничего не заводилось. А через параметр debug нужно провести SSRF, примеры можно найти в разделе Smuggling examples (SSRF bible). И копаем.

listen2me (stegano)


To bypass PRISM guys sometime uses this technique
Flag is MD5(message_from_MP3)

Задание не решил никто. Качаем файл, определяем, что это не mp3 (по заголовкам), даем расширение архива, открываем — архив битый, внутри два файла — calc.exe и reverse_something.txt. Начинаем копать, внутри находятся заголовки JPEG задом наперед. Вытаскиваем картинку, в картинке тоже стегано. Вроде как и в ней — ключ.

Gener (web)


NSA produced high secure PRNG source

По ссылке — исходник
<?php
function reallySecureRandom(){
    $seed = (double)microtime()*1000000;

    $seed = $seed * (getmypid()>0?getmypid():1);
    $seed = $seed * (getmygid()>0?getmygid():1);
    $seed = $seed * (getmyinode()>0?getmyinode():1);
    $seed = $seed * (getmyuid()>0?getmyuid():1);
    $seed = $seed * (memory_get_usage()>0?memory_get_usage():1);

    mt_srand($seed);

    return mt_rand().mt_rand();
}
if($_COOKIE['token']===md5(reallySecureRandom())) echo file_get_contents('/tmp/flag.txt');
?>

Задача довольно ясная, нужно выставить себе куку по этому алгоритму. microtime — можем узнать через заголовок date, который отдает скрипт. pid/gid/uid — некоторые будут равны нулю, некоторые не такие большие, чтобы перебрать. memory_get_usage — запустить скрипт у себя, замерить расход памяти (при чем расход будет разный на x32 и x64). А вот с getmyinode было непонятно, так как значение действительно большое. В общем каким-то магическим образом задание решалось с $seed = 0. Т.е. код для генерации куки:
<?php
 mt_srand(0);
echo md5(mt_rand().mt_rand());


Crackme (reverse)


NSA use this program to produce a secret key.

Flags is MD5(key)
.

Не решал, реверс под macos. Все, что попробовал — прогнать через strings :)

inveter


Reverse the 480120101078 with #chaosconstructions2013.
Hackmap around are Fibonacci numbers up to the 0x10.
Hint: 480132102026 and 481214218007 fit too.

Flag is MD5(result)

Задание не решил никто. Были разные мысли, какие правильно — не уверен, так что писать ничего не буду)

CryptoMsg (reverse)


#i#<L4w1u0q)mT9Q — ????????
1evryyone lies6 — 44,~yteU<<*sZOe
1234567 — )Wj~5Kb
1234568 — *Wj~5Kc
2345678 — 1Ym$:Qi
abcdef — FX=#hP
abcdef1 — YY>$iQb
hackers — ]_D1vj_
1337hackers — |\o(pS8%j^S
hackers1337 — UcH5znct)<S
task for cryptoanalysis — !{p]]E6**ma\ND5vfI72'pe
you will never break this cipher! — q:11*saOO?&|cWW;/tWDD:$mbbG2$lSGH

Flag is MD5(????????)

Download crypt3r: ./ccrypto.jar

Нужно расшифровать первое сообщение, имея тулзу. Качаем ccrypto.jar, распаковываем через java.decompiler.free.fr, получаем исходник приложения.
Криптофукция
void encrypt() {
    int val = 0;

    this.buff = new ArrayList();
    for (int i = 0; i < this.input.length(); i++)
    {
      val = this.input.charAt(i);
      val -= 32;
      if (i > 0)
      {
        val += ((Integer)this.buff.get(i - 1)).intValue();
      }
      else
      {
        val += this.input.length() + 13;
      }
      if (val > 94)
      {
        val -= 94;
      }
      Integer Val = Integer.valueOf(val);
      if (i == this.input.length() - 1)
      {
        int temp = 0;
        temp = ((Integer)this.buff.get(0)).intValue() + val;
        if (temp > 94)
        {
          temp -= 94;
        }
        this.buff.set(0, Integer.valueOf(temp));
      }
      this.buff.add(Val);
    }
    for (int i = 0; i < this.input.length(); i++)
      this.output += String.valueOf((char)(((Integer)this.buff.get(i)).intValue() + 32));
  }
}

Я решал уже во второй день этот таск, а так как я не ложился спать и остался в клубе (ночью решал другой таск), то меня просто уже не хватило на этот алгоритм) помог друг, сосчитал вручную. Обратный алгоритм не так тривиален, как кажется, попробуйте :)

WPA / WPS (WiFi)


Объединил два задания, так как похожи, WPA
You have router at CC2013, which wants to be hacked.
Tricky admin have hidden ESSID of it's AP.
Use all your skills to penetrate in it's network

Flag is MD5(key)


WPS
There is a white box which broadcast wifi somewhere in the hack zone. You need to penetrate into it's network.
BTW some people say it supports WPS and first 4 digits of pin were saved ;) happy hacky

Flag is MD5(key)


Идем в хак-зону, грузимся с backtack и делаем все по гайдам. С WPA по стандартному словарю ключ находится за полсекунды.
Гайд по WPA — www.aircrack-ng.org/doku.php?id=cracking_wpa
На русском про WPS — habrahabr.ru/company/xakep/blog/143834 (кстати, wps не сделал, не было времени. Там просто надо было ждать успешного брута).

onside


Таски прямо на месте. Подходим, спрашиваем, говорят — нужно найти камеры, около которых есть наклейки с надписями. Нужно прочитать, что на них, и сообщить организаторам, при этом не попав на них лицом. Варианты решения — разные) Сообщают, что камер < 5
И еще один был, trivia. 5 вопросов, среди которых есть один на который я убил очень много времени — «Назовите хакерскую атаку, название которой состоит только из hex символов». Всякие dd05 или fl00d не подходят, т.е. замена не сработает. Задание решено, у кого-нибудь есть идеи? :)

USBsticks


Get a USB stick from CC2013 to find a key

Подходим, лежит куча флешек. На одной из них был flag.txt, сдаем.

И два самых интересных таска, на мой взгляд.

androface (mobile)


Unlock Android device from CC2013 hack-zone

Подходим, дают планшет samsung с android 4.1, при тебе его лочат face-авторизацией под человека с конференции. Нужно разлочить, количество попыток — 5. Находим баг


Подходим к этому же человеку, фотаем его с открытыми глазами, с закрытыми и пробуем свое счастье. С трех попыток у меня не вышло. После я развернул фотографию на 90 градусов, выкрутил яркость на ноуте на максимум — и все окей :) девайс разлочился

VKmusic (reverse)


This task is top secret and came to you directly from Edward. Since he lives in Moscow now, he would like to feel the true spirit of Russia and listen to free music on VK.
However, his favorite song is currently banned. You need to find out the mechanism of detection and upload the song.
The initial analysis showed that it is enough to replace exactly three bytes to bypass «VKAF».
The answer to the task will be an MD5 hash of concatenated offsets in the file of those bytes.

Note: replace the lower two bytes with zeroes for each offset before hash calculation (i.e. 12345 --> 12300)
song

Эта тема уже поднималась на Хабре
Загрузка заблокированных аудиозаписей в «ВКонтакте» — habrahabr.ru/post/183554
Блокировка аудиозаписей Вконтакте. Восстанавливаем плейлист — habrahabr.ru/post/183470
В т.ч. там в комментах есть упоминание на выступление, где рассказывается про проверку загруженных записей. Посмотрев видео становится понятно, что проверяются конкретные универсальные байты (т.к. фаззинг с подменой байт в центре, в конце ничего не дал) для всех типов файлов. Организаторы написали, что нужно найти 3 байта и от них взять хэш — и будет ключ. Но в ночь с 10 на 11 было найдено решение всего в 1 байт, которое, к сожалению, не могу здесь опубликовать :) но дать направление — байт чисто визуальный, все данные файла сохраняются.
Качаем трек с задания (который не загружается в ВК), меняем 1 байт — вуаля, все работает.
Утром показал решение — дали флаг вручную :)

Было занято первое место и дали вот такую крутую штуку. Вроде все, спасибо организаторам, было круто :)


Награждение
Автор: @BeLove
Digital Security
рейтинг 263,59
Безопасность как искусство

Комментарии (26)

  • +2
    Молодца!
  • +1
    По поводу PHP — там переполение int'а идет, php конвертит автоматически во float. Потом обратно в int — php большой float приводит в 0.
    • 0
      Спасибо за объяснение!
  • +4
    «Назовите хакерскую атаку, название которой состоит только из hex символов»

    DEFACE может :)

    listen2me (stegano)
    To bypass PRISM guys sometime uses this technique
    Flag is MD5(message_from_MP3)

    Задание не решил никто. Качаем файл, определяем, что это не mp3 (по заголовкам), даем расширение архива, открываем — архив битый, внутри два файла — calc.exe и reverse_something.txt. Начинаем копать, внутри находятся заголовки JPEG задом наперед. Вытаскиваем картинку, в картинке тоже стегано. Вроде как и в ней — ключ.

    Ковырнул, в JPEG-е раз и два подозрительные base64-блобы:
    image

    image

    Может это «MD5(message_from_MP3)»?

    • +2
      Йее) про дефейс — верно, со стегано — думаю тру, уже не проверить.
  • 0
    а там можно было ночевать?
    • 0
      Ну я в час ночи пришел и остался прост. Таких было много, многие спали, где получится)
      • 0
        У нас на игротеке двое спали, подтверждаю.
      • +2
        С 9 по 10 осталось немного народу, а 10 по 11 спали и в главным зале, и над главным залом, и на выставке. (На выставке спать было лучше всего). Предварительно оговорённую слип-зону, однако, неадекватное руководство площадки решило закрыть.
        • +3
          Да, подтверждаю! На выставке / Гейм-зоне было самое оно. Тихо и уютно ;)
        • 0
          Разрешили спать в vip зоне, хотя и там постоянно бродили охранники :)
          • 0
            Охрана на локации настолько феерична, что даже стала темой для графики.
        • 0
          Что, в слип-зоне спать нельзя было? Нда, классно получилось.
          • 0
            Её внезапно оп, и решили закрыть. Охрана и руководство площадки фееричное попалось.
            • 0
              Ну кстати у меня к охране претензий нет. Да, они очень жестко шмонали всех. Ни лекарства ни вода не просачивались. Я до сих пор не понимаю как ты топливо протащил =). Но в кои-то веки в воскресенье утром на патиплейсе не было наблевано. Это лютый вин.

              А вот руководство площадки с чего из слип-зоны людей согнала это я вообще не понял…
              • 0
                Всё просто. Они как и все быдловатые с гонором охранники «били слабых» без подозрения на то, что сумка может вообще-то быть рассчитана на скрытное ношение оружия с соответствующими карманами.
                Совершенно логично было бы проверять на алкоголь и совсем палевную наркоту в виде таблеток без пометок, но еда, вода, даже мои три очень опасных зелёных яблока и пустая бутылка, неадекватно ж.
                • 0
                  Может ты яблоки бутиратом уколол а в бутылке ядовитые пары =). Оно ж не пахнет даже. Так что работу они свою делали вполне окей и есть с чем сравнивать — я помню в каком то не очень далеком году СС охраняло натуральное наемное быдло, ставившее в ступор вообще всех оргов.

                  И кстати то что уже было на патиплейсе никто у нас не отнимал. А могли бы. Ходили они там часто — на компы втыкали. Один охранник вечером воскресенье вежливо попросил приглянувшуюся картинку с пиксельартом.
                  • 0
                    Там было несколько адекватных охранников, двое в первый день очень стесняясь попросили мортал комбат на сеге, пока никто из старших не видел, девочка опять-таки, которой роботом дали порулить. Проблема в их начальнике и правилах клуба, еда и вода это банально чтобы покупали на месте, а это всегда не тру.
                    • 0
                      Начальник охраны опять же адекватный — делал все по инструкции. И вина оргов что был бедлам с наклейками. И не было отдельного недосматриваемого входа для оргов (с водой и едой для организаторов в том числе), хотя мог бы быть организован и оговорен. Короче, недостаточная организованность. И со стороны ответственных за охрану оргов СС тут косяк бОльший.
                      • 0
                        Вот только инструкция у него осталась классическая клубная, а CC это не мажорная какая-то вечеринка, а очень даже наоборот.
                        Неразбериха со всеми этими VIP/столами/входными получилась паршивая.
                        А локация-то хорошая, и второй вход там действительно сбоку есть. Вполне можно допилить до отличного варианта. Душевая, опять таки, тоже есть, плохо, что только одна (но она получилась секретной, поэтому было ок).
                        • 0
                          Да душевая оочень порадовала. Спасение какое-то.

                          А к тому въезду второму платный вход. Мы там технику разгружали с двух машин. Потом долго кружили по территории искали выход из этого лабиринта. 300 рублей обошлась разгрузка.
                          • 0
                            Место вообще такое лабиринтообразное, но так даже весело, на квест похоже.
  • НЛО прилетело и опубликовало эту надпись здесь
    • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Очень круто с Prism Test, я блин даже сидел настраивал iptables на удаленном сервере, чтобы мониторить ВЕСЬ траффик, который идет через сервак. Голову сломал, а оказалось все сильно проще.

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

    Но больше всего интересует Inverter, я даже задание не понял.

    Вообще, организаторам большое спасибо, провел полтора дня с вытаращенными глазами и кучей удовольствия.
    • 0
      iPrism mobile я решил по-другому, просто распаковал приложение, а потом прогнал по ней strings | grep с регуляркой под md5 хэш ([a-zA-Z]{32})

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разработка