CTF Web .git源码泄露实战详解|git-dumper工具完整复现
一、漏洞原理
网站开发使用Git做版本管理,上线部署时未删除项目根目录隐藏的 .git 文件夹,服务器未配置访问拦截规则,攻击者可直接访问 ip:端口/.git/ 获取完整版本仓库,通过Git命令读取网页源码、历史提交记录,拿到注释、后台地址、flag等敏感信息。
本次靶场地址: http://180.76.235.121:33354 ,页面提示 git很好用!聪明的我当然用! ,直接暴露Git泄露漏洞。
二、环境前置准备
1. 安装Git Windows客户端
下载 Git-2.53.0.2-64-bit.exe 默认安装,安装完成后文件夹右键可打开 Git Bash Here 终端。
2. 安装git-dumper源码下载工具
git-dumper是Python编写的Git仓库导出工具,专门用于拉取泄露的.git目录,打开Git Bash执行安装命令:
pip install git-dumper
执行后出现 Requirement already satisfied 代表安装成功,输出的黄色urllib3版本兼容警告不影响工具运行,可直接忽略。
三、完整漏洞利用实操步骤
步骤1:切换工作目录(D盘存放源码)
cd /d
命令行前缀变为 Lenovo@MINGW64 /d 即切换完成。
步骤2:使用git-dumper拉取靶机Git仓库
复制命令后,在Git Bash黑框内鼠标右键粘贴执行:
git-dumper http://180.76.235.121:33354/.git/ ./git源码文件夹
终端持续输出 Fetching 代表正在拉取仓库文件,少量404报错属于正常现象,最后出现 Running git checkout 代表源码还原完毕。
步骤3:进入下载好的仓库文件夹
输入 ls 查看D盘文件,确认仓库文件夹名为 git源码文件夹 ,执行进入目录命令:
cd git源码文件夹
前缀出现 (master) 标识,说明当前处于Git仓库根目录。
步骤4:查看提交记录,判断仓库版本情况
bgit log
日志仅输出一条 init 初始化提交,代表仓库无历史版本,不能执行版本回滚命令 git reset --hard HEAD^ ,强行执行会抛出参数报错。
步骤5:查看完整提交源码,提取Flag(核心操作)
由于无历史版本,直接使用 git show 打印当前提交全部网页代码:
git show
终端输出 index.html 完整HTML源码,在页面注释中找到隐藏flag:
flag{92aa7e30-fa34-48e8-9696-0578940ee4d2}
四、实操高频报错踩坑汇总
1. bash: cd: git_source: No such file or directory
自定义文件夹名称与实际下载目录不匹配,先用 ls 命令查看当前目录所有文件,确认真实文件夹名称后再cd进入。
2. fatal: ambiguous argument 'HEAD^': unknown revision
仓库仅有1条初始化提交,不存在上一个历史版本,放弃回滚操作,直接使用 git show 读取完整源码。
3. No stash entries found.
仓库无暂存、未保存的临时文件, git stash pop 命令无任何作用,无需执行。
