Gitlab任意文件读取&RCE
影响版本
GitLab GitLab CE/EE >=8.5 and <=12.9
(CE
社区版,EE
企业版(收费))GitLab GitLab CE >=8.5,<=12.9
环境搭建
搭建gitlab1
环境
CE11.9.9
下载地址ip:192.168.4.18
CentOS 7
- 安装依赖
yum -y install policycoreutils openssh-server openssh-clients postfix
systemctl enable postfix && systemctl start postfix //设置自启
yum install policycoreutils-python
下载完成后,进入gitlab-ce-11.9.9-ce.0.el7.x86_64.rpm
所在的目录
执行命令
rpm -i gitlab-ce-11.9.9-ce.0.el7.x86_64.rpm
出现如下界面,代表安装成功
为了防止后续出现502错误
如下
进行如下配置
vim /etc/gitlab/gitlab.rb
修改url
external_url 'http://192.168.4.18:8899'
兵器将下面三行打开注释
1 | unicorn['port'] = 8088 |
防火墙放行相应的端口
这里做测试就直接关了防火墙了
1 | systemctl status firewalld.service //查看防火墙状态 |
重新加载配置,此过程可能稍等一会
gitlab-ctl reconfigure
重启服务
gitlab-ctl restart
稍等一会会,使用如下命令,当内存稳定后可访问
free -m
访问成功
修改密码为root/admin123
按照同样得方法搭建gitlab2(192.168.4.19)
任意文件读取漏洞
Create a project
命名为testa
,点击创建
再创建一个testb
在testa
中创建一个issue
在Description
出填写payload
1 |  |
生成后点击Move issue
将其移动到testb
,点击下图的超链接即可下载
成功获取到secret_key_base
这是gitlab1:192.168.4.18
的secret_key_base
RCE(失败)
修改gitlab2:192.168.4.19
的secret_key_base
为获取到的值
记得备份原文件
1 | cp /opt/gitlab/embedded/service/gitlab-rails/config/secrets.yml /opt/gitlab/embedded/service/gitlab-rails/config/secrets.yml.bak |
在gitlab2
中打开gitlab-rails
终端
gitlab-rails console production
依次输入如下命令
1 | request = ActionDispatch::Request.new(Rails.application.env_config) |
获取到cookie后,发送到服务器上
如下,但是目标站没有生成文件
end
目测这是一个反序列化的rce
文件读取获取的id
值,可能跟cookie
的解密相关
最后把cookie
反序列化,触发的rce
,但是现在也分析不到暂且放放吧