[Web 安全] Web 信息收集 —— 敏感信息收集 — Git Hacking

🌟 想系统化学习 Web 渗透?看看这个:[Web 安全] Web 安全攻防 · 学习手册

在上一章中我们讲了 Google Hacking,即如何利用搜索引擎精确定位目标敏感信息或者脆弱资产。那么本节我们将使用 Git Hacking 技术继续对目标的敏感信息进行收集。

0x01:Git Hacking —— 技术简介

Git Hacking 的名称可能不如 Google Hacking 那么响亮,但是这并不妨碍它在实战中的地位。在笔者看来 Git Hacking 主要包括两个部分:

  • 目标源码仓库的泄露: 通过对 GitHub 等代码仓库的筛选,获取目标的项目源码。

  • 目标站点泄露的 .git 文件利用: 通过泄露的 .git 目录还原目标的整个项目源码。

进阶思考:Git Hacking 仅仅是 .git 文件泄露嘛?其它版本控制系统的工作原理 ...

0x0101:理论基础 — 版本控制系统 · Git 工具简介

Git 工具学习资料 🚀:版本控制系统 —— Git · 使用手册

笔者上面一直 .gitgit 的,相信有些小伙伴只是听过 GitHub 但是不了解 Git,所以笔者这里对 Git 工具做一个简单的介绍(如果你想更深入的了解 Git 可以参考上面提供的链接)。


Git 是当前非常流行的一款开源的分布式版本控制系统,它被广泛用于协同开发和代码管理。许多网站和应用程序都使用 Git 作为其代码管理系统,并将其部署到生成环境中以维护其代码库。

简而言之,Git 能帮你管理文件的版本变更。它能够告诉你,你在哪天修改了哪个地方,你的写作者在哪天修改了哪个地方等等,它还能让你回退到文档某次被修改前的状态。其实这个功能现在很多笔记类软件都提供了,比如 “语雀”:

看左边,就是它自动记录的关于这个文档的更迭历史,通过时间,你就可以定位某天你做的修改,将文档还原回被修改前的样子,然后继续修改,Git 也是用来干这个事情的。

0x0102:理论基础 — Git 信息泄露原理

https://zhuanlan.zhihu.com/p/64231227https://zhuanlan.zhihu.com/p/64231227

Git Hacking 其实就是目标 .git 文件的泄露,在讲解 .git 文件泄露的利用前,我们先来探讨一下,什么是 .git 文件夹,.git 文件夹泄露的危害有哪些以及什么情况下会泄露 .git 文件。

1. 什么是 .git 文件夹

Git 的本质其实就是一个文件夹,当你通过 git init(Git 工具的一个小命令)声明了这是个被 Git 管理的文件夹后,这个文件夹就会变为上图的 “本地仓库”(因为这个文件夹在你本地啦):

运行完 git init 后最大的变化,就是这个文件夹中会多一个 .git 文件夹,这个文件夹,就是 Git 用来跟踪你本地仓库文件变化的管理库,这个就是 .git 文件夹的由来和基本作用。下面是 Git 的工作区图:

上图中 “工作区” 你可以理解为一个普通的项目文件夹,程序员们在这个文件夹中进行日常代码的编写。编写完代码后,程序员需要通过 git add 方法,将工作区中的修改(注意哦,不是文件,是修改哦)提交到 .git 文件夹的暂存区,但是暂存区只是暂存修改,当你一天工作完成,或者某个模块完成,你想要保存这个更改,就需要通过 git commit 命令将本次修改提交到 .git 文件夹的某个分支上,直到此时,这个 .git 文件夹都还在你个人电脑上,别人是访问不到的。

如果你们是一个团队,共同开发一个项目,此时就需要用到 “远程仓库”,我们熟知的就是 GitHub、GitCode、Gitee 这几个平台。团队领导会在这些平台上创建一个公共的仓库,然后团队中的每个人都可以将自己本地写的代码推送到这个平台上,由于这个平台是在公网上的,所以每个人都可以通过浏览器访问,每个人都可以通过 Git 提供的 pull 命令拉取最新的修改,和 push 命令将自己本地的修改推送到该公共仓库中,如此,就完成了团队的协同开发。

2. .git 文件夹泄露危害

下面,我们根据 Git 管理文件的流程,来大致理一下,可能产生危害的地方。

