Files
Sec-Interview/Chapter1/1-6.md
T
2025-09-25 03:18:53 +08:00

42 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 有没有了解过 SVN/GIT 源代码泄露
**SVN 源代码泄露**
SVNSubversion)是一个集中式版本控制系统,它的核心目录是 `.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` 目录下的文件,并根据元数据将它们重组为完整的代码库
1. **探测**:在目标网站 URL 后面加上 `/.svn/entries``/.svn/wc.db`(SVN 1.7+)来探测漏洞是否存在
- `http://example.com/.svn/entries`
- `http://example.com/some-dir/.svn/entries`
2. **自动化下载与重构**:使用 `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 对象(包括文件、目录、提交等)。这是攻击者还原代码最关键的目录
**如何利用**
1. **探测**:在目标 URL 后面加上 `/.git/``/.git/config` 来探测漏洞
- `http://example.com/.git/config`
- `http://example.com/.git/HEAD`
2. **下载与重构**:同样可以使用 `dvcs-ripper` 或专门针对 Git 的工具。这些工具会下载 `.git` 目录下的所有文件,然后在本地创建一个 Git 仓库并还原出源代码
- 通过 `git log` 查看提交历史
- 通过 `git checkout` 切换到不同版本,获取所有版本的代码