dvcs-ripper ---CTFHub技能树: SVN泄露

SVN 文件、SVN 泄露与 SVNHack 简介

1. SVN 文件

SVN(Subversion)是一种版本控制系统,用于团队协作管理代码 / 文件的修改历史,其核心文件是支撑版本控制功能的关键数据,主要包括:

  • .svn目录:是 SVN 本地仓库的核心目录,隐藏在项目根目录下,存储所有版本相关信息。
  • 关键子文件:
    • wc.db:数据库文件,记录文件的版本号、路径、修改时间等元数据。
    • entries:文本文件,存储项目内文件 / 文件夹的列表及基础版本信息。
    • pristine目录:存放文件的 "纯净版本"(.svn-base后缀文件),即各版本文件的原始内容,是泄露后恢复源码的核心。

2. SVN 泄露

指网站部署时,开发人员误将项目中的.svn目录(本地版本控制文件)一并上传到服务器,导致攻击者可通过 URL 直接访问.svn下的文件,进而恢复网站源码、配置信息甚至敏感数据(如 CTF 中的 flag)的漏洞。
本质 :服务器未过滤.svn隐藏目录,暴露了本应仅存于本地的版本控制数据,属于 "配置失误型漏洞",常见于 CTF 的 Web 方向题目或真实环境的低安全配置网站。

3.vcs-ripper

vcs-ripper是一款用于利用分布式版本控制系统(DVCS)泄露信息的开源工具,在信息安全领域尤其是 CTF(夺旗竞赛)中被广泛使用,以下是对它的简单介绍:

基本信息

使用语法

