- SVN又是一个知识盲区,先百度看看
1.SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。
2.相较于git,svn通常需要一个集中的服务器来控制,而git为分布式控制系统,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。这类系统都可以指定和若干不同的远端代码仓库进行交互。
3.SVN原理上只关心文件内容的具体差异。每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容;Git记录版本历史只关心文件数据的整体是否发生变化,不保存文件内容前后变化的差异数据,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一连接。
- 同时在查询后发现:在管理员使用SVN管理本地代码,并在发布代码时没有使用到处功能,直接使用了
全选+复制+粘贴
这种操作的话,就会将自动生成的 .svn 隐藏文件同时上传,而此文件中会有源码信息以及文件目录。 - 既然是隐藏文件,老规矩dirmap扫一扫康康
- 出现了 .svn 文件
- 使用svn漏洞利用工具svnExploit进行扫描查看
- 直接爆出了文件目录,直接尝试访问
- 发现出现了404
- 继续使用svnExploit的 --dump 将目录直接脱下来,拿到如下文件
- 使用 Navicat Premium 打开 wc.db 文件
- 此数据库储存的为某一版本的文件目录,但通过上面的直接访问返回404的情况可知,此版本的代码中此txt文件已被删除,那我们只能通过直接获取 .svn 文件来得到文件的源码备份信息,从而查看此txt文件的内容
- 在kali linux中使用工具dvcs-ripper
./rip-svn.pl -v -u http://challenge-2b5e8fb9b1341257.sandbox.ctfhub.com:10800/.svn/
- 然后使用
ls -al
查看所有文件目录 - 查找资料可知,在pristine文件夹下会储存旧版本的备份信息,故进行访问查看
- 最终找到了flag的备份文件,并拿到flag