【网络安全】svn信息泄漏

一、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