CTFHub 信息泄露通关笔记7:Git泄露 Log

CTFHub 信息泄露通关笔记7:Git泄露 Log

目录

一、Git泄露

1、.git 目录的作用与组成

2、.git 泄露的成因

3、.git 泄露的危害

二、GitHack工具

1、工具简介

2、下载安装

(1)下载安装GitHack

① Git命令下载

② Web页面下载

(2)基本使用方法

3、利用步骤

三、渗透实战

1、打开靶场

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

3、githack渗透

4、查看git log

5、获取flag

(1)git log法

(2)git reset法


本文通过CTFHub的信息泄露-Git泄露-Git log关卡的渗透实战,详细讲解Git泄露的成因、危害及利用方法。当开发人员误将.git目录部署到线上环境时,攻击者可通过访问该目录获取项目源代码、历史记录等敏感信息。GitHack工具能有效还原.git目录内容,文章通过实战演示了从靶场扫描发现.git泄露到利用GitHack获取flag的全过程,包括两种具体方法:gitlog差异对比和gitreset版本回退。该风险危害严重,开发人员需注意部署时排除.git目录,防止敏感信息泄露。

一、Git泄露

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

1、.git 目录的作用与组成

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

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

核心子目录及文件:

  • objects/:存储文件快照( blob 对象)、目录结构( tree 对象)、提交记录( commit 对象)等,是仓库数据的核心。
  • refs/:记录分支、标签对应的提交哈希(如 refs/heads/master 指向主分支最新提交)。
  • HEAD:指向当前所在分支的指针(如 ref: refs/heads/master)。
  • index:暂存区信息,记录待提交的文件状态。
  • config:仓库配置,可能包含远程仓库地址、用户名等信息。

2、.git 泄露的成因

  • 部署失误:开发或运维人员在部署 Web 项目时,未排除 .git 目录,导致其被上传至生产服务器的 Web 根目录(如 wwwrootpublic 等)。
  • 权限配置不当:Web 服务器(如 Nginx、Apache)对 .git 目录未做访问限制,允许外部直接访问。
  • 目录遍历:服务器存在目录遍历安全风险时,攻击者可通过构造路径(如 ../.git/HEAD)绕过限制访问 .git 内容。

3、.git 泄露的危害

  • 源代码泄露:攻击者可还原项目完整源代码,分析业务逻辑,寻找 SQL 注入、XSS 等。
  • 敏感信息暴露:历史提交中可能包含数据库账号密码、API 密钥、配置文件等敏感数据。
  • 开发细节泄露:通过提交记录可了解开发习惯、项目架构,甚至获取内部开发文档。
  • 供应链风险:若项目依赖第三方库,攻击者可能通过源码分析依赖组件的缺陷。

二、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-2452a35a68245349.sandbox.ctfhub.com:10800/

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

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

python dirsearch.py -u http://challenge-2452a35a68245349.sandbox.ctfhub.com:10800

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

3、githack渗透

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

sudo python2 GitHack.py http://challenge-9fd26fb5ff0fe270.sandbox.ctfhub.com:10800/.git

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

在当前目录的dist/challenge-9fd26fb5ff0fe270.sandbox.ctfhub.com_10800下成功恢复文件,完整运行结果如下所示。

kali@kali:~/ljn/GitHack$ sudo python2 GitHack.py http://challenge-9fd26fb5ff0fe270.sandbox.ctfhub.com:10800/.git ____ _ _ _ _ _ / ___(_) |_| | | | __ _ ___| | __ | | _| | __| |_| |/ _` |/ __| |/ / | |_| | | |_| _ | (_| | (__| < \____|_|\__|_| |_|\__,_|\___|_|\_\{0.0.5} A '.git' folder disclosure exploit. [*] Check Depends [+] Check depends end [*] Set Paths [*] Target Url: http://challenge-9fd26fb5ff0fe270.sandbox.ctfhub.com:10800/.git/ [*] Initialize Target [*] Try to Clone straightly [*] Clone 正克隆到 '/home/kali/ljn/GitHack/dist/challenge-9fd26fb5ff0fe270.sandbox.ctfhub.com_10800'... fatal: 仓库 'http://challenge-9fd26fb5ff0fe270.sandbox.ctfhub.com:10800/.git/' 未找到 [-] Clone Error [*] Try to Clone with Directory Listing [*] http://challenge-9fd26fb5ff0fe270.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: 提示:使用 'master' 作为初始分支的名称。这个默认分支名称可能会更改。要在新仓库中 提示:配置使用初始分支名,并消除这条警告,请执行: [*] 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/49/8a50cd366e92ebd04b4fb56ef73060f5165a06 [*] objects/01/2ae1fc6b838a345b689ae6bb4ec0edfd517a64 [*] objects/e2/31ebc4862d09d20a47a9b48925886d1b7eb958 [*] objects/08/8f845b397abf7dd239847a722cc301fd7a7824 [*] objects/90/71e0a24f654c88aa97a2273ca595e301b7ada5 [*] objects/2c/59e3024e3bc350976778204928a21d9ff42d01 [*] objects/35/1bb3e9683eaaaff31b27cfb4de54a7b3bb0463 [*] objects/b5/68e83e3b85b4418b1772765412ccd524d13f8c [*] 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-9fd26fb5ff0fe270.sandbox.ctfhub.com_10800 

