Рассмотрим еще один сервис, по которому никто не добыл ни одного флага. Это сервис svn. Невероятно, но на его анализ и поиск основной уязвимости у меня ушло ДЕСЯТЬ минут, и еще десять на написание эксплойта, который получает флаги с сервиса. В хаскеле я так и не разобрался, поэтому вероятно есть и другие уязвимости. Вероятно все посмотрели, что сервис написан на хаскеле и забили, так сделали и мы, а зря.
Все очень просто, сервис хранит флаги в файлах каталога /home/svn/repo/. Сервис поддерживает следующие команды:
l - получение списка файлов
+<filename> <char> - добавить в файл "+<char>"
-<filename> <char> - добавить в файл "-<char>"
*<filename> <pos> <char> - добавить в файл "*<pos> <char>"
<filename> <rev> - получить определенную ревизию файла
<filename> - получить последнюю ревизию файла
Эксплойт состоит в том, что бы сначала послать "l\n", а потом посылать имена файлов полученные на пред. этапе для получения флагов.
Итого:
Все очень просто, сервис хранит флаги в файлах каталога /home/svn/repo/. Сервис поддерживает следующие команды:
l - получение списка файлов
+<filename> <char> - добавить в файл "+<char>"
-<filename> <char> - добавить в файл "-<char>"
*<filename> <pos> <char> - добавить в файл "*<pos> <char>"
<filename> <rev> - получить определенную ревизию файла
<filename> - получить последнюю ревизию файла
Эксплойт состоит в том, что бы сначала послать "l\n", а потом посылать имена файлов полученные на пред. этапе для получения флагов.
Итого:
- хаскел я так и не знаю
- команды испугалась незнакомого языка и упустили прекрасную возможность получить флаги.
- exploit svn.py
Мы не забили, просто не додумались перебирать все ревизии (да и это долговато как-то?). Последняя ревизия на флаг не очень похожа была..
Мы только роняли всем сервис, с помощью '+../svn.hs a'
На самом деле не долго, фишка в том, что можно скармливать сервису запросы пачками, тогда он быстрее реагирует, я добавил PoC к посту.
К сожелению у меня нет чекера и образа виртуальной машины с флагами тоже, поэтому пробовал на "кошках", и 303 файла в /home/svn/repo обработалось за 34 секунды.
Ну про "ни одного флага" -- это грубо :) Мы слили с svn три флага, а в сумме их было 7, кажется (хотя кто-то говорит, что аж целых 15).
Проблема с автоматизацией ретривинга флагов состояла в том, что GHC под виртуальной машиной к концу игры жутко тормозил и сервис svn закрывался по таймауту после одной-двух команд. Так что все было не так гладко, как здесь описано. :)
Роняли сервис всем и мы, кстати, было несколько способов это сделать. Вечером я выложу исходник, если интересно :)
конечно интересно.
а о каком таймауте идет речь? tcp соединение отваливалось или сервис сообщал "time is out"?
может флагов и 15 вытащили, я за скорбордом внимательно не следил, а итогового у меня нет.