22 Ноября, 2011

За что мне дали баллов на ZeroNights HackQuest

Андрей Петухов

Все, должно быть, уже в курсе, что на берегах Невы в эту пятницу, 26 ноября, состоится первая питерская конференция, посвященная практическим аспектам ИБ – ZeroNights . Организаторы – группа Defcon Russia .


Для нагнетания правильной обстановки и прочего 3,14-ара группой добровольцев, состоящей из Владимира Воронцова , Алексея Синцова и Дарта Вейдера Dirk’а van Veen’а , был разработан и запущен HackQuest .

Спешу рассказать о заданиях, которые я решил.


Прежде всего хочу выразить глубочайшее уважение придумщикам заданий (надеюсь, оно не пропадет, когда будут выложены ответы): некоторые задания оказались мне не по зубам, а я тратил на квест аж по три часа каждый день, с 10 вечера до часу ночи. Итак, решения:


1. Задание по крипте «Saint Isaac’s Cathedral».

Задание гласит: «In the basement of the cathedral you come across a strange man. He said that : DA DG VV FA GV DA FF GG FX XF VG FX FV DV VX XF XA AV VA VA VX AA AV XV XV XV XA AV AA XV VV VX»


На HTML-странице был комментарий: <!– also, he said that was very fond of his old country … –>, а на главной странице с квестами – такой: <!–This terrible man lives in the basement of the cathedral. Rumor has it that this is the main information security expert of the USSR since 1917.–>


Замечаем, что алфавит состоит из символов ADFGVX. Вбив это в гугл, добавив на всякий случай слово cipher, получил ссылку на википедию . Осуществив ликбез, воспользовался гуглом с ключевым словосочетанием «ADFGVX online» и получил ссылку на этот сервис . Дальше уже совсем все просто – вставляем шифрограмму, используем ключ USSR и получаем флаг.


2. Задание по крипте «Trinity Cathedral».

Дается картинка:



Надо сказать, что это задание у меня отняло наибольшее количество времени – три дня по три часа. Но удовлетворение от её решения было соизмеримым :)


Первым делом надо было найти шифрограмму. Воспользовавшись сервисом по поиску похожих картинок TinEye , нашел оригинал. Методом пристального взгляда нашел отредактированное место (слева от ворот). Итак, шифр состоит из полных и неполных прямоугольников. Сразу за рабочую гипотезу была принята идея об использовании шифра простой подстановки. Проблема заключается в том, что флаг – это не обычный текст, так что нет никакой возможности проверить, правильно ли была дешифрована шифрограмма (только отправить ответ). Проводить брутфорс системы приема флагов не хотелось, поэтому я впал в депрессию глубокие раздумия. Кстати, на всякий случай скажу, основные версии флагов, полученные частотным анализом, не подошли.


Одной из идей было найти в таблице Юникода соответствующие символы и заменить строку на их коды. Вы не представляете, как было грустно просматривать эту таблицу. В общем, fail.

Почти сдавшись, решил на последок еще раз воспользоваться палочкой-выручалочкой – гуглом. Идея была попробовать поискать что-то наподобие «geometric figures cipher». И мне повезло: на третьем месте была статья про Pigpen cipher .


Бинго! Дальше читаем статью в википедии , обзываем себя за то, что не поискали в гугле с самого начала, понимаем, что символы A-F – отличные кандидаты для числа в HEX’е и получаем долгожданный флаг.


3. Задание по вебу «Seaport».

Дается форма для ввода номера корабля и кнопка Submit. Текст гласит: «Enter ship number to get shipment ticket«. Т.к. работаю из-под Burp Suite, всегда первым делом запускаю встроенный сканер. Ага, часть ответов вернулась с кодом 500. Подозрительно. Далее немного времени ушло на то, чтобы понять, когда возвращается код 500, а когда 200. Подозрения на SQLi оправдались: в ответ на ввод


1')UNION SELECT 1,1,1 FROM sqlite_master --


была получена страница с QBar-кодом, который был мгновенно распознан моим Андроидом.


Далее, вытягиваем инфу. Используя Burp Intruder, делаем запросы от a до z вида:


1')UNION SELECT sql,sql,sql FROM sqlite_master where tbl_name like '%' --


Получаем таблицы ships, tickets и users.


Далее, вытягиваем инфу из каждой таблицы (i=1, 2, …):


1')UNION SELECT ship,ship,ship FROM ships where id=i --

1')UNION SELECT ticket,ticket,ticket FROM tickets where id=i --

1')UNION SELECT username,username,username FROM users where id=i --

1')UNION SELECT pass,pass,pass FROM users where id=i --



и получаем флаг.


4. Задание по вебу «Baltic Rail Terminal».

