首先,介绍一下git。Git是一个开源的分布式版本控制系统 ,简单的可以理解为Git 是一个内容寻址文件系统,也就是说Git 的核心部分是键值对数据库。 当我们向 Git 仓库中插入任意类型的内容(开发者们在其中做的版本信息修改之类的操作),它会返回一个唯一的键,通过该键可以在任意时刻再次取回该内容。
git泄露漏洞成因:在配置不当的情况下,可能会将“.git”文件(git目录:使用git init初始化git仓库的时候,生成的隐藏目录,git会将所有的文件,目录,提交等转化为git对象,压缩存储在这个文件夹当中)直接部署到线上环境,这就造成了git泄露问题。
检测方法还是dirsearch
就是引入了新的工具:githack
介绍实战的话,还是以ctfhub为主
看题目已经给了提示
直接用dirsearch扫
这里使用命令过滤了一些无用的回显
dirsearch常用命令
-u 指定url
-e 语言 指定网站语言,一般用-e*即所有语言
-i 保留响应状态码(不同状态码用逗号分隔,可指定范围,如-i 200,300-400)
-x 排除响应状态码(不同状态码用逗号分隔,可指定范围,如-x 400,400-500)
-w 指定字典
-r 递归目录(即可扫描新扫描出的目录下的目录)
-random-agents 使用随机User-Agent
成功找到了.git文件
进入到githack文件地址下,使用命令克隆目录
这些事githack常用的命令:
git init 初始化一个git仓库
git add x.txt 添加文件
git commit -m "wrote a test file" 提交文件
git rm x.txt 删除文件
git commit -m "remove x.txt" 恢复文件
git stash pop 读取最近一次保存内容
git stash list 列出所有备份,可以利用这个列表决定从哪个地方恢复
git status 查看当前仓库状态和内存状态
git reset --hard 回退版本
git diff 对比
git log 显示到HEAD所指向的commit为止的所有历史记录,从最近到最远,可以看到3次
拷贝成功,进入到这个文件下(用gui界面直接拖可能更方便一点),
使用gitlog显示当前版本分支历史
我的理解就是
remove flag 表示当前版本
add flag 表示这次提交的版本
init表示初始的版本
然后就是使用git diff命令来对比提交的版本
忘记截图了,效果大概就是这样,就可以得到flag
后面这个题也是同样的步骤
同样的操作发现,对比信息中没有flag,但是有一个txt文件很可疑
查看发现,找不到这个文件,说明可能被删除了
使用命令读取最近一次保存的内容成功得到了flag
第三题通过与第一题同样的方法也得出了flag
纯小白,如有错误欢迎指正。