当前位置: 首页 > news >正文

CTFHub 信息泄露通关笔记10:SVN泄露(2种方法)

目录

一、svn泄露

二、DVCS-Ripper工具

1、工具简介

2、下载安装

(1)下载安装DVCS-Ripper

① Git命令下载

② Web页面下载

(2)基本使用方法

3、利用步骤

三、渗透实战

1、打开靶场

2、目录扫描发现.svn文件

3、dvcs ripper渗透

4、查看index.php

5、获取flag

(1)方法1:grep查找flag

(2)方法2:cat查看flag


本文通过CTFHub的信息泄露-svn泄露关卡的渗透实战,系统剖析了svn泄露的机制、风险及利用技术。当开发人员不慎将.svn目录部署至生产环境时,攻击者可借此获取项目源码、提交历史等关键数据。通过实战演示,文章完整呈现了从靶场目录扫描发现.svn泄露,到运用dvcs-ripper工具成功还原项目并获取flag的全过程。

一、svn泄露

SVN(Subversion)是一种集中式版本控制系统,广泛用于软件开发中管理文件版本变更,通过创建 .svn 隐藏目录存储版本库元数据(如文件快照、提交历史、配置信息等),方便开发者追踪代码修改、回溯历史版本。

而 SVN 泄露 则是因网站部署时未删除 .svn 目录,导致该目录被公开访问所引发的信息泄露问题。攻击者可利用 dvcs-ripper 等工具,通过访问目标网站的 .svn 路径(如 http://example.com/.svn),提取其中的版本库数据,还原源代码、历史提交记录甚至旧版本中的敏感信息等。

二、DVCS-Ripper工具

1、工具简介

DVCS-Ripper(通常也叫 rip-*.pl)是一款专门用于检测和利用配置错误的安全工具。它的核心功能是:当发现一个网站意外地暴露了其版本控制系统的元数据目录(如 .git.svn.hg)时,它能够远程下载并重建整个代码仓库,从而造成源代码泄露。

项目地址: https://github.com/kost/dvcs-ripper 
方面描述
主要用途渗透测试与CTF竞赛。用于利用“源代码泄露”,帮助安全研究人员和攻击者获取网站的完整源代码,以便进一步分析(如硬编码的密钥、API令牌、数据库凭证、逻辑缺陷等)。
支持的系统支持多种分布式版本控制系统(DVCS)和集中式系统:
• Git (rip-git.pl)
• Subversion (SVN) (rip-svn.pl)
• Mercurial (Hg) (rip-hg.pl)
• Bazaar (Bzr) (rip-bzr.pl)
工作原理工具会模拟版本控制客户端的行为,通过HTTP请求逐个下载仓库的元数据文件(如 indexHEADobjects/info/packsentries 等),解析这些文件以获取文件列表和其对应的哈希值,然后根据这些哈希值下载所有代码对象,最终在本地重建出一个完整的、可用的代码仓库。

2、下载安装

(1)下载安装DVCS-Ripper

dvcs-ripper 的核心功能是从泄露的版本控制目录(如.git、.svn)中提取并恢复数据,它能识别版本库的文件结构,自动下载相关组件并重建完整仓库,包含源代码、历史提交记录等,可通过 Git命令下载或者在官网下载源码。

① Git命令下载
sudo git clone https://github.com/kost/dvcs-ripper

② Web页面下载

对于源码中的pl后缀的脚本,其主要功能和对应的目标系统如下表所示。

脚本名称目标系统主要功能
rip-git.plGit (.git)下载并重建暴露的 Git 仓库
rip-svn.plSubversion (.svn)下载并重建暴露的 SVN 仓库
rip-hg.plMercurial (.hg)下载并重建暴露的 Hg 仓库
rip-bzr.plBazaar (.bzr)下载并重建暴露的 Bzr 仓库
rip-cvs.plCVS (CVS/)下载并重建暴露的 CVS 仓库

(2)基本使用方法

DVCS-Ripper 的运行依赖于一些 Perl 模块,需要安装响应的依赖库,具体如下所示。

#安装依赖文件
sudo apt-get install perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl

进入到dvcs-ripper目录中,验证安装是否成功,具体方法如下所示。

# 进入你克隆的目录
cd dvcs-ripper# 运行工具需要指定 perl 解释器和脚本路径
perl rip-git.pl --help# 或者给脚本添加执行权限后直接运行
chmod +x rip-git.pl
./rip-git.pl --help

3、利用步骤

dvcs-ripper工具对svn源码泄露的利用过程如下所示,先安装 perl 及相关依赖,克隆工具仓库并进入目录;再通过 rip-svn.pl 脚本,以目标包含.svn 目录的 URL 为参数执行提取;完成后进入生成的本地仓库目录,查看提取出的版本库文件、历史记录等内容,从中寻找敏感信息,整个过程通过解析泄露的 SVN 目录结构自动重建仓库实现信息获取。。

# 1. 安装dvcs-ripper(确保系统已安装perl及相关依赖)
sudo apt install -y perl libio-socket-ssl-perl libdbi-perl libdbd-mysql-perl# 2. 克隆dvcs-ripper仓库
git clone https://github.com/kost/dvcs-ripper.git
cd dvcs-ripper# 3. 利用rip-svn.pl脚本检测并提取SVN泄露(-u指定目标URL)
perl rip-svn.pl -u http://example.com/.svn/ 
# 工具会自动执行以下步骤:
# - 探测并下载SVN核心文件:entries, wc.db, pristine/ 等
# - 解析entries或wc.db文件获取版本库文件列表和校验和
# - 根据校验和从pristine/目录下载所有文件内容
# - 在本地重建完整的SVN工作副本,保存在以目标主机命名的目录中
# - 完成后可直接浏览下载的文件寻找配置文件、源代码和敏感信息# 4. 进入生成的本地仓库目录(通常以目标域名命名)
cd example.com# 5. 查看提取的SVN版本库内容,寻找敏感信息(如配置文件、历史提交记录)
ls -la
cat 敏感文件路径  # 例如:cat config.php 或查看日志文件# 说明:整个过程通过解析目标网站暴露的.svn目录结构,自动下载版本库元数据、文件快照等,重建本地可访问的SVN仓库,便于挖掘泄露的敏感数据

三、渗透实战

1、打开靶场

打开关卡如下所示,提示信息为“当开发人员使用 SVN 进行版本控制,对站点自动部署。如果配置不当,可能会将.svn文件夹直接部署到线上环境。这就引起了 SVN 泄露。”,提示本关卡可以利用SVN泄露进行渗透测试。点击打开题目,此时系统自动创建Docker环境,下图蓝色部分的URL地址就是靶场环境。

打开靶场URL,页面提示"信息泄露-subversion,flag在服务端旧版本的代码中”,具体如下所示。

http://challenge-ef525d7f8675f9b7.sandbox.ctfhub.com:10800/

2、目录扫描发现.svn文件

通过目录扫描工具对challenge-ef525d7f8675f9b7.sandbox.ctfhub.com:10800进行渗透,这里选择使用dirmap工具进行渗透,命令如下所示。

python3 dirmap.py -ihttp://challenge-ef525d7f8675f9b7.sandbox.ctfhub.com:10800/ -lcf
  • -i http://challenge-ef525d7f8675f9b7.sandbox.ctfhub.com:10800/:-i 是指定扫描目标的参数,目标是http://challenge-ef525d7f8675f9b7.sandbox.ctfhub.com:10800/。工具会默认对该 URL 进行目录扫描,探测潜在的隐藏目录或文件。

  • -lcf--loadConfigFile):该参数表示加载项目根目录下的 dirmap.conf 配置文件,使用文件中定义的详细扫描规则(如字典模式、递归扫描、请求头设置等)。

