Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
В этот раз мы разберем легкую машину — Laboratory. На примере ее прохождения ты научишься эксплуатировать уязвимость в GitLab для произвольного чтения файлов и удаленного выполнения кода. Также мы покопаемся в репозиториях и повысим привилегии с помощью техники path hijacking.
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
IP-адрес машины — 10.10.10.216, я при помощи строчки в /etc/hosts
дам ей имя laboratory.htb
.
Первым делом, конечно же, сканируем порты, чтобы понять, какие сервисы запущены на машине. В скрипте ниже утилита Nmap вызывается дважды: для быстрого сканирования и затем чтобы пройтись по найденным портам с применением скриптов.
#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1
Результат работы скрипта
Нашлось три открытых порта:
Сканирование порта 443 преподносит нам приятный сюрприз. Поскольку он отвечает за общение по зашифрованному протоколу, в отчете о сканировании можно найти сертификат, а в сертификате еще один домен — git.laboratory.htb
. Я тоже добавлю его в /etc/hosts
:
10.10.10.216 git.laboratory.htb
При обращении по домену laboratory.htb
мы ничего интересного не получаем, а вот на найденном git.laboratory.htb
нас встречает GitLab.
GitLab — это система управления репозиториями кода для Git с собственной вики, системой отслеживания ошибок и другими функциями.
Страница авторизации GitLab
У нас есть возможность зарегистрироваться, что сразу и сделаем. Это позволит нам получить доступ к большему числу функций, чем у гостей. Поскольку мы имеем дело с серьезным проектом, «тыкать кавычки» в каждую форму смысла нет. Вместо этого стоит поискать информацию об уязвимостях и готовые эксплоиты. Первый шаг на пути к этому — узнать версию продукта. Обычно она приводится на страницах вроде About или в данном случае — Help.
Используемая версия GitLab
Мы узнаем версию GitLab CE — 12.8.1.
В реальных условиях лучше всего искать эксплоиты при помощи Google, поскольку этот поисковик заглядывает и в личные блоги, и в самые разные отчеты. Но для ускорения можно пользоваться специализированными базами вроде Exploit-DB — скорее всего, там найдутся подходящие варианты. Если ты используешь Kali Linux, то эта база у тебя уже есть и для поиска можно использовать утилиту searchsploit
.
Поиск эксплоитов для GitLab с помощью searchsploit
Как видишь, мы нашли сразу несколько эксплоитов, хотя для нужной версии GitLab ничего нет. Зато есть для более новой (номер 48431), а значит, скорее всего, подойдет и к нашей.
Эксплуатируемая уязвимость срабатывает при перемещении задачи между проектами GitLab и приводит к тому, что мы можем читать файлы на удаленной машине. Однако у меня ни одна из реализаций этого эксплоита не заработала, поэтому придется все делать в ручном режиме.
Для этого нам нужно изначальное исследование, доказательство работоспособности (proof of concept) этой уязвимости. Чтобы найти его, обращаемся в Google. Нам повезло, на HackerOne (самая известная платформа для bug bounty) нашелся целый отчет. В нем рассказано, как не только читать файлы, но и получить удаленное выполнение кода (RCE)!
Поиск PoC на HackerOne
Для получения RCE нам нужно иметь консоль Ruby on Rails и значение secret_key_base
из файла /opt/gitlab/embedded/service/gitlab-rails/config/secrets.yml
. Именно для получения содержимого этого файла мы будем использовать первую уязвимость, которая позволяет читать произвольные файлы.
Итак, читаем файл. Создадим два проекта в GitLab, а потом перейдем к вкладке Issues и выберем New Issue. Там указываем следующее значение в качестве описания и таким образом воспользуемся уязвимостью типа path traversal.
![a](/uploads/11111111111111111111111111111111/../../../../../../../../../../../../../../opt/gitlab/embedded/service/gitlab-rails/config/secrets.yml)
Страница созданного проекта
Страница New Issue
Далее необходимо указать целевой проект (который мы создали вторым), после чего secrets.yml
можно будет загружать. Так мы получаем нужный для RCE секретный параметр.
Выбор опции перемещения задачи
Выбор проекта для перемещения задачи
Доступный для загрузки файл, представленный в качестве вложения
Содержимое файла secrets.yml
Источник: xakep.ru