目录

Git信息收集

什么是版本控制系统

为什么Git会导致信息泄露

Github搜索技巧

Git信息泄露利用方式

找到.git

把.git下载到本地

工具

用git的命令获取内容

案列

CTFhub案列演示


Git信息收集

什么是版本控制系统

Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 [1]  也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

Git 是基于 Linux内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持(wingeddevil注:这得分是用什么样的服务端,使用http协议或者git协议等不太一样。并且在push和pull的时候和服务器端还是有交互的。),使源代码的发布和交流极其方便。 Git 的速度很快,这对于诸如 Linux kernel 这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。

实际上内核开发团队决定开始开发和使用 Git 来作为内核开发的版本控制系统的时候,世界开源社群的反对声音不少,最大的理由是 Git 太艰涩难懂,从 Git 的内部工作机制来说,的确是这样。但是随着开发的深入,Git 的正常使用都由一些友好的脚本命令来执行,使 Git 变得非常好用,即使是用来管理我们自己的开发项目,Git 都是一个友好,有力的工具。现在,越来越多的著名项目采用 Git 来管理项目开发.。

分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。

如图所示是经典的git开发过程。 

在实际的开发过程中,如果我们要进行代码的恢复、备份 ,一般会遇到两个问题,一是修改仓库难以管理,二是整个工程直接打包,占用空间过多。

为什么Git会导致信息泄露

github敏感信息泄露一直是企业信息泄露和知识产权泄露的重灾区,安全意识薄弱的同事经常会将公司的代码、各种服务的账户等极度敏感的信息『开源』到github中。或者部署项目的时候,不小心把 .git 文件一起打包进去,放到web网站的目录下 ,造成信息泄露。

类似的有.java,class,war,可以通过这些还原出整个源文件和从中提取出有用的信息出来。

git有用的内容:

.git/logs/HEAD 存储了 git log 信息,可以找到历史的 commit
.git/index 缓存 git add 的文件,暂存区
.git/refs/stash git stash 把代码存入缓存区
.git/refs/heads/master 记录了 master commit hash
.git/objects/pack/.pack

Github搜索技巧

kali in:file 搜索文件中包含 kali 的代码
kali in:path 搜索路径中包含 kali 的代码
kali in:path,file 搜索路径、文件中包含 kali 的代码
shodan language:python 搜索关键字 shodan ,语言为 python 的代码
filename:config.php language:php 搜索文件名为 config.php ,且语言为 php
kali topics:>=5  标签数量大于等于 5
kali size:<1000  文件小于 1KB
kali stars:10..50  star 大于 10 小于 50
kali pushed:>2021-08-15 搜索在 2021 8 15 日之后提交的
kali pushed:2021-07-01..2021-08-01 搜索在此区间
kali created:>=2021-06-01 创建时间
kali pushed:<2021-08-01 -language:java 搜索在 2020 8 1 日前 push 代码且排除 java

Git信息泄露利用方式

找到.git

首先我们要先找到.git这个文件,我们可以通过三种方式来查找这个文件,分别是目录扫描 ,robots.txt, 搜索引擎搜索intitle:"Index of /.git" 。

.git下载到本地

第二如果我们找到了.git这个文件夹,我们需要把它下载到本地来,那么我们有什么方式可以把它下载到本地来呢?

工具

下载地址:https://github.com/BugScanTeam/GitHack

使用方法:python GitHack.py xxx.com/.git/ 这样就可以把.git文件下载到本地了。

下载地址:https://github.com/lijiejie/GitHack

下载地址:https://github.com/wangyihang/githacker

下载地址:https://github.com/WangWen-Albert/JGitHack

这里演示一下最后的一个工具使用方法(需要Java环境):

 输入以下代码运行:

java -jar JGitHack.jar

然后再RemoteUrl 后面输入路劲即可。比如 https://xxx.com/.git 就能下载到本地了。

git的命令获取内容

我们把.git文件下载到本地之后该干嘛呢?,那当然就是用git的命令获取文件的内容了,那么我们可以用哪些内容呢?

git log 获取提交记录

git reset --hard [log hash] 恢复到某个版本

git diff 对比版本差异
讲到这里是不是觉得手动进行很麻烦呢,那么有没有比较快捷的方法呢?,那当然也有,那就是用工具进行了。
项目地址: https://github.com/gakki429/Git_Extract ,这个工具会自动从.git文件里提取出有用的信息出来。

案列

讲了那么多,是不是觉得一头水雾呢?,那我们就通过一些实际的案列来进行演示吧。

CTFhub案列演示

这里我们进入到CTFhub中来做题。

 

 首先我们打开靶场,看到如下界面。

然后我们去扫它的目录,扫出来一个包含.git文件。

 我们访问它,出现如下界面。

到这里,我们能没发现出什么有用的东西。那么按照我们之前所讲的思路,就该把这个文件下载到本地来。

这里我们用之前提到过的工具把它下载到本地来。

工具执行成功后会把文件放入dist文件夹内。

然后查看dist文件夹。发现如图下所示的一个文件。

 我们进入这个文件夹内,然后你会发现没有git这个文件,那是因为git文件夹是隐藏的,我们需要通过ls -a 来列出隐藏文件。

 然后我们访问这个.git文件。

cd .git

 

 查看到如下文件。

 然后我们通过git log命令来查看他的提交记录:

 然后我们通过git diff来查看两个版本之间的差别,发现差别如图下所示,就是删除了flag这个字符串。到此,我们找到了flag,把它复制下来。

 然后我们回到靶场提交flag:

 

 

 成功。

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