一、svn介绍
SVN,全称为 Subversion,是一个开源的集中式版本控制系统(CVCS)。在 Git 彻底统治开源界之前,SVN 曾是软件开发团队进行代码管理和协同开发的绝对主流工具。
结合你正在使用 dvcs-ripper 进行安全测试的背景,了解 SVN 的底层逻辑对你提取和恢复源码非常有帮助。以下是关于 SVN 的核心介绍:
1. 核心架构:集中式管理
与 Git 的分布式架构不同,SVN 采用的是集中式架构。
- 单一真相源:所有的版本历史、分支、标签都保存在一个中央服务器上。
- 工作模式:开发者必须先从服务器"检出(Checkout)"代码到本地,修改完成后再"提交(Commit)"回服务器。如果断网了,开发者只能查看本地代码,无法提交,也无法查看他人的最新提交。
2. SVN 的核心概念
- Repository(版本库):服务器端存储所有文件和历史数据的数据库。
- Working Copy(工作副本):开发者本地的工作目录。
- Revision(修订版本号) :SVN 使用全局递增的数字 (如 r1, r2, r100)来标记版本,这与 Git 使用长哈希值(如
a1b2c3d)完全不同。 - Trunk / Branches / Tags:SVN 并没有真正的"分支"概念,它只是在服务器目录下创建了三个普通文件夹来模拟分支管理。
3. SVN 与 Git 的关键区别
- 存储方式:Git 存储的是文件的快照(Snapshot);SVN 存储的是文件的具体差异(Delta)。
- 分支效率:Git 创建分支几乎是瞬间完成的(只是创建一个指针);SVN 创建分支实际上是服务器端复制整个目录,非常耗时。
- 离线能力:Git 在本地拥有完整的仓库历史,断网也能提交、查看日志;SVN 断网后功能严重受限。
4. 为什么在安全测试/CTF中还会遇到 SVN?
虽然现代开发几乎全面转向了 Git,但在以下场景中,SVN 依然常见:
- 老旧系统/传统企业:许多传统企业、外包公司或老旧的项目(如早期的 PHP/ASP 网站)依然在使用 SVN 维护。
- 配置不当 :开发者在部署网站时,不小心将整个项目连同
.svn隐藏目录一起上传到了 Web 服务器上,导致源码泄露。
二、使用工具获取svn信息
扫描发现有 .svn/ 目录,确认是 .svn 泄露。使用 dvcs-ripper 工具中的 rip-svn.pl 脚本进行 clone.
然后在.svn中查找数据。例如下面中ctfhub中svn数据泄漏题:
perl ./rip-svn.pl -u http://challenge-d68805d61611e3b6.sandbox.ctfhub.com:10800/.svn



