一
1.SVN简介
Subversion (SVN) 是一个开源的版本控制系統,管理着随时间改变的数据。 这些数据放置在一个中央资料档案库中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。SVN采用了客户端-服务器架构,通过版本控制来记录代码的变化,每次提交都会生成一个新的版本,并记录提交的相关信息。简而言之就是用于多人共同开发同一个项目,实现共享资源,实现最终集中式的管理。
2.需要注意也是我觉得SVN重要的几点:
(1)SVN采用客户端/服务器体系,数据不丢失,历史可追溯
(2)SVN是输入C/S服务类软件,有客户端和服务端,客户端用于操作,服务端用于数据保存,服务端会管理着随时间改变的所有数据,以提交版本记录每次操作内容。
(3)版本控制技术对文件进行管理主要有两种模式:
Lock-Modify-Unlock(锁-修改-解锁) 在这种工作模式下,若用户想对某文件进行修改,必须先锁定该文件再进行修改,修改操作完成之后再对其解锁。
Copy-Modify-Merge(拷贝-修改-合并) 这种工作模式下,当某一用户想修改文件时,可以先将服务器文件update到本地端,然后在本地端对副本进行修改,修改操作完成后,再将副本commit到服务器。
(4)SVN的客户端有两类,一类是基于Web的WebSVN等,另一类是以Tortoise SVN为代表的客户端软件。前者需要Web服务器的支持,后者需要用户在本地安装客户端,两种都有免费的开源软件供使用。
3.什么时候需要用清理(Clean up)
当我们需要提交修改时,会向.svn中写入一些信息,然后向SVN服务器发送信息,如果该信息没有正确的发送到SVN服务器(提交(SVN Commit)会同时失败),SVN服务器中的版本信息跟本地工作副本的版本信息不一致,再次提交会提示目录被锁定,这时需要清理(Clean up),如果清理之后还是不能提交,关机重启一下试试(T^T)
4.SVN优势
(1).存储
SVN服务器既具有CVS所具有数据储存的优点,像是信息资源存储后会形成资源树结构,便于存储的同时,数据一般不会丢失,同时又拥有自己的特色。SVN是通过关系数据库及二进制的存储方式,同时解决了既往不能同时读写同一文件等问题,同时增添了自己特有的“零或一”原则。
(2).速度
与人们初始的CVS相比,SVN在速度运行方面有很大提升。因为SVN服务器只支持少量的信息、资源传输,与其他系统相比,更支持的是离线模式,因此避免了网络拥挤现象的出现。
(3)安全性
SVN是一种技术性更加安全的产品,实现了系统和控制两方面的结合。一方面可以将系统整体的安全功能有效地分布在分支系统中,进而保证分支系统能正常运行,从而使各分支系统能够互补,最终在系统整体性的安全性得以保障,通过均衡原则实现最终追求安全的目的。
5.SVN的其他说明
(1)权限
SVN可以按照文件和目录来配置权限
SVN有一套完整的权限管理体系,可以给个人或者组分配权限,并且权限可以分配到文件级别,权限分“读”(只能查看)与“写”(可以修改)两种情况 实际的项目中SVN权限要按需申请并以最小化原则开通
需根据工作需要开通,对项目人员的不同角色开通不同的权限或者权限组,以最小化原则。
(2)SVN的提交控制
SVN钩子脚本控制
SVN有一套提交控制脚本,称为钩子脚本,通过钩子脚本可以对提交的文件类型,提交日志填写要求做控制,还可以通过脚本触发一些工具的执行。
(3)SVN日志模板设置
设置SVN提交时要填写的模板,并且提交时检查是否按照模板填写,未符合要求的会被禁止提交
(4)SVN锁定提交
对一些重要文档,为防止多人提交出现覆盖的情况,可以设置成需要锁定文件后才能提交
(5)SVN的分支策略
SVN采用分支管理系统
分为trunk-主干、branches-分支和tags-标签, 分支上所做的提交都只存于分支上,主线上的Update是看不到分支的修改的
二.SVN泄露
1.理解:当开发人员使用 SVN 进行版本控制,对站点自动部署。如果配置不当,可能会将.svn文件夹直接部署到线上环境。这就引起了 SVN 泄露漏洞。
2.危害 :网站出现SVN漏洞,其危害远比SQL注入等其它常见网站漏洞更为致命,因为当入侵者获取到网站源代码后,会有两方面比较严重的危害
1.掠夺了网站的技术知识资产;
2.入侵者通过源代码分析其它安全漏洞,从而对网站服务器及用户数据造成持续威胁。
更严重的问题在于,SVN产生的.svn目录下还包含了以.svn-base结尾的源代码文件副本(低版本SVN具体路径为text-base目录,高版本SVN为pristine目录),如果服务器没有对此类后缀做解析,入侵者则可以直接获得文件源代码。
3.svn目录(隐藏目录)
使用svn checkout后,项目目录下会生成一个隐藏的.svn文件夹(Linux上用ls命令看不到,要用ls -al命令)。
svn1.6及以前版本会在项目的每个文件夹下都生成一个.svn文件夹,里面包含了所有文件的备份,文件名为 .svn/text-base/文件名.svn-base。
svn1.7及以后版本则只在项目根目录生成一个.svn文件夹,里面的pristine文件夹里包含了整个项目的所有文件备份。
实操
这里以ctfhub上的SVN泄露题为例打开环境后页面提示flag在服务端旧版本的源代码中,这时需要用到dvcs-ripper这个工具
需要先在Windows系统上下载好dvcs-ripper的安装包,再在kali系统里打开并安装
这里需要依赖库来安装
然后需要使用dvcs-ripper工具将泄露的文件下载到本地目录中
在.svn文件夹中查看下载好的文件
访问wc.db数据查看是否有此题flag,索引发现flag有两个文本文件可能存在flag
再使用curl命令访问可以文件检查网页源代码是否存在flag,检查均返回404,可能已经被删除了
然后根据网页提示说flag在服务端旧版本的源代码中,那么应该检查一下pristine文件是否存放flag
依次查看发现查看发现6e文件夹中的.svn-base文件中存在此题flag