zed.0xff.me
RuCTF 2010 Quals: отчет
Случайно и неожиданно попал на “квалификационный заезд” RuCTF 2010 в составе команды Lobotomy.
Буквально так:
1 2 3 4 5 6 7 8 9 |
linkoln: свободен? zed: смотря для чего ) linkoln: тут мы в ructf участвуем, может глянешь пару задачек zed: ок давай ....... zed: решил реверс100 ^__^ ! ....... zed: решил реверс200 ^____^ ! вписывайте меня в команду! :) linkoln: ок, все только за :) |
Дело это продолжалось двое суток, участвовало порядка 40 команд.
Всего было 7 категорий задач, по 5 задач в каждой, от 100 до 500 баллов за решение.
результаты
Скажу сразу что мы заняли почетное 9-е место.. причем нас таких команд получилось аж 3:
1 | SiBears | 6800 |
2 | Smoked_Chicken | 6600 |
3 | CIT | 6300 |
4 | Bushwhackers | 6100 |
5 | Vulnbugs | 5600 |
6 | x0r | 5200 |
7 | KEVA | 5000 |
7 | Space_Invaders | 5000 |
9 | Quinque | 4900 |
9 | ForkingBugs | 4900 |
9 | Lobotomy | 4900 |
Проходящими в финал по правилам являются “10 лучших команд”, так что, видимо, в финал мы прошли.. но еще не факт.
задачи
= Crypto100 =
расшифровать “S[bgXGO DVG JT UJF CHVU DVG PO UJF XSXPE@”
алгоритм: вычесть из каждой первой и последней буквы слова 1, из остальных букв слова вычесть больше чем 1 :) четкого алгоритма не нашел
ответ: RUSSIAN CTF IS THE BEST CTF ON THE WORLD
= Forensics500 =
дан образ диска злоумышленника [ссылка], известно что на нем спрятан пароль от аккаунта “[Dervish]”, найти md5 этого пароля
решение: на диске нет загрузочных систем, но есть MBR и GPT партиции. берем gdisk (аналог fdisk, но с поддержкой GPT) и начинаем выковыривать из образа разделы. на разделах лежат картинки, являющиеся частями одного большого изображения, на котором ручкой написаны разные пароли, в т.ч. искомый.
главная подляна в том, что последний кусок запрятан в FAT разделе, в удаленном(!) файле, да еще и в совершенно ##баническом формате SCT
= Reverse300 =
дан кейген [ссылка], нужно сгенерить ключ для юзера %username%. проблема в том что keygen expired и работать отказывается.
решение: всё просто. берем hiew, правим в кейгене условный переход по проверке даты на безусловный, запускаем, генерим
= Reverse400 =
дан файл omar.plc [ссылка], нужно найти все числа между 1300 и 1500 где алгоритм неточен.
решение: данный файл – это скомпиленный перловый байткод, в чем можно убедиться заглянув внутрь файла, и погуглив на “ByteLoader”.
далее проблема была найти такую машину, где бы и архитектура машины, и версия перла совпадала бы с той, на которой код был скомпилен: x86_64-linux-thread-multi.0.07
машину я нашел, но очень не сразу. код на ней запустился (просто perl omar.plc XXXX
, где XXXX – это входное число)
программа на выходе выдает 0 или 1, в зависимости от чисел.
погуглив на слово Omar можно догадаться что это имеет отношение к Омару Хайяму, а внимательно посмотрев на числа, на которые программа выдает “1” (4,8,12,16,20,15,29,33,…) можно предположить что это что-то типа алгоритма вычисления високосного года.
дальше по гуглу и педивикии смотрим какой там календарь придумал Хайям, и как его считать, и сравниваем с данными программы.
тут был некоторый косяк в том что на все мои попытки чекер возвращал что результат неверный, а потом орги зачли задачу вручную.. так что хз какой именно был правильный ответ
= Stegano100 =
текст задачи: “Поехали! Вот только скажите, куда [ссылка] ?”
решение:
а) выписываем регионы в порядке соответсвующих им чисел
б) выписываем рядом с каждым регионом его автомобильный госномер http://bit.ly/bwzDfJ
в) замечаем что несколько раз повторяется 32 (ASCII пробел) и оканчивается на 33 (воскл.знак)
г) конвертим числа в буквы по ASCII
д) получаем “WELCOME TO RUCTF 2010!”
= Stegano300 =
расшифруйте сообщение: message [ссылка]
решение (слабонервным не смотреть!): оооооооооооочень жестокая задача… файлик надо было догадаться тупо переименовать в *.com и запустить под dos-compatible системой…. >_<
…а я его в base64 сначала декодил (причем он декодировался без ошибок) и пытался дальше gzip-ом распаковывать, предварительно приклеив gzip-хидер..
= CTB400 =
злоумышленник проник в нашу систему, и оставил бекдор. найдите этот бекдор.
хинт: злоумышленник ядро не трогал.
образ системы [ссылка] (vmware image, 400Mb), или с торрента, если еще жив [тоже ссылка]
решение: внутри – Debian 5.0.4 minimal + sshd + apache + kernel sources + всякие dev либы. пароль рута неизвестен.
сначала натравил на образ strings, грепал на backdoor, passwd, root – ничего особо не нашел.
потом поставил его в VMWare Player, загрузился, понял, что паролей у меня нет :), качнул system rescue cd, загрузился с него, но пароли менять не стал, так с него и изучал.
примечательно что в системе удалена вся история команд рута, а также всем файлам в системе сделан touch на одну и ту же дату :)
поковыряв систему так ничего и не нашел.
качнул Debian 5.0.4, поставил в соседнюю VM, сделал find / type f -ls
на обеих машинах, и скриптом вычел один список из другого. получил список файлов с первой ВМ, отличающихся от оригинальных, либо отсутствующих в свежем истоле. сначала грешил на sudo или измененный initrd.. но потом он спалился на
/etc/apache2/mods-available/security.conf 65
/etc/apache2/mods-available/security.load 72
/usr/lib/apache2/modules/mod_security.so 7029
:) внутри модуль который ловит GET запросы на /hack, причем http request header должен быть ructf/2010
:)
telnet 10.2.3.4 80
GET /hack/etc/ ructf/2010\n\n
GET /hack/root/secret.tar.gz ructf/2010\n\n
в ответ возвращает либо список файлов в каталоге, если URI заканчивается на “палку”, либо содержимое запрошенного файла
mysql: пробелы без пробелов
хитрый ход для ситуаций, когда пробел поставить нельзя, но ооооооооочень хочется:
1 2 3 4 5 6 7 |
mysql> select/**/count(*)/**/from/**/users; +----------+ | count(*) | +----------+ | 7 | +----------+ 1 row in set (0.01 sec) |
// подсмотрен в процессе участия в RuCTF 2010 quals :)