CTFHub技能树 git泄露3道题练习--遇到没有master如何解决!!!
题源:CTFHub
做题目的时候明明步骤很简单,但是master那里一致报错,试验了好几遍终于找到解决办法了
题目1:Log
先用dirsearch进行扫描
发现存在.git文件
使用gitHack工具
我们来到当前目录并打开,根据提示输入:git log
发现没有正确克隆
借助git_dumper正确复原仓库
git_dumper
是一款用于获取目标网站泄露的 .git
文件夹内容的工具,在 CTF(夺旗赛) 以及漏洞挖掘等场景中常被使用,以下是其详细介绍:
基本功能
- 获取
.git
文件夹内容:当网站管理员配置不当,导致.git
文件夹可以被外部访问时,git_dumper
能够下载该.git
文件夹中的所有文件和目录结构。通过解析.git
文件夹中的对象、引用等信息,恢复出完整的 Git 仓库。这样,渗透测试人员或安全研究人员就可以获取到网站的历史版本、源代码等信息,有可能从中发现敏感信息(如数据库密码、API 密钥 )或代码漏洞。 - 还原代码历史:利用
.git
文件夹中的提交记录、分支信息等,git_dumper
可以帮助用户重建项目的开发历史,查看不同版本之间的代码差异,了解开发人员对项目的修改过程和思路。
工作原理
git_dumper
基于 Python 开发,通过分析.git
文件夹中的关键文件(如objects
目录存储 Git 对象、refs
目录存储分支和标签引用 ),向目标网站发送 HTTP 请求获取这些文件。然后,它会根据 Git 仓库的结构和文件格式,将下载的文件重新组织和解析,还原成一个完整可用的 Git 仓库。
使用方法
- 安装:一般从 GitHub 上克隆
git_dumper
项目仓库到本地,即git clone https://github.com/arthaud/git-dumper.git
。 - 运行:进入项目目录,使用 Python 运行脚本,命令格式通常为
python git_dumper.py <目标网站的.git文件夹地址> <本地输出目录>
。例如:python git_dumper.py http://example.com/.git/ output_dir
,这会将目标网站.git
文件夹内容下载到本地的output_dir
目录中。
优缺点
- 优点:操作相对简单,能够快速有效地恢复
.git
文件夹泄露的信息;对网络连接要求不高,在一般的网络环境下都能正常工作。 - 缺点:依赖于目标网站
.git
文件夹的可访问性,如果网站设置了严格的访问控制(如身份验证、IP 限制 ),则无法获取;在处理大型.git
文件夹或复杂仓库结构时,可能会耗费较长时间和较多资源。
解决题目问题过程
这里注意这个工具下载要放到dist目录下
然后使用这个工具,我使用的gitHack是python2版本的,但是git-dumper是python3适用,这点要注意
打开工具,我们使用命令:
C:\Python312\python.exe git_dumper.py http://challenge-1fbd3369b2f68fe5.sandbox.ctfhub.com:10800/.git/ output_dir
-
C:\Python312\python.exe
- 指定执行脚本的 Python 解释器路径
- 这里明确使用 Python 3.12 版本(因
git_dumper
需 Python 3 环境),避免系统默认的 Python 2 或其他版本导致兼容问题
-
git_dumper.py
- 要运行的工具脚本文件名
- 即
git_dumper
工具的主程序,负责解析并下载目标.git
仓库
-
http://challenge-1fbd3369b2f68fe5.sandbox.ctfhub.com:10800/.git/
- 目标网站泄露的
.git
仓库地址 - 这是工具要下载的数据源,包含网站的版本控制信息(提交记录、文件历史等)
- 目标网站泄露的
-
output_dir
- 本地输出目录名称
- 工具会将下载的
.git
仓库文件保存到该目录,后续可通过git
命令解析其中内容
可以看到他成功运行出来了,接下来我们查看输出目录
发现存在目录,我们接下来输入git log 查看历史
从提交记录看,add flag
提交(a7dcf898534e7db829ebcded612ae63ea42bd9e2
)添加了 flag,之后 remove flag
提交删除了它。
要想得到最终的flag,我们需要
1. 切换到 add flag
提交
git checkout a7dcf898534e7db829ebcded612ae63ea42bd9e2
2. 查看 / 提取 flag 文件
我们再返回目录进行查看
多了一个文件,应该就是题解了,把他打开
得到最终的flag,这道题结束
题目2:Stash
打开网页,直接使用GitHack进行获取
这里命令没有截图,跟上面的题基本一致,可以生成这个文件
50.html是一个错误页面,然后还是要借助git_dumper进行查看
>D:\python3.exe git_dumper.py http://challenge-937c1fe15bd8c4cb.sandbox.ctfhub.com:10800/.git output_dir
接下来查看所有目录:
在 Git 中,stash
是一个非常实用的功能,用于临时保存工作区和暂存区中的修改,以便在不提交当前工作的情况下切换分支、拉取代码或进行其他操作。以下是关于 stash
的详细介绍以及相关指令:
1. git stash
(或 git stash save
)
功能:将工作区中所有未提交的修改(包括已暂存和未暂存的文件修改)保存到一个 stash
栈中,工作区会恢复到上次提交时的状态。如果希望为 stash
操作添加描述信息,可以使用 git stash save "描述信息"
的形式。
示例:
# 临时保存工作区修改,不添加描述
git stash # 临时保存工作区修改,并添加描述
git stash save "临时保存当前修改,准备切换到其他分支"
2. git stash list
功能:列出当前仓库中所有的 stash
记录,显示每个 stash
的名称和简短描述。记录的名称格式为 stash@{n}
,其中 n
是序号,stash@{0}
表示最新保存的 stash
记录。
示例:
git stash list
# 输出类似
# stash@{0}: WIP on main: 临时保存当前修改,准备切换到其他分支
# stash@{1}: WIP on feature-branch: 保存修改去处理紧急bug
3. git stash apply
功能:恢复最新的 stash
记录(即 stash@{0}
)到工作区,但不会从 stash
栈中删除该记录。可以通过指定 stash
记录名称来恢复特定的 stash
,例如 git stash apply stash@{1}
。
示例:
# 恢复最新的stash记录到工作区
git stash apply # 恢复指定的stash记录到工作区
git stash apply stash@{1}
4. git stash pop
功能:恢复最新的 stash
记录(即 stash@{0}
)到工作区,并且将该记录从 stash
栈中删除。同样可以指定 stash
记录名称来恢复特定的 stash
并删除,如 git stash pop stash@{1}
。
示例:
# 恢复最新的stash记录到工作区,并删除该记录
git stash pop # 恢复指定的stash记录到工作区,并删除该记录
git stash pop stash@{1}
5. git stash drop
功能:删除最新的 stash
记录(即 stash@{0}
),可以通过指定 stash
记录名称来删除特定的 stash
,例如 git stash drop stash@{1}
。
示例:
# 删除最新的stash记录
git stash drop # 删除指定的stash记录
git stash drop stash@{1}
6. git stash clear
功能:清空整个 stash
栈,删除所有的 stash
记录。执行该操作后,所有通过 git stash
保存的修改记录都将被永久删除,无法恢复。
示例:
git stash clear
7. git stash show
功能:显示最新 stash
记录(即 stash@{0}
)所包含的修改内容的摘要信息。如果想查看详细的修改差异,可以使用 git stash show -p
。也可以通过指定 stash
记录名称查看特定 stash
的内容,如 git stash show stash@{1}
。
示例:
# 显示最新stash记录的修改内容摘要
git stash show # 显示最新stash记录的详细修改差异
git stash show -p # 显示指定stash记录的修改内容摘要
git stash show stash@{1}
应用场景
- 切换分支:当你在当前分支上进行开发,但还没完成工作,又需要切换到另一个分支处理紧急任务时,使用
git stash
保存当前修改,切换到目标分支处理完任务后,再恢复stash
继续之前的开发。 - 拉取代码:在拉取远程仓库的最新代码前,为了避免本地未提交的修改与远程代码冲突,可以先
git stash
保存修改,拉取代码后再恢复。 - 临时保存实验性修改:在进行一些实验性的代码修改时,使用
stash
保存修改,方便在实验失败后快速恢复到之前的状态,或者将有用的修改应用到合适的分支中 。
所以对于这道题,我们使用git stash list查看一下有那些内容
接着使用git stash pop恢复这个记录到工作区,但有冲突
再使用git stash apply去恢复
查看恢复好的文档,完成操作
题目3:Index
gitHack扫描
得到答案