dvcs-ripper 工具的核心是针对不同版本控制系统的 Perl 脚本(如 rip-svn.plrip-git.pl 等),语法格式统一且简单,基本结构如下

  • 编写语言:主要使用 Perl 语言编写,这使得它在大多数类 UNIX 系统(如 Kali Linux、Ubuntu 等)上都能方便运行,只要系统中安装了 Perl 解释器。
  • 开源仓库 :可以在 GitHub 上找到其开源代码仓库(地址:https://github.com/kost/dvcs-ripper ),开发者和安全研究人员可以查看代码、提交问题报告或贡献代码来改进工具。
bash 复制代码
perl 脚本名称 -u 目标URL [选项]

常用参数说明:

核心参数

  • perl 脚本名称:指定要使用的工具脚本(如 rip-svn.pl 处理 SVN 泄露,rip-git.pl 处理 Git 泄露)。
  • -u 目标URL:必选参数,指定存在版本控制泄露的目标路径(如 SVN 的 .svn 目录、Git 的 .git 目录)。

常用选项

  • -o 输出目录:指定提取的文件保存路径(如 -o ./output 表示保存到当前目录的 output 文件夹)。
  • -v:显示详细执行过程(调试时常用,可看到工具下载了哪些文件)。

其他版本控制系统(如 Git)用法相同,只需替换脚本名称(如 rip-git.pl)和目标 URL(如 http://example.com/.git/)即可。

示例(以 SVN 泄露为例):

bash 复制代码
# 基础用法:提取目标 .svn 目录内容,默认保存到当前目录
perl rip-svn.pl -u http://example.com/.svn/

# 带输出目录和详细信息:提取内容并保存到 ./svn_data,显示执行过程
perl rip-svn.pl -v -u http://example.com/.svn/ -o ./svn_data

支持的版本控制系统及功能

  • SVN(Subversion) :通过rip-svn.pl脚本对 SVN 泄露进行利用。当网站的.svn目录意外暴露时,该脚本可以下载.svn目录中的关键文件(如entrieswc.db等),并尝试恢复项目的源码,包括各个版本的文件内容,帮助获取可能存在于旧版本代码中的敏感信息,如 CTF 比赛中的 flag。
  • Git :利用rip-git.pl脚本处理 Git 泄露。如果网站的.git目录泄露,它能够解析.git目录中的对象文件、引用等,恢复出完整的 Git 仓库,包括代码的提交历史、分支信息等,有助于发现开发者在开发过程中可能遗留的敏感信息或配置文件。
  • CVS(Concurrent Versions System)rip-cvs.pl脚本针对 CVS 版本控制系统的泄露情况,从泄露的 CVS 相关文件和目录中提取项目的版本信息和源代码。
  • Bazaar(Bzr) :通过rip-bzr.pl脚本处理 Bazaar 版本控制系统的泄露,恢复 Bzr 仓库中的数据。
  • Mercurial(Hg)rip-hg.pl脚本用于处理 Mercurial 版本控制系统的泄露,解析.hg目录中的数据,还原项目的版本历史和代码。

实战

题目来源

ctfHub技能树:CTFHub

先看题目

先用dirsearch搜索一下,dirsearch的用法在另一篇博客里面御剑/dirsearch工具使用--bugku 备份是个好习惯/网站源码-CSDN博客

观察到状态码为200的存在.svn/entries

这里打开kali虚拟机进行操作

首先点击使用文档并选择在文档处打开终端

我们需要先下载一些东西

bash 复制代码
sudo apt-get install perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl

这条命令用于在 Debian/Ubuntu/Kali 等基于 APT 包管理的 Linux 系统中,安装dvcs-ripper工具运行所需的依赖包,各部分含义如下:

  • sudo:以管理员权限执行后续命令(安装软件需要管理员权限)。
  • apt-get install:APT 包管理工具的安装命令,用于从软件源下载并安装指定包。
  • 后续的包是dvcs-ripper依赖的 Perl 模块和工具:
    • perl:Perl 语言解释器(dvcs-ripper基于 Perl 编写,必须安装)。
    • libio-socket-ssl-perl:支持 SSL/TLS 加密的网络通信模块(处理 HTTPS 目标时需要)。
    • libdbd-sqlite3-perl:SQLite 数据库驱动模块(解析版本控制中的数据库文件,如 SVN 的wc.db)。
    • libclass-dbi-perl:数据库抽象层模块(简化数据库操作)。
    • libio-all-lwp-perl:增强的 IO 操作模块(支持通过 HTTP 协议下载文件)。

执行这条命令后,系统会自动下载并安装这些依赖,确保dvcs-ripper能正常运行(尤其是处理 HTTPS 目标或解析数据库文件时不会因缺少模块而报错)。

接下来进行操作

bash 复制代码
./rip-svn.pl -u http://challenge-517b9b2a719ed58a.sandbox.ctfhub.com:10800/.svn

这个具体的语法以及在上述讲过,这里不过多说

结果如下

工具以及完成了恢复,接下来我们查看有那些文件

bash 复制代码
ls -al

我们打开我们想要的.svn文件,并查看有那些目录

根据网页页面提示,我们了解道flag最有肯位于pristine(原始内容)中,原因见上文SVN文件分析处

这里我们查看所有文件

SVN 会把版本控制的文件拆分成 pristine 目录下的哈希文件夹 (如 40bf ),每个文件夹里存的是 .svn-base 后缀的原始文件(相当于版本库中的 "纯净" 文件内容)。

这些文件夹的命名是 文件内容的哈希值 (SVN 用于快速定位和存储版本文件),所以没有固定规律,必须逐个检查。

我们先检查40

发现有一个.svn-base后缀的文件

在 Linux 系统中,cat 是一个非常基础且常用的命令,全称是 "concatenate"(连接、串联 ),主要作用是用于查看文件内容、拼接文件内容输出 ,我们使用cat取读取我们找到的这个文件。

得到我们最终的结果解题结束。

相关推荐
长沙红胖子Qt17 小时前
关于 svn无法查看下拉日志提示“要离线”和根目录看日志“no data” 的解决方法
svn·离线·nodata·日志查看失败
码事漫谈12 天前
SVN 仓库迁移与清理指南:如何正确切换仓库并保持代码整洁
svn
天和地丰19 天前
AAltium SVN Database Library 配置使用说明
数据库·嵌入式硬件·svn
我是李武涯1 个月前
svn与git Merge重要区别讲解
git·svn
Ellie艾藜1 个月前
mac版SVN客户端
svn
向上的车轮1 个月前
SVN与GIT的区别,分别使用与哪些管理场景?
git·svn
君鼎1 个月前
安全逆向工程学习路线
安全·逆向·网安
猫头虎1 个月前
GitHub下载教程:2025年最新详解从GitHub上传、下载文件、子目录与完整项目【图文教程】
git·svn·gitee·开源·github·gitea·gitcode
巧~·1 个月前
Linux下SVN常用指令
linux·服务器·svn