CTFHub技能树-Git泄漏-Stash
目录
一、前提知识
1.什么是git stash
2.git文件目录结构
3.git中对象指向
二、解题过程
方法一:使用GitHack
方法二:使用Git_Extract工具,这个是自动解析不用git stash等操作,直接得到flag
当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。请尝试使用BugScanTeam的GitHack完成本题
一、前提知识
1.什么是git stash
应用场景
比如你正在dev 分支开发一个新需求,此时突发一个bug需要你紧急修复,但新的需求并没有开发完成还不想提交代码,怎么办?这时就是 git stash 发挥作用的时候了,它可以将没开发完的代码保存到 堆栈区,切换到新的分支修复bug,等 bug 修复完可以再切换为 dev 分支,释放保存的代码继续之前未完的开发。
使用方法
将当前未提交的修改(即,工作区的修改和暂存区的修改)先暂时储藏起来
git stash
之后可以切换到新分支修复bug
git checkout dev
修复完之后再次切回 dev 分支继续开发,此时需要释放之前保存的代码:
git stash pop
下列命令可以查看缓存的列表:
git stash list
有时我们会发现因冲突导致 git stash pop 命令并没有消除 list 的记录,这样对我们操作造成一些干扰,这时我我们可以执行以下操作,清除记录:
git stash drop
2.git文件目录结构
.git目录:使用git init初始化git仓库的时候,生成的隐藏目录,git会将所有的文件,目录,提交等转化为git对象,压缩存储在这个文件夹当中。
COMMIT_EDITMSG:保存最新的commit message,Git系统不会用到这个文件,用户一个参考文件
config:Git仓库的配置文件
description:仓库的描述信息,主要给gitweb等git托管系统使用
HEAD:这个文件包含了一个档期分支(branch)的引用,通过这个文件Git可以得到下一次commit的parent
hooks:这个目录存放一些shell脚本,可以设置特定的git命令后触发相应的脚本;在搭建gitweb系统或其他
git托管系统会经常用到hook script(钩子脚本)
index:这个文件就是我们前面提到的暂存区(stage),是一个二进制文件
info:包含仓库的一些信息
logs:保存所有更新的引用记录
objects:所有的Git对象都会存放在这个目录中,对象的SHA1哈希值的前两位是文件夹名称,后38位作为对象文件名
refs:这个目录一般包括三个子文件夹,heads、remotes和tags,heads中的文件标识了项目中的各个分支指向的当前commit
ORIG_HEAD:HEAD指针的前一个状态
3.git中对象指向
来自:Git信息泄露原理解析及利用总结 - FreeBuf网络安全行业门户
二、解题过程
方法一:使用GitHack
使用dirsearch扫描网站
发现git泄漏
使用GitHack下载.git文件
使用git stash list查看暂存的代码,然后使用git stash pop将代码从暂存堆栈中拉去出来
cat查看文本得到flag
方法二:使用Git_Extract工具,这个是自动解析不用git stash等操作,直接得到flag
直接拿到flag