Chaos Construction 2013: hackquest review-writeup

в 11:27, , рубрики: hacking, hackquest, saint-petersburg, информационная безопасность, метки: , ,

Как многие знают, на этих выходных в Санкт-Петербурге проходил фестиваль компьютерного творчества, в т.ч. на которым был 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**maND5vfI72'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 байт — вуаля, все работает.
Утром показал решение — дали флаг вручную :)

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

Chaos Construction 2013: hackquest review writeup
Награждение

Автор: BeLove

Источник

Поделиться

* - обязательные к заполнению поля