dirmap的扫描结果如下所示,在网站根目录下发现了.svn文件夹。

3、dvcs ripper渗透

使用dvcs ripper脚本对上一步发现的网站根目录下的svn文件进行渗透测试,通过dvcs ripper工具远程访问目标服务器泄露的.svn文件,使用 rip-svn.pl 脚本以管理员权限(sudo)从目标 URL http://challenge-ef525d7f8675f9b7.sandbox.ctfhub.com:10800/.svn 中提取 Subversion(SVN)版本库信息,完整的命令如下所示。

sudo ./rip-svn.pl -u http://challenge-ef525d7f8675f9b7.sandbox.ctfhub.com:10800/.svn

运行结果如下所示,输出显示使用 dvcs-ripper 工具的 rip-svn.pl 脚本对目标 URL 的 .svn 目录进行了 SVN 泄露利用:工具检测到目标使用了新的 SVN 客户端存储格式,识别出版本库信息(路径 file:///opt/svn/ctfhub 及唯一标识),并尝试还原目录结构,成功恢复了 index.html 文件。

4、查看index.php

使用cat index.php查看index.html文件,这段 index.html 内容显示这是一个与 CTFHub 信息泄露相关的页面,主题为 "Subversion"(即 SVN 版本控制系统)。页面明确提示 "Flag 在服务端旧版本的源代码中",结合之前的 SVN 泄露利用操作,说明目标的 flag 并未直接存在于当前版本的文件中,而是隐藏在 SVN 版本库的历史提交记录或旧版本文件里。

└─# cat index.html 
<html><head><meta charset="UTF-8" /><title>CTFHub 信息泄露 SVN</title>
</head><body><h1>信息泄露 - Subversion</h1><br/><p>Flag 在服务端旧版本的源代码中</p>
</body></html>                                                                                                                                                                                        

5、获取flag

(1)方法1:grep查找flag

使用grep命令查找flag相关文件,递归地搜索 ./svn/pristine/ 目录及其所有子目录下的所有文件,找出任何包含字符串 "ctfhub" 的内容,并打印出匹配的行及其所在的文件名。由于CTFHub靶场的特点是前缀为“ctfhub”,故而完整命令如下所示。

grep -r "ctfhub" .svn/pristine/
参数含义
grep一个强大的Linux文本搜索工具,用于在文件中查找匹配指定模式(字符串或正则表达式)的行。
-r递归(Recursive) 选项。它告诉 grep 不仅搜索当前目录下的文件,还要递归地进入所有子目录进行搜索。这是整个命令的关键。
"ctfhub"这是要搜索的模式(Pattern),即普通的文本字符串。命令会在文件内容中查找任何包含连续字母 ctfhub 的地方。
./svn/pristine/这是要开始搜索的目录路径

运行结果如下所示,

kali@kali:~/ljn/dvcs-ripper
└─# grep -r "ctfhub" .svn/pristine/
.svn/pristine/a7/294d4e4625c9b4ab240223d871068cd0d9833fc1.svn-base:ctfhub{6e5716008d759b6b60c9f738}

这个命令之所以有效且重要,是因为它直接搜索了 SVN 用于存储文件内容的核心目录

  • ./svn/pristine/ 目录是什么?

    • 在 SVN 1.7 及以上版本中,pristine/ 目录是 .svn/ 里的一个特殊文件夹。

    • 它被称为 “ pristine store ”(原始存储)。SVN 会在这里存储工作副本中所有文件原始版本的副本(以其校验和命名)。

    • 这样做的目的是为了能够快速进行差异比较(svn diff)和还原操作(svn revert),而无需每次都访问远程仓库。

  • 为什么要在这里搜索?

    • 当你使用 rip-svn.pl 等工具下载暴露的 .svn 目录时,pristine/ 文件夹会被一并下载。

    • 这个目录里包含了网站所有源代码和资源文件的原始内容。即使开发者在工作目录中修改或删除了某些敏感信息(如密码、flag),它们的原始版本仍然安全地存储在 pristine/ 中。

    • 因此,pristine/ 目录是寻找历史代码、备份版本和敏感信息的金矿

(2)方法2:cat查看flag

进入到.svn/pristine目录中,遍历子目录中的每个文件,发现flag,具体过程如下所示。

kali@kali:~/ljn/dvcs-ripper$ cd .svn
kali@kali:~/ljn/dvcs-ripper/.svn$ ls
entries  format  pristine  text-base  tmp  wc.db  wc.db-journal
kali@kali:~/ljn/dvcs-ripper/.svn$ cd pristine/
kali@kali:~/ljn/dvcs-ripper/.svn/pristine$ ls
29  bf
kali@kali:~/ljn/dvcs-ripper/.svn/pristine$ cd 29
kali@kali:~/ljn/dvcs-ripper/.svn/pristine/29$ ls
294d4e4625c9b4ab240223d871068cd0d9833fc1.svn-base
kali@kali:~/ljn/dvcs-ripper/.svn/pristine/29$ cat 294d4e4625c9b4ab240223d871068cd0d9833fc1.svn-base 
ctfhub{6e5716008d759b6b60c9f738}

.svn/pristine/ 是 SVN 版本库中存储文件快照的核心目录,里面的文件以哈希值命名,保存了不同版本文件的原始内容,故而如果不适用grep方法查找,而是使用手动的方式查看flag具体过程如下所示。

http://www.dtcms.com/a/446090.html

相关文章:

  • 手机网站开发环境搭建网站建设个人网银
  • 使用 jintellitype 库在 Java 程序中实现监听 Windows 全局快捷键(热键)
  • Python驱动Ksycopg2连接和使用Kingbase:国产数据库实战指南
  • 广州网站网站建设福建建站公司
  • ⚡ arm 32位嵌入式 Linux 系统移植 QT 程序
  • VR大空间资料 02 —— 常用Body IK对比
  • 什么是网站建设需求重庆建设工程信息网查询系统
  • 高校思政专题网站建设南京有哪些知名的网站建设
  • 【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
  • ionic 浮动框详解与应用
  • 开源 C++ QT QML 开发(五)复杂控件--Gridview
  • 下载建设银行官方网站工程承包合同协议书
  • 第九章:装饰器模式 - 动态增强的艺术大师
  • OpenAI 发布 GPT-5 Instant:AI 有了 “情感温度计“
  • 苏州做网站公司选苏州聚尚网络做百度百科的网站
  • SSE与轮询技术实时对比演示
  • 示范专业网站建设深圳联雅网站建设
  • php 8.4.13 更新日志
  • MongoDB 认证失败(错误码 18)
  • 深圳网站建设主页什么公司需要建立网站吗
  • 陕西省建设信息管理网站网站开发 家具销售 文献
  • 数学标准库
  • 怎么做跳转不影响原网站排名云抢购网官方网站
  • 漳州手机网站建设公司陕西专业网站建设哪家好
  • 利用 VsCode + EIDE 进行嵌入式开发(保姆级教程)
  • 长春企业网站制作优化微商好货源app下载
  • PlayerChoice系统介绍
  • 网站要实名认证旅游网站建设方案之目标
  • [ SpringWeb ] 搭建和配置
  • 高层次综合hls设计第一章