信息收集(八)
目录
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 ,且语言为 phpkali 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/WangWen-Albert/JGitHack
这里演示一下最后的一个工具使用方法(需要Java环境):
输入以下代码运行:
java -jar JGitHack.jar
然后再RemoteUrl 后面输入路劲即可。比如 https://xxx.com/.git 就能下载到本地了。
用git的命令获取内容
我们把.git文件下载到本地之后该干嘛呢?,那当然就是用git的命令获取文件的内容了,那么我们可以用哪些内容呢?
git log 获取提交记录
git reset --hard [log hash] 恢复到某个版本
案列
讲了那么多,是不是觉得一头水雾呢?,那我们就通过一些实际的案列来进行演示吧。
CTFhub案列演示
这里我们进入到CTFhub中来做题。
首先我们打开靶场,看到如下界面。
然后我们去扫它的目录,扫出来一个包含.git文件。
我们访问它,出现如下界面。
到这里,我们能没发现出什么有用的东西。那么按照我们之前所讲的思路,就该把这个文件下载到本地来。
这里我们用之前提到过的工具把它下载到本地来。
工具执行成功后会把文件放入dist文件夹内。
然后查看dist文件夹。发现如图下所示的一个文件。
我们进入这个文件夹内,然后你会发现没有git这个文件,那是因为git文件夹是隐藏的,我们需要通过ls -a 来列出隐藏文件。
然后我们访问这个.git文件。
cd .git
查看到如下文件。
然后我们通过git log命令来查看他的提交记录:
然后我们通过git diff来查看两个版本之间的差别,发现差别如图下所示,就是删除了flag这个字符串。到此,我们找到了flag,把它复制下来。
然后我们回到靶场提交flag:
成功。