Продолжаем решать задачки по информационной безопасности web-серверов. Сегодня задачка с портала root-me.org, называется "Insecure Code Management". За решение задачки дают 20 баллов, сложнее начального уровня.
В качестве задания предлагается получить пароль от учётной записи администратора, который хранится в открытом виде где-то в проекте. В подсказках к заданию приведена ссылка на документацию GIT. А GIT — система контроля версий. Становится понятно, что на сайте должна быть скрытая папочка ".git" с версиями проекта.
Ссылки
https://github.com/internetwache/GitTools
Решение
Переходим на страницу задания:
http://challenge01.root-me.org/web-serveur/ch61/
Видно какую-то форму логина. Проверим, есть ли в корне сайта папка ".git".
http://challenge01.root-me.org/web-serveur/ch61/.git/
Мало того, что папка есть, так ещё и всё содержимое папки доступно для просмотра. Можно скачать всё что угодно. Но мы не будем придумывать велосипед, есть готовые решения, воспользуемся GitTools.
https://github.com/internetwache/GitTools
Кстати, я уже раньше описывал этот процесс в задачке:
Сначала скачиваю скрипт gitdumper.sh.
Данный скрипт скачивает все возможные файлы из ".git". Натравливаем его на URL с папкой ".git".
Как пользоваться:
./gitdumper.sh -h
###########
# GitDumper is part of https://github.com/internetwache/GitTools
#
# Developed and maintained by @gehaxelt from @internetwache
#
# Use at your own risk. Usage might be illegal in certain circumstances.
# Only for educational purposes!
###########
[*] USAGE: http://target.tld/.git/ dest-dir [--git-dir=otherdir]
--git-dir=otherdir Change the git folder name. Default: .git
Рядом создаю папку "project", в которую буду скачивать содержимое ".git".
У меня винда, поэтому пользуюсь подсистемой Windows для Linux:
С первого раза скрипт не заработал, пришлось сначала заменить виндовые переводы строк на линуксовые:
dos2unix ./gitdumper.sh
Со второго раза скрипт тоже не заработал, пришлось ставить дополнительный пакет binutils:
apt install binutils
И с третьего раза:
bash ./gitdumper.sh http://challenge01.root-me.org/web-serveur/ch61/.git/ ./project/
Проект скачался. Теперь нужно извлечь коммиты и их содержимое из репозитория. Снова лезем в GitTools и скачиваем скрипт extractor.sh.
Как пользоваться:
./extractor.sh /tmp/mygitrepo /tmp/mygitrepodump
где
- /tmp/mygitrepo - содержит папку .git
- /tmp/mygitrepodump - место куда поместить результат
Заменим виндовые переводы строк на линуксовые:
dos2unix ./extractor.sh
Пуляем:
./extractor.sh ./project ./projectresult
Что-то вычленилось в новую папку projectresult, целых пять коммитов.
Внутри каждого коммита находится несколько файлов.
Просмотрел config.php, а там пароль в открытом виде. Пароль из последнего коммита в качестве флага не подошёл.
Просмотрел config.php в предпоследнем коммите.
А вот и флаг: s3cureP@ssw0rd
Валидируем.
Флаг подходит, зарабатываем 20 очков.
Безопасность
- Не должно быть папки .git на сайте.
- Если уж есть на сайте папка .git — закрывайте доступ на чтение файлов.
- Не храните пароли в открытом виде.
Иначе "Welcome admin"...