当前位置: 首页 > news >正文

CTFHub 信息泄露通关笔记9:Git泄露 Index

目录

一、Git泄露

1、git 简介

2、git Index

(1)基本概念

(2)工作原理

二、GitHack工具

1、工具简介

2、下载安装

(1)下载安装GitHack

① Git命令下载

② Web页面下载

(2)基本使用方法

3、利用步骤

三、渗透实战

1、打开靶场

2、目录扫描发现.git文件

3、githack渗透

4、查看flag

(1)进入源码目录

(2)查看暂存区文件

(3)获取flag


本文通过CTFHub的信息泄露-Git泄露-Git Index关卡的渗透实战,系统剖析了Git泄露的机制、风险及利用技术。当开发人员不慎将.git目录部署至生产环境时,攻击者可借此获取项目源码、提交历史等关键数据。通过实战演示,文章完整呈现了从靶场目录扫描发现.git泄露,到运用GitHack工具成功还原项目并获取flag的全过程。

一、Git泄露

在信息安全领域,.git 文件泄露是一种常见且危害较大的敏感信息泄露场景。它源于 Git 版本控制系统在项目中生成的 .git 目录被意外暴露在 Web 服务器上,攻击者可通过该目录获取项目的完整源代码、历史提交记录、配置文件等敏感信息。

1、git 简介

Git 作为分布式版本控制系统,会在项目根目录生成 .git 目录,用于存储版本控制所需的所有元数据,包括:

  • 版本历史:所有提交记录(commits)、分支(branches)、标签(tags)等。
  • 文件快照:项目文件的不同版本数据(存储在 objects 目录)。
  • 配置信息:仓库配置(config)、当前分支指针(HEAD)、索引文件(index)等。

核心子目录及文件如下表所示。

