有没有了解过 SVN/GIT 源代码泄露
约 733 字大约 2 分钟
2025-11-02
有没有了解过 SVN/GIT 源代码泄露
SVN 源代码泄露
SVN(Subversion)是一个集中式版本控制系统,它的核心目录是 .svn。当开发者在 Web 服务器的根目录下直接使用 svn checkout 或 svn update 命令时,.svn 目录及其所有子目录也会被同步到服务器上。如果 Web 服务器没有正确配置,这个隐藏目录就会被公网访问
漏洞原理
/.svn/ 目录下存储了代码的元数据,这些数据通常以 .svn/entries、.svn/text-base/ 等形式存在。攻击者可以通过递归下载这些文件来还原出整个代码库
/.svn/entries:在 SVN 1.6 及更早版本中,这个文件包含了目录下所有文件的元数据,包括文件名、版本号、文件类型等。攻击者可以通过解析这个文件,获取所有文件的相对路径/.svn/text-base/:这个目录存储了每个文件的原始版本副本。文件名通常是filename.svn-base。攻击者可以下载这些文件来获取源代码
如何利用
利用 SVN 源代码泄露,通常需要一个自动化工具来递归下载所有 .svn 目录下的文件,并根据元数据将它们重组为完整的代码库
- 探测:在目标网站 URL 后面加上
/.svn/entries或/.svn/wc.db(SVN 1.7+)来探测漏洞是否存在http://example.com/.svn/entrieshttp://example.com/some-dir/.svn/entries
- 自动化下载与重构:使用
svn-dumper、dvcs-ripper等工具。这些工具能够自动化完成下载和还原代码的过程
Git 源代码泄露
Git 是一个分布式版本控制系统,它的核心目录是 .git。和 SVN 类似,当开发者将代码直接在 Web 目录下进行 git init 或 git clone 操作时,.git 目录就会被创建并暴露出来
漏洞原理
/.git/ 目录包含了 Git 版本库的所有信息,如对象(objects)、引用(refs)、索引(index)、配置文件(config)等。攻击者可以通过下载这些文件,利用 Git 内部的命令来还原代码
/.git/HEAD:指向当前分支,可以确定当前分支名/.git/index:包含了暂存区的文件信息/.git/objects/:这个目录存储了所有的 Git 对象(包括文件、目录、提交等)。这是攻击者还原代码最关键的目录
如何利用
- 探测:在目标 URL 后面加上
/.git/或/.git/config来探测漏洞http://example.com/.git/confighttp://example.com/.git/HEAD
- 下载与重构:同样可以使用
dvcs-ripper或专门针对 Git 的工具。这些工具会下载.git目录下的所有文件,然后在本地创建一个 Git 仓库并还原出源代码- 通过
git log查看提交历史 - 通过
git checkout切换到不同版本,获取所有版本的代码
- 通过