
Пришел в Хогвартс за час до планируемого начала. Лучшие места за компами были уже естественно заняты. Подготовка шла во всю: двигались столы, компы, операционки, приложения.
Около часа готовил рабочее место: менял обои двигал иконки и всё такое ;)
Начало соревнований задержали на час поэтому все успели подготовится.
довольно много времени занял процесс установки копии сервера у меня на компе и запуска всех сервисов на нем (около 30 минут). У Димы всё работало уже минут через 5 после начала.
Правила повергли просто в шок. Кроме того мы незаконным путем вытащили пару довольно интересных квестов на которые тоже хотелось отвлечься.
Натравил nmap, XSpider, Acunetix на свою копию. 80-тый порт не найден – это тоже удивило.
Примерно в то же время скачал исходники php-шных сервисов (в итоге их всего 2 было из 7 или 8. Кстати сколько всего было приложений ?) и натравил на них dumb.pl. Тут обнаружились что не очень хорошо фильтруюется пользовательский input в 2-ух приложениях, не инициализированные переменные в 1 приложении. Чуть позже выяснилось что web приложения висят на порту 1335,1336,1337. А ещё чуть позже нашлось приложение и на 3000.
Использовались нестандартные WEB-сервера. 2 приложения были написаны на Питоне, скомпилированы, частично рядома лежали исходники, но для пересборки их не хватало.
Стал копать php-приложение на 1335. Натравил Acunetix на эти порты.
Минут 5 ушло на колективный танец. Баллов за него давали мало, зато хоть на память остался.
Вобще, по цене, квесты мало значили в этой игре. В сумме 1–1.5 миллиона, в то время как украсть через баги можно было и 13 миллионов.
Примерно через час стало понятно что через найденные баги получить shell или типа того не получится. Можно было только менять какие-то параметры пользователя, запускать программу ccheck с какимто поддельным аргументом. Не зная что делает приложение (а мы в то время всё ещё не знали что делает хоть одно приложение) ничего нельзя было сделать.
Посморел логи сканнеров. Acunetix нашел XSS на 3000 порту, в других приложениях ему не удалось самому залогинится, а без этого к большинству форм не пускали (Мы к тому времени всё ещё не знали куда и под кем надо заходить и какой параметр лучше всего копать – например fuzzer-ом).
Проверил XSS – всё верно. Приложение использовало Actionscript на Ruby. При регистрации в контактную информацию можно было запихать скрипт длиной 300 байт. Взял у Димы php скрипт который сохраняет куки. На сервере каждой команды (у 8 комманд это приложение было недоступно) сделал пользователя с XSS. При просмотре списка пользователей скрипт отправлял куки на нашем сервер. Как это использовать ещё было непонятно, по просьбе Ильи просто написал advisory жюри.
Может быть там ещё были баги, но быстро разобраться с Action Script не удавалось.
Первый раз на совещание в другую комнату ушло больше половины комманды. Наверное это было полезно, но для тех кто остался это было страшно – всё ещё неразбериха и никого не осталось. Когда все пернулись после совещания, нам ничего не рассказали.
Периодически смотрел логи. В одно WEB-приложение параметры принимало через GET-запросы, поэтому хоть что-то можно было понять. Остальные передавали через POST-ы, а у нас не сохранялось тела запросов.
После второго совещания наконец разобрались как работают депозиты и чеки.
Поэтому стал тестировать переменную от пользователя которая передавалась в скрипт ccheck.
Там использовалась закавычивание:
readfile('/usr/bin/ccheck '.escapeshellarg(POST[blabla]));
при вводе всяких & или | полуались интересные результаты, но как-то полезно его использовть не удалось. В этом же приложении использовались неинициализированные переменные.
При включеном registr_globals была возможность создать аккаунт на чужом сервере, закинуть на него денег, и потом перевести себе денег больше чем закинул. Но ближе к концу у всех уже была закрыта эта возможность или отключены сервисы.
Ещё вспоминается что в конце смотрел логи, через которые у нас тянули деньги, но без тела POST запросов ничего не понятно было. Также непонятным образом у нас в на серваке появлялись чужие Web-shell-ы. Не хватало информации через какую багу к нам залезли.
Поэтому опустили все сервисы и просто ждали конца.
И хотя в последний час находили несколько багов PHP, править и поднимать сервисы уже никто не хотел.