Разбираем восьмую задачку из нашего соревнования CTF. Задание называется octocat for the win, 500 баллов за флаг.
Переходим по ссылке — там форма логина.
Беглый осмотр ничего не дал. Анализируем текст задания. Нам дают такие термины как "octocat", "система контроля версий". Кто есть октокэт?
Octocat — пятиногая помесь кошки и осьминога, талисман крупнейшего хостинга репозиториев и IT-проектов Github.
Ну а github — репозиторий с системой контроля версий. В общем, становится понятно, что на сайте должна быть скрытая папочка ".git" с проектом.
Ссылки
https://github.com/internetwache/GitTools
Решение
Как проверить, не забыл ли админ закрыть доступ к папке ".git"? Заходим туда дописав "/.git/".
Ошибка 403 означает, что папка существует, но доступа к просмотру содержимого нет. Значит, предположение о существовании папки ".git" было верным.
Проверим, что есть доступ к файлам в папке. Стандартный проект представляет собой следующую древовидную структуру:
+-- HEAD
+-- branches
+-- config
+-- description
+-- hooks
¦ +-- pre-commit.sample
¦ +-- pre-push.sample
¦ L-- ...
+-- info
¦ L-- exclude
+-- objects
¦ +-- info
¦ L-- pack
L-- refs
+-- heads
L-- tags
Пробуем открыть файл HEAD.
Доступ есть, файл HEAD скачался. Вот только флага в нём нет.
Скачал ещё несколько файлов, флага не обнаружил. Можно анализировать содержимое файлов и искать имена, чтобы их скачать. Это долго, к чему напрягаться, если всё давно придумано за нас. Есть готовые решения, воспользуемся GitTools.
https://github.com/internetwache/GitTools
Нам даже весь проект не нужен, качаем скриптик dumper.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
Пуляем:
./dumper.sh http://octocatforthewin.target.tld/.git/ ./octocat/
Что-то скачалось.
Я посмотрел содержимое файлов - не видно флаг. Снова лезем в GitTools и скачиваем скрипт extractor.sh — он вытаскивает коммиты и их содержимое из повреждённых репозиториев.
Как пользоваться:
./extractor.sh /tmp/mygitrepo /tmp/mygitrepodump
где
- /tmp/mygitrepo - содержит папку .git
- /tmp/mygitrepodump - место куда поместить результат
Пуляем:
./extractor.sh ./octocat ./octocate
Что-то вычленилось.
Анализируем содержимое — а вот и флаг!
Безопасность
- Не должно быть папки .git на сайте.
- Если уж есть на сайте папка .git, закрывайте доступ на чтение файлов.