4、查看git log

进入到git目录,执行git log发现add flag,记录下git log id,如下所示。

cd dist cd challenge-9fd26fb5ff0fe270.sandbox.ctfhub.com_10800 git log 

如下图所示,在执行git log时有addflag、removeflag的日志记录,接下来我们记录下add flag的log id,值为351bb3e9683eaaaff31b27cfb4de54a7b3bb0463。

5、获取flag

本文通过两种方法git log和git reset获取flag,具体如下所示。

(1)git log法

执行git log diff,比较add flag版本的代码修改日志,如下所示成功获取到flag。

sudo git log diff 351bb3e9683eaaaff31b27cfb4de54a7b3bb0463

(2)git reset法

执行git reset将代码切换为add flag版本的code,如下所示此方法同样成功获取到flag。

sudo git reset --hard e231ebc4862d09d20a47a9b48925886d1b7eb958

Read more

Flutter 三方库 easy_money_formatter 的鸿蒙化适配指南 - 实现具备多种货币符号与千分位自动处理的金额格式化、支持端侧金融应用的动态金额渲染实战

Flutter 三方库 easy_money_formatter 的鸿蒙化适配指南 - 实现具备多种货币符号与千分位自动处理的金额格式化、支持端侧金融应用的动态金额渲染实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 easy_money_formatter 的鸿蒙化适配指南 - 实现具备多种货币符号与千分位自动处理的金额格式化、支持端侧金融应用的动态金额渲染实战 前言 在进行 Flutter for OpenHarmony 的电子钱包、电商支付或个人理财应用开发时,如何优雅、规范地展示金额数值?简单的 toStringAsFixed 无法处理千分位分割以及不同国家/地区的货币符号排列逻辑。easy_money_formatter 是一款轻量级、功能专注的金额处理库。本文将介绍如何在鸿蒙端快速构建符合金融规范的金额展示层。 一、原直观解析 / 概念介绍 1.1 基础原理 该库建立在“格式化掩码(Formatting Mask)”逻辑之上。它接收一段原始的数值(Double 或 String),根据预设的配置(如符号位置、

By Ne0inhk
Linux命名管道(FIFO)通信:从原理到实操,一文搞懂跨进程通信

Linux命名管道(FIFO)通信:从原理到实操,一文搞懂跨进程通信

🔥个人主页:Cx330🌸 ❄️个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》《C++知识分享》 《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔 《Git深度解析》:版本管理实战全解 🌟心向往之行必能至 🎥Cx330🌸的简介: 目录 前言: 一、先搞懂:命名管道(FIFO)是什么? 1. 命名管道的本质 2. 命名管道的核心特点 3. 命名管道与匿名管道的对比 二. 命名管道的创建方式 2.1 命令行创建(mkfifo 命令) 2.2 代码创建(mkfifo 函数) 2.3 命名管道的打开规则 三、实操实现:手搓命名管道通信 3.1 前置准备(

By Ne0inhk

Flutter 三方库 release_updater 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、自动化的应用安装包与资源静默热更新引擎

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 release_updater 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、自动化的应用安装包与资源静默热更新引擎 在鸿蒙(OpenHarmony)系统开发中,如何绕过漫长的 HAP 全量包上架审核,实现对应用特定资源、脚本或配置文件的高速增量更新?release_updater 为开发者提供了一套工业级的、基于本地目录的安装/发布文件自动化版本管理与替换方案。本文将深入实战其在鸿蒙资源热更场景中的应用。 前言 什么是 Release Updater?它是一个轻量级的文件更新框架,专门用于监控远端版本、下载差异包并安全地覆盖到本地指定路径。在 Flutter for OpenHarmony 的实际开发中,利用该库,我们可以实现鸿蒙应用“资产目录(Assets)”的毫秒级静默更新。不管是动态 UI 配置文件还是离线算法包,都能在用户无感知的情况下完成“生命周期进化”。 一、

By Ne0inhk
鸿蒙APP开发从入门到精通:运维监控、生态运营与专属变现

鸿蒙APP开发从入门到精通:运维监控、生态运营与专属变现

《鸿蒙APP开发从入门到精通》第12篇:运维监控、生态运营与专属变现 📊🚀💰 内容承接与核心价值 这是《鸿蒙APP开发从入门到精通》的第12篇——运维监控、生态运营与专属变现篇,承接第11篇的「性能优化与Next原生合规」,100%复用项目架构,完成鸿蒙电商购物车全栈项目的最终上线与华为应用市场上架变现。 学习目标: * 掌握鸿蒙APP运维监控的定义与架构; * 实现实时监控、日志分析、报警系统等运维监控功能; * 理解生态运营的原理与实现方式; * 开发用户运营、内容运营、社区运营等生态运营功能; * 掌握专属变现的原理与实现方式; * 开发华为应用市场上架、应用内付费、广告变现等专属变现功能。 学习重点: * 鸿蒙APP运维监控的开发流程; * 运维监控的分类与使用场景; * 实时监控、日志分析、报警系统的实现; * 生态运营的设计与实现; * 专属变现的设计与实现。 一、 运维监控基础 🎯 1.1 运维监控定义 运维监控是指对应用进行实时监控、日志分析、报警系统等,主要包括以下方面: * 实时监控:实时监控应用的运行状态;

By Ne0inhk