使用 quake 识别 GitLab 版本

admin 2023年1月18日21:29:56安全文章评论0 views2942字阅读9分48秒阅读模式

简介

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的 Web 服务。Gitlab 是被广泛使用的基于 git 的开源代码管理平台, 基于 Ruby on Rails 构建, 主要针对软件开发过程中产生的代码和文档进行管理。由于其用户基数大,版本迭代较快,近年来被披露的漏洞大多限定于部分版本。因此为方便用户识别研究 GitLab 相关漏洞,可以对公网上 GitLab 的版本进行识别。通过 QUAKE 全球大数据平台对 GitLab 使用语法app:"GitLab代码托管平台"进行搜索,其在全球范围内分布如下图所示: 

使用 quake 识别 GitLab 版本

GitLab使用范围广,使用量多。由上图可知GitLab主要用户集中在中国、美国、德国三个国家,搜索结果数量分别为599396、378253、202112。

okGitLab 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响应正文,如下图所示:使用 quake 识别 GitLab 版本

我们可以在 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 $tagsdo
    filename=$(docker run --rm -it --entrypoint "" gitlab/gitlab-ce:$tag ls $assetdir|egrep '^application-.*.css' | grep -v .gz)
    echo $tag,$filename
done

就可以获取对应版本的特定文件扩展名,如下图所示:

使用 quake 识别 GitLab 版本

在GitLab容器中,我们进入路径/opt/gitlab/embedded/service/gitlab-rails/public/assets下可以发现,该文件夹下存放着公共的静态资源,其中就包括我们所需要的内容。所以我们可以使用上述脚本来批量获取自己所需版本文件扩展名。

使用 quake 识别 GitLab 版本

下述表格为部分版本对应文件名称:

文件名 版本
/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进行搜索,结果如下图所示:

使用 quake 识别 GitLab 版本

可能存在此漏洞的GitLab版本为11.11的结果数为3922条,通过此方法我们可以更加快速和较为准确的发现存在漏洞目标。同时也可以检查自己名下是否有涉及到存在GitLab漏洞的版本暴露在公网上。

参考资料

参考资料

[1]

https://juejin.cn/post/7018141028632772621











- END -


欢迎进群


添加管理员微信号:quake_360

私信:进群    邀请您加入 QUAKE交流群

原文始发于微信公众号(360Quake空间测绘):使用 quake 识别 GitLab 版本

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月18日21:29:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  使用 quake 识别 GitLab 版本 http://cn-sec.com/archives/1520397.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: