NU1l_CTF_信息收集_git泄露

0x00 Git的诞生

事情是这样的,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!

你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。

不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。

安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。

Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:

Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。

0x01 Git安装&基本使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#安装git
$ yum install git

#配置基本信息
$ git config --global user.name "icefeng199"
$ git config --global user.email "admin@icefeng.cc"
$ git config --list

#创建版本库 又名仓库 英文名叫:repository
$ git init #目录变repository,当前目录多了一个.git 要ls -a


#文件添加到版本库
#PS:所有的版本控制系统 只能追踪文本文件的具体变化 二进制文件只能追踪大小,无法追踪具体变化
$ git add fisrt.txt
$ git commit -m "wrote a fisrt get file"
#修改fisrt.txt文件

$ git status #查看当前仓库的状态
$ git diff #查看当前修改了什么内容
$ git log #显示最近到最远提交的日志 --pretty=oneline 单行查看

$ git reset --hard HEAD^ #退回上一个版本 HEAD是指当前版本
$ git reset --hard commit_id #可以在任意版本之间穿梭

0x02.Git的文件夹分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
├── HEAD   #映射到ref引用,能够找到下一次commit的前一次哈希值
├── config # 存放git的一些信息
├── description #仓库的描述信息,主要给gitweb等git托管系统使用
├── hooks #Shell脚本
├── index #暂存区(stage),是一个二进制文件
├── info #git仓库的一些信息
│ └── exclude
├── objects # 存放所有git对象的地方
│ ├── 0c
│ │ └── 14454dd8d472ef27843ac8c86bdba161c27a03
│ ├── info
│ └── pack
└── refs
├── heads #所有本地分支文件
└── tags #文件夹是使用git stash命令时,会将生成的git对象的哈希值存储到stash文件里

0x3 Git泄露获取

1.GitHack的使用

GitHack是一个.git泄露利用脚本,通过泄露的.git文件夹下的文件,重建还原工程源代码。

渗透测试人员、攻击者,可以进一步审计代码,挖掘:文件上传,SQL注射等web安全漏洞。

  • 用法
1
python2 GitHack.py http://www.openssl.org/.git/
  • 原理
    • 解析.git/index文件,找到工程中所有的: ( 文件名,文件sha1 )
    • 去.git/objects/ 文件夹下下载对应的文件
    • zlib解压文件,按原始的目录结构写入源代码

2.Githack 一把梭

1
git log 查看之前的提交,并且回到上个版本看有无flag


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!