Git泄露
Git是分布式版本控制系统。参考文章Git作用描述。
为什么Git会泄露开发人员在开发时,常常会先把源码提交到远程托管网站(如github),最后再从远程托管网站把源码pull到服务器的web目录下。因为.git文件时一个隐藏文件,如果一不小心把.git文件同样给提交,就造成此漏洞。利用.git文件恢复网站的源码,而源码里可能会有数据库的信息。
利用.git恢复文件原理
这一篇文章讲的不错,容易理解.git信息泄露漏洞-简明原理及利用方法。
想要恢复文件分为俩步:
- 在Git中
commit
后的文件都对应这一个hash值,找到hash即可打开文件 - 打开文件访问
http://xxx.com/.git/object/9e/859e6e72aceb01362fd35df50628b1c96071f9
即可打开文件
9e859e6e72aceb01362fd35df50628b1c96071f9就是文件hash
GitHack找hash
首先有必要说以下hash值存在的位置
.git/refs/stash
:用于保存 git 工作状态到 git 栈,在需要的时候再恢复。
先来了解以下操作。首先dirsearch目录扫描以下
- python2 GitHack.py (url格式:http://xxx/.git)
恢复Git文件然后在GitHack所在目录下的dist目录下得到恢复的文件。 - git log:查看git日志
- git reset --hard hash: 命令用于回退版本,可以指定退回某一次提交的版本。关于加不加hard区别,是否恢复工作区文件。加了–hard,我们才可以看到文件。git reset 加不加 --hard的区别彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉,相当于硬着路,回滚最彻底。如何使用git命令回滚到指定版本以及返回到新版本。
- cat filename: 查看文使用
- git stash :备份当前工作区的内容,保存到git 栈中 ,回来再通过 git stash pop 取出来。
- git stash show:显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
- git stash pop:取出git 栈中的文件
题目练习
CTFHub练习
第一道题是:log。首先dirsearch扫描,然后Githack还原文件再到dist的目录下打开GitBash打开文件,git log查看日志,git reset恢复版本,ls查看目录,cat打开文件。
第二道题:stash。存储,这是有关git栈命令的。关于git stash和git stash pop的文章。首先dirsearch扫描,然后GitHack还原文件再到dist目录下打开GitBash,英文提示过文件在暂存区所以Git stash pop
查看暂存区文件,cat读取文件。
第三道题:Index。首先dirsearch扫描,然后Githack还原文件再到dist的目录下打开GitBash打开文件,git log查看日志,git reset恢复版本,ls查看目录,cat打开文件。