网安实验系列五:.git源代码泄露

🔍 什么是 .git 目录?

首先,我们需要理解 .git 目录是什么。当你使用 Git 来管理一个项目时,Git 会在项目根目录下创建一个名为 .git 的隐藏文件夹。这个文件夹是整个 Git 版本控制系统的核心,你可以把它看作是项目的"大脑"或"时光机"。

它里面包含了项目从无到有的所有历史记录,主要包括:

  • objects/ 目录:这是 Git 存储所有文件内容和提交记录的地方。它像一个内容寻址的数据库,每一个文件内容、每一次提交(commit)都会被压缩并以唯一的哈希值命名存储在这里。
  • refs/ 目录:存储了分支和标签的引用信息,它指向了某个分支最新的提交记录。
  • HEAD 文件:一个指针,指向当前所在的分支。
  • index 文件:记录了暂存区(Staging Area)的状态。

简单来说,拥有了完整的 .git 目录,就等于拥有了整个项目的全部源代码和所有历史版本

🚀 漏洞是如何产生的?

这个漏洞的产生通常遵循一个典型的错误操作流程:

  1. 开发与提交 :开发人员在本地使用 Git 进行开发,频繁地执行 git addgit commit,所有代码变更都被 Git 记录在 .git 目录中。
  2. 部署到服务器 :项目完成后,需要将代码部署到线上 Web 服务器。一种常见但不安全的做法是,开发人员直接将包含 .git 目录的整个项目文件夹通过 git clone 或者文件上传的方式,放到了 Web 服务器的网站根目录下(例如 /var/www/html/)。
  3. 忘记清理 :部署完成后,开发人员忘记删除这个本不该存在于生产环境的 .git 隐藏目录。
  4. Web 服务器配置不当:许多 Web 服务器(如 Nginx, Apache)的默认配置可能没有明确禁止外部访问以点开头的隐藏文件或目录。

当这几个条件同时满足时,漏洞就产生了。

🕵️‍♂️ 攻击者如何利用?

一旦 .git 目录暴露在公网,攻击者就可以像使用 Git 一样,从远程"拉取"你的源码。

  1. 初步探测 :攻击者首先会尝试访问 http://目标网站/.git/HEAD。如果服务器返回了类似 ref: refs/heads/master 的内容,这就确凿地证明了 .git 目录是可访问的,漏洞存在。
  2. 工具自动化利用 :手动从 .git 目录中还原整个项目非常繁琐,因此攻击者会使用自动化工具,你提到的 GitHack 就是其中最著名的一个。
  3. GitHack 的工作原理
    • 读取索引 :GitHack 会首先下载目标网站上的 .git/index 文件。这个文件记录了仓库中所有文件的列表、路径和对应的哈希值。
    • 递归下载 :根据 index 文件中的信息,GitHack 会计算出每个文件内容在 objects/ 目录下的存储路径,然后通过 HTTP 请求将这些二进制对象文件全部下载下来。
    • 还原源码:下载完成后,GitHack 会在本地创建一个临时的 Git 仓库,将下载的对象文件放入其中,然后利用 Git 自身的功能将文件从数据库中检出(checkout),最终完整地还原出整个网站的源代码目录结构。

💥 会造成什么后果?

源代码泄露的后果是灾难性的,远不止是代码被抄袭那么简单:

  • 核心业务逻辑暴露:攻击者可以分析你的算法、商业模式和实现细节。
  • 敏感信息泄露 :这是最直接的威胁。源代码中常常硬编码着各种敏感信息,例如:
    • 数据库连接凭证(用户名、密码、地址)
    • API 密钥和 Secret(如云服务、支付接口的密钥)
    • 管理员后台地址和凭据
    • 内部网络拓扑信息
  • 发现更多漏洞:攻击者可以离线仔细审计你的代码,寻找 SQL 注入、逻辑漏洞等其他安全问题,从而发起更具针对性的攻击。

总而言之,.git 源代码泄露是一个由于部署流程不规范导致的高危信息泄露漏洞。它让攻击者能够轻易获取网站的全部源码和敏感配置,为后续的攻击打开了方便之门。因此,在生产环境中,必须确保 .git 目录被彻底删除或通过 Web 服务器配置严格禁止访问。

进入正文:

1.测试目标主机是否存在.git源代码泄露(1)登录拓扑图左侧的攻击端主机,用户名/密码:root/com.1234。单击桌面左上角图标

(2)在搜索框中输入fire,再单击菜单栏中的第一个选项Firefox ESR,打开火狐浏览器,如图3所示。在地址栏中输入192.168.100.202/.git,访问.git确认其是否存在。若测试目标站点显示结果如图4所示,说明目标站点存在.git文件,证明存在.git源代码泄露漏洞

2.下载.git源代码(1)关闭火狐浏览器,右击桌面空白处,单击菜单栏中Open Terminal Here选项,打开终端

(2)使用GitHack工具进行.git源码下载。执行命令cd/GitHack-master(可以输入/G后按Tab键补全),切换至GitHack-master目录。再执行命令python GitHack.py http://192.168.100.202/.git,下载.git源代码

🛠️ 命令结构分解

这条命令可以看作由三个部分组成:

python GitHack.py http://192.168.100.202/.git

  1. python

    • 这是调用 Python 解释器的命令。它告诉操作系统:"请使用 Python 程序来运行后面的脚本文件"。
    • 因为 GitHack 工具本身是用 Python 语言编写的,所以需要 Python 解释器来执行。
  2. GitHack.py

    • 这是要运行的脚本文件名。这个文件包含了 GitHack 工具的所有代码逻辑。
    • 在执行这条命令前,你已经通过 cd /GitHack-master 命令进入了该文件所在的目录,所以可以直接使用文件名来调用它。
  3. http://192.168.100.202/.git

    • 这是传递给 GitHack.py 脚本的参数,也是整个命令最关键的部分。它告诉工具要去攻击哪个目标。
    • http://: 指定了访问目标所使用的协议。
    • 192.168.100.202: 这是你实验环境中靶机的 IP 地址,也就是攻击的目标。
    • /.git: 这是目标服务器上存在漏洞的路径。它明确指向了泄露的 Git 版本控制目录。GitHack 会从这个路径开始,尝试下载所有必要的文件来还原源码。
相关推荐
吴声子夜歌3 小时前
TypeScript——索引类型、映射对象类型、条件类型
git·ubuntu·typescript
吴声子夜歌3 小时前
TypeScript——局部类型、联合类型、交叉类型
javascript·git·typescript
i建模11 小时前
安装 `openclaw@2026.3.1` 时遇到了 Git 仓库访问权限问题
git
freewlt13 小时前
git配置文件名称大小写
git
小熊熊知识库15 小时前
Git工具使用
git
春夜喜雨18 小时前
Git 分支merge合并常用步骤与命令操作
git
秦时明月之君临天下18 小时前
Git查看分支创建时间
git
liuxin_072518 小时前
phpstorm 操作git 分支合并到master
ide·git·phpstorm
cyforkk21 小时前
Git 进阶技巧:优雅合并初始提交与 Commit 规范详解
git