漏洞简介
SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就用用于多个人共同开发同一个项目,实现的共享资源,实现最终集中式的管理
造成SVN源代码漏洞的主要原因是管理员操作不规范,一些网站管理员在发布代码时,不愿意使用“导出”功能,而是直接复制代码文件夹到WEB服务器上,这就使得.svn隐藏文件夹被暴露于外网环境,黑客对此可进一步利用:
可以利用其中包含的用于版本信息追踪的 entries 文件(.svn/entries 文件),获取到服务器源码、svn服务器账号密码等信息;
可以利用 wc.db 数据库文件(.svn/wc.db 文件),获取到一些数据库信息;
更严重的问题在于,SVN产生的.svn目录下还包含了以.svn-base结尾的源代码文件副本(低版本SVN具体路径为text-base目录,高版本SVN为pristine目录),如果服务器没有对此类后缀做解析,则可以直接获得文件源代码。
svn1.7以及以后的版本则只在项目根目录生成一个.svn文件夹,里面的pristine文件夹里面包含了整个项目的所有文件备份
entries和format文件,只有个数字12,没有什么参考意义,wc.db-journal文件是空的,也没有什么价值;tmp目录里面也是空的
pristine文件里面内容就多了,一堆00~ff的文件夹,每个文件夹里有若干个.svn-base文件;用文本编辑器打开看一下,有些是文件代码,有些文件是乱码[可能就是图片]看来这个文件夹是整个项目文件的一份备份,只是一堆哈希过的文件夹
wc.db文件用SQLiteStudio软件打开 wc.db文件,可以看到 NODES 表,遍历这个表里的每一行,就可以下载到整个项目里的代码了,而且还能得到对应的真实文件名。
在实际工作过程中,可以使用 dirb等工具 进行路径扫描:
使用SQKiteStudio软件打开wc.db文件,我们看到NODES表,看到local relpath栏和checksum栏,local relpath栏里面的是原始的文件名,checksum栏里的 s h a 1 sha1 sha1后面的那窜数字就是pristine文件夹里的那堆文件的文件名,pristine里的00~ff文件夹,其实是文件名的前两位,而local relpath就是原始的文件名