Опять, дается форма для ввода номера билета и кнопка Submit. Текст гласит: «Registered passengers can check trains«. Перво-наперво, запускаем любимые сканеры: Burp, sqlmap, wapiti… Опа! Wapiti говорит, что есть файл baltic.php.old. Качаем, смотрим исходники, а там такое:



<?php
$db = new SQLite3("baltic.BY7834asGHAguy367asvdsa123yuasda12.db");
if(isset($_POST['ticket'])){
$ticket = intval($_POST['ticket']);
if (strlen($ticket)!=8){
echo "<font color=red>Ticket is incorrect</font>";
}else{
$res = $db->query("select * from trains where id in (select trainid from tickets where ticket='$ticket');");
if ($row=$res->fetchArray()){
echo "</div><div class=feed><table border=1><tr><td>Train number:</td><td>{$row['train']}</tr><tr><td>Depart time:</td><td>{$row['time1']}</td></tr>";
echo "<tr><td>Arriv. time:</td><td>{$row['time2']}</td></tr>";
echo "<tr><td>Comment:</td><td>ID: {$row['id']}</td></tr></table>";
}
}
}
?>

Тут, признаюсь, я сильно лажанулся, ибо решил, что флаг – это BY7834asGHAguy367asvdsa123yuasda12. Далее я около часа времени потратил на то, чтобы его привести к виду, который нравится проверяющей системе. И все неудачно, представляете???!!! Да, epic fail.


Ну конечно, надо было просто скачать файл baltic.BY7834asGHAguy367asvdsa123yuasda12.db, открыть в sqlite и получить флаг из таблицы users.


5. Задание по крипте Метро 1.

Текст задания гласит: «You squandered all the money. You do not even have enough money to ride the subway to ATM. You look at trash near subway and found two used cards. Using the card reader you get a dump of that cards. Make a valid card and fall into the subway.» Дается два текстовых файла, которые содержат дампы магнитных полос.


Это задание получилось решить быстрее всех, буквально за 5 минут. Burp Intruder + обработка payload’а методом bit flipping (а payload – содержимое скачанного файла) – и вот результат – валидная карточка и флаг на 170 баллов.


Теперь о неудачах.

1. Социальная инженерия через Skype.

Задание гласит: «You wake up in a Sovetskaya Hotel with a girl. You drank so much last night that do not remember anything. She quickly goes away and leaves only the number of Skype. Skype://Margo.Reyun«. Your task is to understand what happened that night.


Я придумал следующую легенду. Звоним и говорим:

«Здравствуйте, меня зовут Андрей Петухов. Я начальник службы безопасности гостиницы Азимут, бывшая Советская. К сожалению, вынужден вас побеспокоить по очень неприятному вопросу. Есть у вас 5 минут? Ваш контакт мы нашли сегодня днем в номере с одним молодым человеком, состояние которого мы не можем оценить иначе как безумие. Он ничего не помнит и постоянно бредит. На салфетке мы нашли ваш Skype-контакт. Кроме того, камеры видеонаблюдения показали, что сегодня утром из этого номера выходила девушка. Мы предположили, что это могли быть вы. Мы бы не хотели доводить это дело до полиции. Не могли бы вы пролить свет на то, что было с этим человеком на тот момент, когда вы были вместе?»


Примерно так. С первого раза не дозвонился, а потом пропал настрой. Фиг знает, что бы получилось :)


2. Самое жирное задание на веб под названием «Kirovsky plant».

Задание содержит форму аутентификации и называется «Timesheets system». Подсказка по заданию в твиттере советовала получить в начале исходники. Что ж, давайте поищем. Наличие директорий в nginx проверяется достаточно просто: /path/.htaccess. Если директория существует – вернется код 403. Быстро оказалось, что существует каталог /missions/kirovsky/. Т.е. исходники прячутся где-то там. Дальше был брутфорс, коотрый не дал никакого результата. А дальше кончилось время и желание :)


Во время брутфорса пробовались следующие комбинации (помимо всяких svn и CVS):


/missions/kirovsky/kirovsky.php.

/missions/kirovsky/kirovsky.

/missions/kirovsky/kirovsky.php.(source|sources|src).

/missions/kirovsky/kirovsky.(source|sources|src).

/missions/kirovsky/kirovsky-(source|sources|src).

/missions/kirovsky/(archive|backup|dist|code|files|source|sources|src).


Такие дела.

Еще раз огромное спасибо создателям квеста за потраченное время. Лично я получил много фана, и, что самое главное, ощущение, что я много чего не знаю :)


p.s. Конечно, поздравляю победителей – команду rdot!

p.s. #2 Хочется выразить респект товарищу kyprizel, который в одиночку составил достойную конкуренцию целой команде rdot. Молодцом!

p.s. #3 Кто еще участвовал? Кидайте линки на свои write-up’ы!



или введите имя

CAPTCHA
22 Ноября, 2011
25 ноября
0 |
  • Поделиться
  • Ссылка