Свинский гитхаб. Ломаем Git и Svn на примере Мираторга
Тебе ещё не надоели LFI и SQL-инъекции? Сегодня я тебе расскажу о другом способе проводить аудит организаций. Такая утечка данных – очень распространенная, происходит она по вине разработчиков, которые не убирают из общего доступа директории с данными Git или Svn. Таким образом ты можешь выкачать весь репозиторий компании в которой ты проводишь аудит, а значит получит доступ к существенному объему информации. Ты не веришь? Мы тебе всё покажем и расскажем на примере крупнейшего в РФ производителя мяса, компании Мираторг.
Время от времени при выполнении теста на проникновение для веб-приложений я сталкиваюсь с общедоступными каталогами .git. Вы наверняка знаете, что Git это инструмент контроля версий, который помогает отслеживать изменения в файлах и папках и широко используется в сообществе веб-разработчиков. В этой статье я расскажу о способах получения информации с веб-сервера, имеющего общедоступный каталог .git. Для людей, которые знают, как использовать Git это может показаться нелепым, ведь здесь нет ничего нового или революционного и всё, что я покажу – это базовый функционал Git. Причина, по которой существует эта статья – рассказать людям, почему наличие .git и .svn на вашем веб-сервере может быть опасным.
Теория
Проверить доступность репозитория можно перейдя на .git/HEAD:

Статус ответа 200 – значит есть “уязвимость”.
Если в веб-приложении находится каталог .git и включён листинг директорий, вы можете загрузить весь контент с помощью wget -r https://сайт/.git (качать будет достаточно долго), после чего можно увидеть изменения с помощью команды git diff:

