目录
GitLab
GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
简单来说,GitLab就是一个与github差不多的项目管理和代码托管平台
GitLab与github的区别
itHub 和 GitLab 都是基于 web 的 Git 仓库,使用起来二者差不多,它们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。GitHub 作为开源代码库,拥有超过 900 万的开发者用户,目前仍然是最火的开源项目托管平台,GitHub 同时提供公共仓库和私有仓库,但如果使用私有仓库,是需要付费的。
GitLab 特色
(1) 允许免费设置仓库权限;
(2) 允许用户选择分享一个 project 的部分代码;
(3) 允许用户设置 project 的获取权限,进一步提升安全性;
(4) 可以设置获取到团队整体的改进进度;
(5) 通过 innersourcing 让不在权限范围内的人访问不到该资源;
所以,从代码的私有性上来看,GitLab 是一个更好的选择。但是对于开源项目而言,GitHub 依然是代码托管的首选。
漏洞介绍
在Gitlab 8.5-12.9版本中,存在一处任意文件读取漏洞,攻击者可以利用该漏洞,在不需要特权的状态下,读取任意文件,造成严重信息泄露,从而导致进一步被攻击的风险。
影响版本:
- GitLab GitLab CE/EE >=8.5 and <=12.9 (CE社区版,EE企业版(收费))
- GitLab GitLab CE >=8.5,<=12.9
漏洞复现
环境搭建
使用docker-compose.yml搭建漏洞环境,内容如下
环境:ubuntu(虚拟机的内存一定要大于1G,最好2G,不然环境起不来,起不来!!!这是我踩过的坑,一直以为是自己的compose文件有问题)
版本:Gitlab 社区版本11.1.4
version: '2'
services:
gitlab:
image: 'twang2218/gitlab-ce-zh:11.1.4'
restart: unless-stopped
hostname: 'gitlab.example.com'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.example.com'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
# 需要配置到 gitlab.rb 中的配置可以在这里配置,每个配置一行,注意缩进。
# 比如下面的电子邮件的配置:
# gitlab_rails['smtp_enable'] = true
# gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
# gitlab_rails['smtp_port'] = 465
# gitlab_rails['smtp_user_name'] = "[email protected]"
# gitlab_rails['smtp_password'] = "password"
# gitlab_rails['smtp_authentication'] = "login"
# gitlab_rails['smtp_enable_starttls_auto'] = true
# gitlab_rails['smtp_tls'] = true
# gitlab_rails['gitlab_email_from'] = '[email protected]'
ports:
- '8090:80' //映射到真实机的8090
- '443:443'
- '2222:22' //环境要用到22端口,所以映射到2222,如果不改就会和你本地的22端口产生冲突
volumes:
- config:/etc/gitlab
- data:/var/opt/gitlab
- logs:/var/log/gitlab
volumes:
config:
data:
logs:
然后访问8090,先注册一个用户xcc:12345678,然后才可以查看版本信息,如再后面加上/help
注册完账户就进入了首页,如下,环境到这里准备成功了
漏洞复现
1. 在当前页面点击创建项目,先创建两个项目,test1和test2,创建完test1后再回到首页同样的方式创建test2
2. payload准备
点击test1——议题——列表——new issue——编写
插入如下payload

title为payload,点击提交
3. 点击提交后自动进行了一个跳转,接着在当前页面右下角点击——移动议题——选择test2——移动
3. 点击移动后页面进行了刷新,在当前页面有个passwd,点击,立刻进行了下载,然后我们可以打开进行查看
查看passwd文件
修复建议
升级至最新版本
漏洞检测POC
实验环境版本:Gitlab社区办11.1.4
因为具体版本不同所以一些细节也会不同,不同版本脚本可能利用不成功
参考的大佬的脚本:https://github.com/thewhiteh4t/cve-2020-10977 ,其实验环版本为12.8.1,在11.1.4的版本中执行不成功,所以我修改了一下脚本
用法:python poc url 登录的用户名 登录的密码
—— 心,若没有栖息的地方,到哪里都是流浪