简介
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的 Web 服务。Gitlab 是被广泛使用的基于 git 的开源代码管理平台, 基于 Ruby on Rails 构建, 主要针对软件开发过程中产生的代码和文档进行管理。由于其用户基数大,版本迭代较快,近年来被披露的漏洞大多限定于部分版本。因此为方便用户识别研究 GitLab 相关漏洞,可以对公网上 GitLab 的版本进行识别。通过 QUAKE 全球大数据平台对 GitLab 使用语法app:"GitLab代码托管平台"
进行搜索,其在全球范围内分布如下图所示:
GitLab使用范围广,使用量多。由上图可知GitLab主要用户集中在中国、美国、德国三个国家,搜索结果数量分别为599396、378253、202112。
GitLab CI/Runner
GitLab CI 是GitLab内置的进行持续集成的工具,使用其需要在仓库根目录下创建.gitlab-ci.yml 文件,并配置GitLab Runner;每次提交代码的时候,gitlab将自动识别到.gitlab-ci.yml文件,并且使用对应Gitlab Runner执行该脚本。GitLab-Runner是一个用来执行.gitlab-ci.yml 脚本的工具。当相应的项目发生变化时,GitLab-CI就会通知GitLab-Runner执行对应的脚本。
HTTP响应正文
通过QUAKE搜索语法 app:"GitLab代码托管平台"搜索并观察HTTP响应正文,如下图所示:
我们可以在 HTTP 响应正文中发现某些文件名可能与特定版本的 GitLab 服务器相关联。简而言之,应该是每当GitLab进行代码更新以及许多其他事件时,GitLab 的持续集成 (CI) 系统将启动编译静态资产的工作。此项工作会导致某些文件例如上图所示css文件具有唯一的文件扩展名,这样我们可以通过下载确定版本的GitLab托管平台来获取特定的文件扩展名,并将未知版本扩展名和原始版本进行映射来确定版本。
获取版本文件扩展名
我们可以从 hub.docker 中下载自己所需搜寻版本镜像,例如版本gitlab-ce:11.11.4-ce.0
。我们先在当前路径下创建tags.txt来记录下载的镜像版本号。然后执行如下脚本:
#!/usr/bin/env bash
assetdir="/opt/gitlab/embedded/service/gitlab-rails/public/assets"
tags=$(cat ./tags.txt)
for tag in $tags; do
filename=$(docker run --rm -it --entrypoint "" gitlab/gitlab-ce:$tag ls $assetdir|egrep '^application-.*.css' | grep -v .gz)
echo $tag,$filename
done
就可以获取对应版本的特定文件扩展名,如下图所示:
在GitLab容器中,我们进入路径/opt/gitlab/embedded/service/gitlab-rails/public/assets
下可以发现,该文件夹下存放着公共的静态资源,其中就包括我们所需要的内容。所以我们可以使用上述脚本来批量获取自己所需版本文件扩展名。
下述表格为部分版本对应文件名称:
文件名 | 版本 |
---|---|
/assets/application-a0c92bafde7d93e87af3bc2797125cba613018240a9f5305ff949be8a1b16528.css | 13.7 |
/assets/application-c8d8d30d89b00098edab024579a3f3c0df2613a29ebcd57cdb9a9062675558e4.css | 13.0 |
/assets/application-4abc4e078df94075056919bd59aed6e7a0f95067039a8339b8f614924d8cb160.css | 13.1 |
/assets/application-def1880ada798c68ee010ba2193f53a2c65a8981871a634ae7e18ccdcd503fa3.css | 12.3 |
/assets/application-969119f639d0837f445a10ced20d3a82d2ea69d682a4e74f39a48a4e7b443d5e.css | 13.4 |
/assets/application-455d114267e5992b858fb725de1c1ddb83862890fe54436ffea5ff2d2f72edc8.css | 13.3 |
/assets/application-3407a4fd892e9d5024f3096605eb1e25cad75a8bf847d26740a1e6a77e45b087.css | 12.4 |
/assets/application-aeddf31361633b3d1196c6483f25c484855e0f243e7f7e62686a4de9e10ec03b.css | 12.6 |
/assets/application-bec9544b57b8b2b515e855779735ad31c3eacf65d615b4bfbd574549735111e7.css | 12.7 |
实际应用
例如之前爆出的GitLab 远程命令执行漏洞(CVE-2021-22205),其因为其没有正确验证传递给文件解析器的图像文件,导致远程命令执行,可执行系统命令。受到影响的GitLab(CE/EE)版本如下:
11.9 <= GitLab(CE/EE)< 13.8.8
13.9 <= GitLab(CE/EE)< 13.9.6
13.10 <= GitLab(CE/EE)< 13.10.3
我们以版本11.11为例来进行搜索,用上述方法获得该版本特定文件扩展名:
/assets/application-5440e2dd89d3c803295cc924699c93eb762e75d42178eb3fe8b42a5093075c71.css
通过对指纹(app:"GitLab代码托管平台") AND response:"/assets/application-5440e2dd89d3c803295cc924699c93eb762e75d42178eb3fe8b42a5093075c71.css" 进行搜索,结果如下图所示:
可能存在此漏洞的GitLab版本为11.11的结果数为3922条,通过此方法我们可以更加快速和较为准确的发现存在漏洞目标。同时也可以检查自己名下是否有涉及到存在GitLab漏洞的版本暴露在公网上。
参考资料
参考资料
https://juejin.cn/post/7018141028632772621
- END -
欢迎进群
添加管理员微信号:quake_360
私信:进群 邀请您加入 QUAKE交流群
原文始发于微信公众号(360Quake空间测绘):使用 quake 识别 GitLab 版本
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论