🔍 什么是 .git 目录?
首先,我们需要理解 .git 目录是什么。当你使用 Git 来管理一个项目时,Git 会在项目根目录下创建一个名为 .git 的隐藏文件夹。这个文件夹是整个 Git 版本控制系统的核心,你可以把它看作是项目的"大脑"或"时光机"。
它里面包含了项目从无到有的所有历史记录,主要包括:
objects/目录:这是 Git 存储所有文件内容和提交记录的地方。它像一个内容寻址的数据库,每一个文件内容、每一次提交(commit)都会被压缩并以唯一的哈希值命名存储在这里。refs/目录:存储了分支和标签的引用信息,它指向了某个分支最新的提交记录。HEAD文件:一个指针,指向当前所在的分支。index文件:记录了暂存区(Staging Area)的状态。
简单来说,拥有了完整的 .git 目录,就等于拥有了整个项目的全部源代码和所有历史版本。
🚀 漏洞是如何产生的?
这个漏洞的产生通常遵循一个典型的错误操作流程:
- 开发与提交 :开发人员在本地使用 Git 进行开发,频繁地执行
git add和git commit,所有代码变更都被 Git 记录在.git目录中。 - 部署到服务器 :项目完成后,需要将代码部署到线上 Web 服务器。一种常见但不安全的做法是,开发人员直接将包含
.git目录的整个项目文件夹通过git clone或者文件上传的方式,放到了 Web 服务器的网站根目录下(例如/var/www/html/)。 - 忘记清理 :部署完成后,开发人员忘记删除这个本不该存在于生产环境的
.git隐藏目录。 - Web 服务器配置不当:许多 Web 服务器(如 Nginx, Apache)的默认配置可能没有明确禁止外部访问以点开头的隐藏文件或目录。
当这几个条件同时满足时,漏洞就产生了。
🕵️♂️ 攻击者如何利用?
一旦 .git 目录暴露在公网,攻击者就可以像使用 Git 一样,从远程"拉取"你的源码。
- 初步探测 :攻击者首先会尝试访问
http://目标网站/.git/HEAD。如果服务器返回了类似ref: refs/heads/master的内容,这就确凿地证明了.git目录是可访问的,漏洞存在。 - 工具自动化利用 :手动从
.git目录中还原整个项目非常繁琐,因此攻击者会使用自动化工具,你提到的 GitHack 就是其中最著名的一个。 - GitHack 的工作原理 :
- 读取索引 :GitHack 会首先下载目标网站上的
.git/index文件。这个文件记录了仓库中所有文件的列表、路径和对应的哈希值。 - 递归下载 :根据
index文件中的信息,GitHack 会计算出每个文件内容在objects/目录下的存储路径,然后通过 HTTP 请求将这些二进制对象文件全部下载下来。 - 还原源码:下载完成后,GitHack 会在本地创建一个临时的 Git 仓库,将下载的对象文件放入其中,然后利用 Git 自身的功能将文件从数据库中检出(checkout),最终完整地还原出整个网站的源代码目录结构。
- 读取索引 :GitHack 会首先下载目标网站上的
💥 会造成什么后果?
源代码泄露的后果是灾难性的,远不止是代码被抄袭那么简单:
- 核心业务逻辑暴露:攻击者可以分析你的算法、商业模式和实现细节。
- 敏感信息泄露 :这是最直接的威胁。源代码中常常硬编码着各种敏感信息,例如:
- 数据库连接凭证(用户名、密码、地址)
- 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
-
python- 这是调用 Python 解释器的命令。它告诉操作系统:"请使用 Python 程序来运行后面的脚本文件"。
- 因为 GitHack 工具本身是用 Python 语言编写的,所以需要 Python 解释器来执行。
-
GitHack.py- 这是要运行的脚本文件名。这个文件包含了 GitHack 工具的所有代码逻辑。
- 在执行这条命令前,你已经通过
cd /GitHack-master命令进入了该文件所在的目录,所以可以直接使用文件名来调用它。
-
http://192.168.100.202/.git- 这是传递给
GitHack.py脚本的参数,也是整个命令最关键的部分。它告诉工具要去攻击哪个目标。 http://: 指定了访问目标所使用的协议。192.168.100.202: 这是你实验环境中靶机的 IP 地址,也就是攻击的目标。/.git: 这是目标服务器上存在漏洞的路径。它明确指向了泄露的 Git 版本控制目录。GitHack 会从这个路径开始,尝试下载所有必要的文件来还原源码。
- 这是传递给