2 октября 2016, 13:26 (2984 дня назад) № 10298
Результаты HackQuest'a:
(Place, Team, Score)
1. Maximilian 1130
2. x 1130
3. JohnDoe 780
4. distcc 780
5. tiger 780
6. n0n3m4 650
7. Matriarchial_Strapon 650
8. BrainfuckMadeMeDoIt 630
9. noop 430
10. Riketta 300
11. Nothink Here 300
12. test1 280
13. 0x3c3e 150
14. neweagle 150
15. Tester 150
О задачах. Задач было шесть (
ссылка ):
* В первой участникам был дан исполняемый 64-bit ELF-файл. В описании к заданию сказано, что кто-то отредактировал его gedit'ом. Если попробовать запустить его, получаем ошибку сегментации. От участника требовалось погонять программу в отладчике и понять, что значение одного из байтов было перетерто нулем. Этот байт уменьшал объем памяти выделяемой под кадр стека одной из функций. Это пирводило к тому, что программа падала лишь спустя какое-то время и найти тот самый байт могло быть непросто. После того, как этот байт найден, участник должен заменить его в хекс-редакторе на какое-нибудь большое значение и запустить программу. Программа выведет флаг.
* Вторая задача тоже на реверс-инжиниринг. У нас на сервере крутится программа, которая принимает от пользователя строчку, проводит над ней какие-то проверки. Если проверки пройдены, пользователю выдается флаг. Участник взаимодействует с нашей программой через netcat. Кроме того, участник получет копию исходников нашей программы (но в его копии затерт флаг). Это может показаться несложным, но программа-валидатор написана на хаскеле. И у того, кто ее писал, была цель написать ее непонятной для новичков в хаскеле. Сама программа из какой-то дикой функциональщины, ее писал не я, ничего о ней сказать не могу :) .
* Следующая задача была на exploiting. У нас на сервере крутился простенький скрипт на Perl6 (40 строк!), который позволял участникам регистрироваться и логиниться. Даны исходникни. Участник должен заметить, что при запросе пользователя залогиниться, предоставленная им строка исполняется как часть regexp'а. Научиться использовать это, чтобы логиниться под другим пользователем. Залогиниться как admin, получить флаг.
* Участнику дан http адрес. На нем крутится CGI-скрипт написанный на /bin/sh. Этот скрипт реализует примитивный web-прокси. Т.е получает от пользователя GET-запрос с указанием какого-нибудь URL'а, сам делает запрос на этот URL и выплевывает в браузер пользователя результат. Здесь нужно обратить внимание на то, что имя CGI-скрипта заканчивается на '.sh'. Подумать: а каким образом писавший это псих мог делать http-запросы из shell-скрипта? Догадаться, что это либо wget, либо curl. Почитать man. Узнать, что эти программы могут читать локальные файлы, если передать им URL вида: 'file:///blabla'. Прочитать таким образом '/etc/passwd', где открытым текстом лежит флаг.
* У нас поднят скрипт на Perl5, который принимает от пользователя имя файла, открывает файл с указанным именем и выдает пользователю его содержимое. Кроме того, в условии сказано, что скрипт написан на perl. Многие уже в курсе, кто не в курсе могли легко прогуглить, что функция open, которой открывают файлы в perl служит так же для запуска shell-команд. Участник смотрит на файлы в текущей директории, находит там станное название, вычитывает содержимое, получает флаг.
* В последней задаче участнику дан файл, зашифрованный шифром Виженера, и зашифровавшая его программа (на Perl6!). Он должен понять, что это за шифр, почитать о способах криптоанализа и написать свою программу, которая это расшифрует. Или просто нагуглить уже написанную (
ссылка. Расшифровываем, видим в конце текста флаг.
Спасибо Ивану Олейникову ( НТЦ "Метротек" -
ссылка ) за подготовку и проведение HackQuest!