首先,Git 作为一个版本控制工具,它里面的 .git 文件夹肯定是存放了你当前项目的副本的,不然它是没办法给你还原某个时期的代码版本的。那这是不是说明,如果我攻击者有办法拿到你的 .git 文件夹中的内容,我就可以尝试还原出你的整个项目文件?哪怕你把 “工作区” 的文件全部删除了也没用。

这就是最大的一个危害,攻击者通过 .git 文件夹还原你整个项目,然后通过对项目进行代码审计,挖掘你产品中存在的漏洞,再进行攻击,这种一打一个准,还非常容易出现危害极大的 0 day 漏洞。

其次我们在开发某个软件的时候,大部分都会用到数据库,或者其他第三方平台的密钥,如果你不小心把这些东西写到了项目中,这个项目又被 Git 进行管理,那危害是不是又来了,.git 文件夹里铁有你的账号密码 !!

3. .git 文件夹泄露的途径

.git 文件泄露的途径一般也就分本地仓库泄露和远程仓库泄露。

本地的,比如你的系统存在任意文件读取漏洞,或者你权限控制没做好(当然也可能是你项目打包的时候,直接顺手就把 .git 文件夹一起打包了进去),直接能让其它用户访问你项目的 .git 文件夹,这都会造成泄露(攻击者跑你现场拿 U 盘拷贝何尝不是一种泄露呢?)。

远程的,属于是员工安全意识不足,直接把私密项目源码推送到公共仓库中,针对这种情况,有没有 .git 文件夹都无所谓,因为你源码公开了嘛(其实默认情况下,Git 做了安全限制,你不特意配置,你本地的 .git 文件夹一般是推送不上去的)。

0x0103:理论基础 — Git 信息泄露基础利用流程

下面笔者介绍一个常见的 Git 信息泄露利用链:

1. 找到目标泄露的 .git 文件夹

在对目标定点渗透前,攻击者通常会对目标进行信息收集,信息收集中的目录扫描阶段,是最有可能直接扫描出 .git 文件夹的(其它版本控制器的文件夹后续操作流程类似)。

除了定点渗透,我们其实还可以通过前面介绍的 “Google Hacking” 去通过目录遍历漏洞来查找 .git 文件夹,目录遍历漏洞通常长下面这样(页面都给你了,Google Hacking 还不会构造,就回去补补基础吧):

2. 把目标的 .git 文件夹下载到本地

自动利用工具 🚀:敏感信息泄露利用工具 —— GitHack · 使用手册

找到了目标泄露的 .git 文件夹,此时我们就需要把该文件夹下的所有内容都下载到我们本地。我们自己一个一个手动下是不可能的,此时可以利用笔者上面提供的那个工具,进行一键下载。

3. 利用 Git 相关命令获取所需信息

拿到了目标的 .git 文件夹,此时,我们就可以通过 Git 自带的一些命令,来收集有关目标项目的一些敏感信息了,比如项目源码,项目曾经提交过的记录等等,笔者这里列举几个命令:

git log                      # 获取提交的历史记录
git reset --hard <coomid_id> # 恢复项目到某个提交的版本
git diff                     # 查看工作区和暂存区差异,通过携带参数可以对比各版本差异

不会命令也没事,笔者同样找到了懒人工具给你(这个工具笔者实测感觉其实一般):

自动利用工具 🚀:敏感信息泄露利用工具 —— GitExtract · 使用手册

0x02:Git Hacking —— 案例演示

Git Hacking Test:GitHackingTest.zip

上面这个是笔者自己写的一个小案例(非常简单),来演示一下 Git Hacking 实战中的简单用法。

0x0201:GitHackingTest 环境搭建

首先从上面提供的地址下载并解压 GitHackingTest.zip,解压后长下面这样:

然后通过 Python 使用下面的命令在当前目录下开放一个临时的 Web 服务器即可:

python -m http.server 80

我们访问下面的路径,只要能现实 Web 路径就证明环境搭建 OK 了(界面好看吧,其实和我们做题没啥关系 😏):

http://localhost/

0x0202:GitHakcingTest 实战流程

首先,访问靶场首页,我们第一步是不是应该做个信息收集?先来个目录爆破(笔者使用的是 dirsearch):

python dirsearch.py -u http://localhost/