核心文件在渗透中的作用
.git/index攻击的路线图。提供所有暂存文件的路径及其对应的哈希值,允许攻击者系统地下载整个代码库。
.git/HEAD指示当前活动分支。
.git/refs/heads/*提供分支最新提交的哈希值,从而获取提交历史。
.git/objects/*存储所有数据的数据库。根据哈希值从这里下载文件内容、目录结构和提交信息。

2、git Index

(1)基本概念

Git Index(索引),通常被称为 暂存区(Staging Area),是 Git 版本控制系统中的一个核心概念和关键文件(通常位于 .git/index)。它扮演着一个中间区域的角色,是工作目录(Working Directory)和版本库(Repository)之间的桥梁。

  • 物理存在:Index 是一个二进制文件.git/index),其格式是明确定义的,但通常不直接被人阅读。

  • 内容:它包含一个由路径名称、SHA-1 对象哈希、时间戳、文件模式等组成的列表。

  • 查看内容:可以使用 git ls-files --stage 命令以可读的方式查看当前 Index 的内容。

  • 重要性:在 CTF 安全挑战中,如果 .git 目录被意外暴露在网站上,攻击者下载到 index 文件后,可以解析出所有文件的路径及其哈希值,从而系统地下载并重建整个网站的源代码,造成严重的信息泄露。

(2)工作原理

  • 暂存修改

    当你在工作区修改文件后,需要通过 git add <文件名> 命令将修改添加到 index 中。此时,index 会记录这些修改的快照,作为 “下次提交的候选内容”。

  • 准备提交

    执行 git commit 时,Git 会根据 index 中记录的内容创建一个新的提交(commit),而非直接提交工作区的当前状态。这意味着:

    • 未添加到 index 的修改不会被提交。
    • 可以通过多次 git add 分批暂存不同文件的修改,最后一次性提交。

综上所述,index 的数据实际保存在 Git 仓库的 .git/index 文件中,是一个二进制文件,记录了暂存文件的元信息(如文件名、哈希值、权限等),其角色如下所示。

# 1. 在工作区修改文件(如 edit file.txt)
# 2. 将修改添加到 index(暂存)
git add file.txt# 3. 此时 index 中记录了 file.txt 的修改
# 4. 提交 index 中的内容到本地仓库
git commit -m "修改了 file.txt"

二、GitHack工具

1、工具简介

当网站服务器意外泄露 .git 目录(如可通过 http://目标域名/.git 访问)时,GitHack 可通过解析 .git 目录下的版本控制文件(如 configindexobjects 等),还原出项目的完整源代码,包括可能包含的 flag、配置文件、敏感逻辑等信息。

项目地址: https://github.com/BugScanTeam/GitHack

特别注意:不要下错版本,github有好几个同名的GitHack,下错了无法渗透成功。(特别注意不是https://github.com/lijiejie/GitHack这个网址,从它下载是错误的)。

2、下载安装

(1)下载安装GitHack

GitHack是一个 .git 文件泄漏利用脚本,它是一个.git泄露利用脚本,通过泄露的.git文件夹下的文件,重建还原工程源代码,可通过 Git命令下载或者在官网下载源码。

① Git命令下载
sudo git clone https://github.com/BugScanTeam/GitHack

② Web页面下载

(2)基本使用方法

进入到GitHack目录中,需要使用python2来运行脚本。

#进入到目录文件夹:
cd GitHack

GitHack的使用方法中,必须存在目标 URL这个参数:指定存在 .git 泄漏的网站 URL,需以 .git/ 结尾(若输入时未以 / 结尾,工具会自动补全)。例如:http://target.com/.git/是正确的格式。Githack的使用方法如下所示,可快速利用 .git 泄露获取网站源代码。

#使用方法:
sudo python2 GitHack.py http://www.example.com/.git

其中 http://www.example.com/.git/ 是目标网站的 .git 目录 URL,执行该命令后,工具会尝试从目标 URL 还原 Git 仓库内容,还原后的文件会保存在当前目录下的 dist/ 目录中。

3、利用步骤

GitHack工具可还原 .git 目录中的完整仓库,工具会自动从目标 .git 目录下载文件,还原后的项目存储在 dist/目标域名/ 目录中,包含完整源代码和版本历史,步骤如下所示。

# 安装 Git(工具依赖)
sudo apt install git  # Ubuntu/Debian
# 克隆 GitHack 工具
git clone https://github.com/BugScanTeam/GitHack.git
cd GitHack
# 执行还原(目标为存在.git泄露的URL)
python GitHack.py http://目标域名/.git/

三、渗透实战

1、打开靶场

打开关卡如下所示,提示信息为“当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露。请尝试使用BugScanTeam的GitHack完成本题”,提示本关卡可以利用.git泄露进行渗透测试。点击打开题目,此时系统自动创建Docker环境,下图蓝色部分的URL地址就是靶场环境。

打开靶场URL,页面提示"Where is flag,具体如下所示。

http://challenge-6beed917c9e95bdb.sandbox.ctfhub.com:10800/

2、目录扫描发现.git文件

通过目录扫描工具对challenge-6beed917c9e95bdb.sandbox.ctfhub.com:10800进行渗透,这里选择使用dirmap工具进行渗透,命令如下所示。

sudo python3 dirmap.py -i http://challenge-6beed917c9e95bdb.sandbox.ctfhub.com:10800/ -lcf
  • -i http://challenge-6beed917c9e95bdb.sandbox.ctfhub.com:10800/:-i 是指定扫描目标的参数,这里的目标是一个具体的 URL(http://challenge-6beed917c9e95bdb.sandbox.ctfhub.com:10800/)。工具会默认对该 URL 进行目录扫描,探测潜在的隐藏目录或文件。

  • -lcf--loadConfigFile):该参数表示加载项目根目录下的 dirmap.conf 配置文件,使用文件中定义的详细扫描规则(如字典模式、递归扫描、请求头设置等)。

dirmap的扫描结果如下所示,在网站根目录下发现了.git文件夹。

3、githack渗透

使用githack脚本对上一步发现的网站根目录下的.git文件进行渗透测试,通过GitHack.py工具远程访问目标服务器泄露的.git仓库,自动解析仓库中的版本控制信息,还原出项目源代码文件(可能包含 flag等敏感信息),完整的命令如下所示。

sudo python2 GitHack.py http://challenge-6beed917c9e95bdb.sandbox.ctfhub.com:10800/.git  

运行结果如下所示,利用了网站部署时未删除.git版本控制目录导致的信息泄露恢复目录文件。

在当前目录的dist/challenge-6beed917c9e95bdb.sandbox.ctfhub.com_10800下成功恢复文件。如下内容展示了使用 GitHack.py 工具从目标 URL 提取 .git 版本库的全过程及结果。

└─# python2 GitHack.py http://challenge-6beed917c9e95bdb.sandbox.ctfhub.com:10800/.git____ _ _   _   _            _                                                                                                                                                         / ___(_) |_| | | | __ _  ___| | __                                                                                                                                                     
| |  _| | __| |_| |/ _` |/ __| |/ /                                                                                                                                                     
| |_| | | |_|  _  | (_| | (__|   <                                                                                                                                                      \____|_|\__|_| |_|\__,_|\___|_|\_\{0.0.5}                                                                                                                                              A '.git' folder disclosure exploit.                                                                                                                                                    [*] Check Depends
[+] Check depends end
[*] Set Paths
[*] Target Url: http://challenge-6beed917c9e95bdb.sandbox.ctfhub.com:10800/.git/
[*] Initialize Target
[*] Try to Clone straightly
[*] Clone
Cloning into '/home/kali/ljn/GitHack/dist/challenge-6beed917c9e95bdb.sandbox.ctfhub.com_10800'...fatal: repository 'http://challenge-6beed917c9e95bdb.sandbox.ctfhub.com:10800/.git/' not found
[-] Clone Error
[*] Try to Clone with Directory Listing
[*] http://challenge-6beed917c9e95bdb.sandbox.ctfhub.com:10800/.git/ is not support Directory Listing
[-] [Skip][First Try] Target is not support Directory Listing
[*] Try to clone with Cache
[*] Initialize Git
[!] Initialize Git Error: hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all                                                                                                          
hint: of your new repositories, which will suppress this warning, call:                                                                                                                 
hint:                                                                                                                                                                                   
hint:   git config --global init.defaultBranch <name>                                                                                                                                   
hint:                                                                                                                                                                                   
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and                                                                                                                 
hint: 'development'. The just-created branch can be renamed via this command:                                                                                                           
hint:                                                                                                                                                                                   
hint:   git branch -m <name>                                                                                                                                                            [*] Cache files
[*] packed-refs
[*] config
[*] HEAD
[*] COMMIT_EDITMSG
[*] ORIG_HEAD
[*] FETCH_HEAD
[*] refs/heads/master
[*] refs/remote/master
[*] index
[*] logs/HEAD
[*] logs/refs/heads/master
[*] Fetch Commit Objects
[*] objects/29/9d07ff6f0894daa411f00649e225d053257c75
[*] objects/47/7d59e1431024a8f4d857ea65a10613af97205a
[*] objects/9e/6403a0f8e15ae4df394bdbb7b4fc2bc869463a
[*] objects/01/2ae1fc6b838a345b689ae6bb4ec0edfd517a64
[*] objects/60/305a288cf10d2d765d563c5ae4aa4df6b9c284
[*] objects/90/71e0a24f654c88aa97a2273ca595e301b7ada5
[*] objects/2c/59e3024e3bc350976778204928a21d9ff42d01
[*] Fetch Commit Objects End
[*] logs/refs/remote/master
[*] logs/refs/stash
[*] refs/stash
[*] Valid Repository
[+] Valid Repository Success[+] Clone Success. Dist File : /home/kali/ljn/GitHack/dist/challenge-6beed917c9e95bdb.sandbox.ctfhub.com_10800

4、查看flag

(1)进入源码目录

进入到git获取到的源码目录(challenge-6beed917c9e95bdb.sandbox.ctfhub.com_10800),如下所示。

cd dist
cd challenge-6beed917c9e95bdb.sandbox.ctfhub.com_10800/

(2)查看暂存区文件

使用git ls-files --stage命令用于显示 Git 暂存区(index)中所有文件的详细信息,如下所示。

┌──(root㉿kali)-[/home/…/ljn/GitHack/dist/challenge-6beed917c9e95bdb.sandbox.ctfhub.com_10800]
└─# git ls-files --stage                                  
100644 60305a288cf10d2d765d563c5ae4aa4df6b9c284 0       2108123121414.txt
100644 9071e0a24f654c88aa97a2273ca595e301b7ada5 0       50x.html
100644 2c59e3024e3bc350976778204928a21d9ff42d01 0       index.html

输出结果展示了当前仓库暂存区中记录的三个文件及其元数据,各字段含义如下所示。

字段(按顺序)含义说明对应值解析
文件权限表示文件的访问权限( Unix 权限位)均为 100644,代表这是普通文件(100),权限为 644(所有者可读写,其他用户只读)
blob 哈希值文件内容的 SHA-1 哈希值(唯一标识文件内容)如 60305a28... 对应 2108123121414.txt 的内容快照
阶段号用于标记文件在合并冲突时的状态(0 表示正常状态)均为 0,说明这些文件当前无冲突,处于正常暂存状态
文件名暂存区中记录的文件路径分别为 2108123121414.txt50x.htmlindex.html

(3)获取flag

进入到challenge-6beed917c9e95bdb.sandbox.ctfhub.com_10800目录中,发现其中包含1个txt文件(2108123121414.txt),查看此文件即可获取flag,如下所示。

                                                                                                                                                                                       
┌──(root㉿kali)-[/home/…/ljn/GitHack/dist/challenge-6beed917c9e95bdb.sandbox.ctfhub.com_10800]
└─# ls
2108123121414.txt  50x.html  index.html┌──(root㉿kali)-[/home/…/ljn/GitHack/dist/challenge-6beed917c9e95bdb.sandbox.ctfhub.com_10800]
└─# cat 2108123121414.txt                                 
ctfhub{0c0be9c0f412ce9bf41a5fb4}

http://www.dtcms.com/a/442465.html

相关文章:

  • 网址导航网站一键建设猎奇网站源码
  • ROOT的Android手机抓包安装系统跟证书
  • 网站免费正能量软件不良宣讲家网站官德修养与作风建设
  • 深入浅出 ArkTS:HarmonyOS 应用开发的语言基石
  • 网站建设在哪些石景山网站制作建设公司
  • 面试经历分享:从特斯拉到联影医疗的历程
  • 优化网站要怎么做枣庄网站建设 网站设计 网站制作
  • 开源 C++ QT QML 开发(三)常用控件
  • 网站404页面源码自己买台服务器做网站
  • 解码Huffman 编码与 Huffman 树
  • bypass--绕Waf
  • 企业门户网站开发背景seo自学网视频教程
  • 【龙泽科技】智能网联汽车视觉传感器仿真教学软件
  • Glup 和 Vite
  • 做网站图片的大小会计上网站建设做什么费用
  • 公司网站费怎么做分录绥德网站建设设计
  • Google开源Tunix:JAX生态的LLM微调方案来了
  • YOLO入门教程(番外):机器视觉实践—Kaggle实战:深度学习实现狗的品种识别
  • Redis和MySQL的数据同步
  • 织梦网站转移服务器厦门网站建设网络推广
  • 嵌入式系统应用-触摸屏输入 LVGL 9.3版本
  • GPT-5最新特性和优点
  • 如何做幸运28网站代理做网站怎么销售
  • 洛谷P5365解题报告
  • C语言入门:数组的常见操作算法
  • 洛谷 P1054 [NOIP 2005 提高组] 等价表达式
  • 【左程云算法020】递归和master公式
  • php 怎么做 网站 图片福州外语外贸学院
  • 网站点击率东莞网站建设的公司
  • 【Linux】线程的互斥