wget -r https:// www.yulab.org/.git –no-check-certificate
Также существуют утилиты, которые могут помочь сдампить репозитории автоматически и намного быстрее, чем метод с использованием wget, я кратко опишу их функционал, после чего перейдем к реальным “атакам”.
1. https://github.com/arthaud/git-dumper
git-dumper это скрипт написанный на Python3. Инструмент сначала проверит, доступен ли список каталогов. Если это так, он просто рекурсивно загрузит .git (что вы бы сделали с wget), но если список каталогов недоступен, он будет использовать несколько методов, чтобы найти как можно больше файлов. Этапы работы git-dumper:
- Получает все общие файлы (.gitignore, .git / HEAD, .git / index и т. д.);
- Поиск ссылок (таких как refs / Heads / master, refs / remotes / origin / HEAD и т. д.);
- Поиск объектов (sha1);
- Рекурсивное извлечение всех объектов, анализируя каждый коммит;
- Запуск git checkout .
Аргументы запуска:
–proxy PROXY – работа через прокси;
–jobs JOBS – количество одновременных запросов;
–retry RETRY – количество попыток;
–timeout TIMEOUT – максимальное время в секундах для ожидания ответа;
–user-agent USER_AGENT – юзер-агент для запросов;
–header HEADER – дополнительный HTTP заголовок (‘NAME=VALUE’)
Использование: python3 git-dumper.py [аргументы] URL DIR
URL – адресс сайта/ip;
DIR – папка, в которую будет загружен дамп.
2. https://github.com/0xHJK/dumpall
Ещё один скрипт на Python3, который способен дампить .git, а также .svn и .DS_Store, принцип работы такой же как и у git-dumper.
Аргументы запуска:
–version отображает версию скрипта;
–url – обязательный параметр, адресс сайта либо айпи, в котором будут указаны каталоги (.git, .svn, .DS_Store)
–outdir – каталог для загрузки дампа (имя каталога по умолчанию – это имя хоста);
–force – скрипт попытается начать дамп, игнорируя ошибки.
Использование: python 3 dumpall.py -u http://АДРЕСС_САЙТА/.git/
3. https://github.com/lijiejie/GitHack
GitHack почти ничем не отличается от git-dumper и имеет схожий алгоритм работы:
- Парсинг файла .git/index и поиск всех элементов в проекте (имя файла, файл sha1)
- Дамп объектов из папки .git/objects/, чтобы скачать соответствующие файлы.
- zlib распаковывает файлы и записывает исходный код в соответствии с структурой каталогов.
Использование: python3 GitHack.py https://АДРЕСС_САЙТА/.git/
4. https://github.com/admintony/svnExploit
SvnExploit – это инструмент, который умеет дампить .svn репозитории. Он также как и git-dumper пытается найти и скачать как можно больше файлов.
Аргументы запуска:
–url – обязательный параметр, адресс сайта либо айпи, в котором будет указан каталог.svn;
–thread количество потоков (по умолчанию 5);
–dump – режим дампа репозитория.
Использование: python3 SvnExploit.py -u http://АДРЕСС_САЙТА/.svn
После дампа репозиториев логичным шагом становится нахождение паролей и разного рода ключей авторизации, для этого можно воспользоваться двумя утилитами:
- https://github.com/trufflesecurity/truffleHog – ищет секреты в репозиториях git, глубоко копаясь в истории коммитов;
- https://github.com/zricethezav/gitleaks – это инструмент SAST для обнаружения паролей, ключей API и токенов, в репозиториях git.
Переходим к практике
Говорят, что Мираторг, крупнейший производитель мяса в России принадлежит родственнику жены Дмитрия Медведева. Мы решили проверить, что же на самом деле происходит в этой конторе.
А происходит вот что. При деплое сайта, кодеры не удалили директорию .git. Да не просто не удалили, а ещё и оставили в ней все ключики.
И вот, перед нами сайт достаточно известной компании. Нет никаких намёков на SQL инъекции или другие серьёзные уязвимости, но это не значит, что мы не можем его развалить.
Запускаем git-dumper (python3 git_dumper.py -r 3 -t 50 https://git.shop.miratorg.ru git.shop.miratorg.ru)

Спустя несколько минут программа закончит работу и у нас появится папка git.shop.miratorg.ru, в которой будет дамп репозитория:

Похожая ситуация встречается на https://dev1.shop.miratorg.ru и https://dev2.shop.miratorg.ru
В результате мы получили дамп исходного кода сайта компании. В файлах были обнаружены токены доступа к страницам ОК, ВК и Instagram. Это помимо всех кодов от БД и прочих полезностей.
Для поиска “уязвимых” сайтов можно использовать дорки:
“.svn” intitle:Index и “.git” intitle:Index
Таким образом был найден сайт https://americanpestonline.com на WordPress, а используя git-dumper (python3 git_dumper.py -r 3 -t 50 https://americanpestonline.com americanpestonline.com) были добыты конфиги с паролями:

Немного поискав .svn репозитории через дорки был найден са йт http://www.metaisbianca.com.br и с помощью SvnExploit удалось получить файлы конфигурации SMTP:

python3 SvnExploit.py -u http://www.metaisbianca.com.br/.svn/ –dump
Итоги
Эксплуатировать неправильно сконфигурированные сервера не составляет особого труда, а последствия могут быть очень серьёзными и если вы собираетесь использовать Git на “живом” сервере, убедитесь, что каталог .git не индексируется, а его подкаталоги и все файлы доступны только с авторизацией. Кроме того, следует использовать файл .gitignore, чтобы конфиденциальные файлы не добавлялись по ошибке.

ВНИМАНИЕ! НЕСАНКЦИОНИРОВАННЫЙ ДОСТУП К УДАЛЕННЫМ СИСТЕМАМ – ПРОТИВОПРАВНЫЕ ДЕЙСТВИЯ. АДМИНИСТРАЦИЯ САЙТА НЕ СОВЕРШАЕТ И НЕ РЕКОМЕНДУЕТ ВАМ СОВЕРШАТЬ ПРОТИВОПРАВНЫХ ДЕЙСТВИЙ ИЛИ ПОЛУЧАТЬ ДОСТУП К ОТКРЫТЫМ СИСТЕМАМ. СТАТЬЯ ОПУБЛИКОВАНА ПОСЛЕ ТОГО, КАК ВСЕ ЗАТРАГИВАЕМЫЕ В НЕЙ ОРГАНИЗАЦИИ БЫЛИ ОПОВЕЩЕНЫ. ДАННАЯ СТАТЬЯ НАПРАВЛЕНА НА ТО, ЧТОБЫ УКАЗАЗТЬ НА ПРОБЛЕМЫ С СИСТЕМАМИ ЭТИХ ОРГАНИЗАЦИЙ И ПРИДОСТЕРЕЧЬ ИХ ОТ ВОЗМОЖНЫХ АТАК. МЫ НЕ РЕКОМЕНДУЕМ ВАМ ПОВТОРЯТЬ ОПИСАННЫХ ЗДЕСЬ ДЕЙСТВИЙ. СТАТЬЯ НАПИСАНА НЕ АВТОРОМ НАШЕЙ РЕДАКЦИИ И ОПУБЛИКОВАНА НА ПРАВАХ КОНФЕДЕНЦИАЛЬНОСТИ И ЖУРНАЛИСТСКОЙ ТАЙНЫ.

Можно добавить ..А если сайт имеет корневую директорию /public .. папка .git будет располагаться по пути url/../.git . Приведенные выше инструменты смотрят на вложенность?