如上,发现靶场中存在 .git 文件夹,那么下一步是不是就是把文件夹 down 下来,这里我们使用 GitHack(BugScanTeam 版):

python2 GitHack.py http://172.16.0.1/.git/

程序运行完成后,会在 dist 目录中生成对应的结果:

然后我们进入这个 172.16.0.1(是我本地的靶场地址 IP,你的可能不太一样),输入下面的命令,看看里面有啥:

ls -al

如上,啥也没有,但有一个 .git 文件夹,有这个就行了,我们就可以还原出任意版本的原始项目了。输入下面的命令,查看一下目标的历史提交信息:

git log

如上,是不是有一次提交叫 “add flag.txt“ ?我们尝试还原这个版本(这里涉及了 Git 的时间法则):

Git 工具学习资料 🚀:版本控制系统 —— Git · 使用手册

git reset --hard HEAD^^

如上,通过回滚,我们成功利用 .git 文件夹回溯了项目的某个历史版本并拿到了 Flag !!

在本次练习中,它是 Flag,而在实战中,它可能就是后端数据库的连接密码、第三方的认证密钥以及整个项目的原始代码 !!!

0x03:Git Hacking —— 拓展内容 · GitHub 搜索技巧

在针对某个目标进行渗透前,我们可以去像 GitHub、Gitee、GitCode 等这些在线平台上搜索与目标相关的信息、代码库,如果运气好,碰到某个员工安全意识不足,直接把数据库配置上传了,那么恭喜你,直接捡到了一个漏洞(如果是公网数据库,直接高危走起)。

0x0301:GitHub 搜索技巧 — 官方文档

那么如何进行高效的收集呢?其实 GitHub 也和 Google 等这些搜索引擎一样,提供了一套自己的语法库,下面是官方文档(虽然有中文版,但中文版翻译有点不对劲,凑合着看吧):

GitHub 搜索技巧

0x0302:GitHub 搜索技巧 — 手动收集

下面是笔者收集的一些常用的 GitHub 手动搜索的语法(其实有了语法还不够,你还得有用于搜索的敏感词,这个呢,就得靠诸位的积累了):

示例含义
in:name baidu搜索标题中含有关键字 baidu 的内容
in:description baidu搜索仓库描述中包含 baidu 的内容
in:readme baidu搜索 Readme.md 文件中包含 baidu 的内容
starts:>3000 baidustarts 数量大于 3000 的仓库中搜索关键字
starts:100..200 baidustarts 数量大于 100 小于 200 的仓库中搜索关键字
forks:>100 baiduforks 数量大于 100 的仓库中搜索关键字
size:>=5000 baidu指定仓库大于 5000k (5M) 的搜索关键字
pushed:>2024-02-12 baidu发布时间大于 2024-02-12 的搜索关键字
created:>2019-02-12 baidu创建时间大于 2019-02-12 的搜索关键字
user:name按照用户名搜索
license:apache-2.0 baidu明确仓库的 LICENSE 搜索关键字
language:java baidu在 java 语言的代码中搜索关键字
user:baidu in:name baidu组合搜索,用户名 baidu 的标题含有 baidu 的
in:file kali搜索文件中包含 kali 的代码
in:path kali搜索路径中包含 Kali 的代码
in:path,file kali搜索路径、文件中包含 Kali 的代码
filename:config.php搜索包含文件名 config.php 的
topics:>=5 kali标签数量大于等于 5 的
kali forks:>100 -language:java搜索包含 kali 关键字,且 forks > 100 并且开发语言不包含 java 的仓库

0x0303:GitHub 搜索技巧 — 搜索示例

在上一节中笔者列举了一些手动收集的示例,那么本节笔者简单做个演示。比如,我们要搜索包含 Git Hacking 的仓库:

"Git Hacking"

然后你看那个 jcesarstef 不顺眼,此时就可以用下面这个语法把他排除在外:

"Git Hacking" -user:jcesarstef

如上,可以看到,结果数量从 76 变成了 75,且 jcesarstef 这个用户的仓库没了。OK,一次简单的 GitHub 高级搜索就结束了(其余的语法就靠你自己练习啦)。


我们网安最喜欢的就是自动化了,其实 Git Hakcing 也有一堆自动化项目,感兴趣的读者可以去 GitHub 上搜搜(找到好用的项目记得私聊笔者分享一下 😏)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blue17 :: Hack3rX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值