log
当dirsearch 扫描一下,命令:
python dirsearch.py -u url/.git 发现存在了git泄露
借助kali里面,打开GitHack所在的目录,然后
输入:
python2 GitHack.py -u url/.git/
必须要用Python2
tree 命令 可以看到完整目录
接下来,输入
git diff HEAD^
Stash
同样步骤后
输入 git stash list
输入 git stash pop
最后cat一下
index
跟上面的步骤差不多
知识点:
1.什么叫做git泄露?
git泄露指的是开发人员在开发过程中遗忘删除 .git 文件夹,导致攻击者可以通过 .git 文件夹中的信息获取开发人员提交过的所有源码。从而导致服务器被攻击沦陷。
2.git泄露原理
通过泄露的.git文件夹下的文件,还原重建工程源代码
解析.git/index (index 这个文件就是我们后面提到的暂存区(stage),是一个二进制文件)文件,找到工程中的所有
去 .git/objects/(objects 所有的Git对象都会存放在这个目录中,对象的SHA1哈希值的前两位是文件夹名称,后38位作为对象文件名) 文件夹下下载 对应的文件
zlib解压文件,按原始的目录结构写入源代码
在git中,这些对象存储文件都是通过zlib进行压缩的,所以我们可以使用zlib将其解压出来,来看看这个文件里面存储的内容是什么:
解压代码如下:
import zlib
import requests
urla = "解压文件地址"
re = requests.get(urla)
ss = re.content
word = zlib.decompress(ss)
print(word)
3. ./git
使用git init初始化git仓库的时候,会生成一个.git的隐藏目录,git会将所有的文件,目录,提交等转化为git对象,压缩存储在这个文件夹当中。
利用 dirsearch鉴别git泄露就是利用这个原理
4.git的基本命令和git库工作原理
git init
新建一个文件夹,初始化一个空的git仓库
git add
将工作目录中对文件的修改或新增添加到暂存区(stage)。git被通知要追踪文件的修改
git commit
将暂存区的文件提交到版本库中,永久保存
git status
查看git库中文件的状态。已经被修改的文件,暂存的文件,未被跟踪的文件
tree
以树状图的形式列出目录的所有内容
创建一个文件,并用git add追踪它,再用git commit提交
git log
查看所有的提交数据
git ls-files -u
显示冲突的文件,-s是显示标记为冲突已解决的文件
git diff
对比工作区和stage文件的差异
git diff -cached
对比stage和branch之间的差异
git ls-files -stage
检查保存在stage的文件
git reset -hard HEAD
放弃工作区和index的改动,HEAD指针(这个文件包含了一个档期分支(branch)的引用,通过这个文件Git可以得到下一次commit的parent)仍然指向当前的commit
git checkout
恢复被修改的文件
git reflog
查看回滚之前的版本
git stash
保存当前工作目录的临时状态
git stash save “message”
将保存到当前工作目录状态到一个新的stash,并添加一条可选的消息来描述stash的内容
git stash list
查看当前保存的stash列表
git stash show
查看最新的stash
git stash apply
将某个stash的变更应用到当前工作目录
git stash pop
与git stash apply相似,但是应用完后删除
git stash --all
保存所有修改