Содержание статьи
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
IP-адрес машины — 10.10.10.216, я при помощи строчки в /
дам ей имя laboratory.
.
Первым делом, конечно же, сканируем порты, чтобы понять, какие сервисы запущены на машине. В скрипте ниже утилита 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
Нашлось три открытых порта:
- порт 22 (TCP) — служба SSH;
- порт 80 (HTTP) — веб‑сервер Apache 2.4.41;
- порт 443 (HTTPS) — веб‑сервер Apache 2.4.41.
Сканирование порта 443 преподносит нам приятный сюрприз. Поскольку он отвечает за общение по зашифрованному протоколу, в отчете о сканировании можно найти сертификат, а в сертификате еще один домен — git.
. Я тоже добавлю его в /
:
10.10.10.216 git.laboratory.htb
При обращении по домену laboratory.
мы ничего интересного не получаем, а вот на найденном git.
нас встречает GitLab.
Сканирование веба
GitLab — это система управления репозиториями кода для Git с собственной вики, системой отслеживания ошибок и другими функциями.
У нас есть возможность зарегистрироваться, что сразу и сделаем. Это позволит нам получить доступ к большему числу функций, чем у гостей. Поскольку мы имеем дело с серьезным проектом, «тыкать кавычки» в каждую форму смысла нет. Вместо этого стоит поискать информацию об уязвимостях и готовые эксплоиты. Первый шаг на пути к этому — узнать версию продукта. Обычно она приводится на страницах вроде About или в данном случае — Help.
Мы узнаем версию GitLab CE — 12.8.1.
Точка входа
В реальных условиях лучше всего искать эксплоиты при помощи Google, поскольку этот поисковик заглядывает и в личные блоги, и в самые разные отчеты. Но для ускорения можно пользоваться специализированными базами вроде Exploit-DB — скорее всего, там найдутся подходящие варианты. Если ты используешь Kali Linux, то эта база у тебя уже есть и для поиска можно использовать утилиту searchsploit
.
Как видишь, мы нашли сразу несколько эксплоитов, хотя для нужной версии GitLab ничего нет. Зато есть для более новой (номер 48431), а значит, скорее всего, подойдет и к нашей.
Эксплуатируемая уязвимость срабатывает при перемещении задачи между проектами GitLab и приводит к тому, что мы можем читать файлы на удаленной машине. Однако у меня ни одна из реализаций этого эксплоита не заработала, поэтому придется все делать в ручном режиме.
Для этого нам нужно изначальное исследование, доказательство работоспособности (proof of concept) этой уязвимости. Чтобы найти его, обращаемся в Google. Нам повезло, на HackerOne (самая известная платформа для bug bounty) нашелся целый отчет. В нем рассказано, как не только читать файлы, но и получить удаленное выполнение кода (RCE)!
Для получения RCE нам нужно иметь консоль Ruby on Rails и значение secret_key_base
из файла /
. Именно для получения содержимого этого файла мы будем использовать первую уязвимость, которая позволяет читать произвольные файлы.
Закрепление
Итак, читаем файл. Создадим два проекта в GitLab, а потом перейдем к вкладке Issues и выберем New Issue. Там указываем следующее значение в качестве описания и таким образом воспользуемся уязвимостью типа path traversal.
![
Далее необходимо указать целевой проект (который мы создали вторым), после чего secrets.
можно будет загружать. Так мы получаем нужный для RCE секретный параметр.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»