SVN信息泄露漏洞
0x00:简介
据介绍,SVN(subversion)是程序员常用的源代码版本管理软件。
在服务器上布署代码时。如果是使用 svn checkout 功能来更新代码,而没有配置好目录访问权限,则会存在此漏洞。黑客利用此漏洞,可以下载整套网站的源代码。
使用svn checkout后,项目目录下会生成隐藏的.svn文件夹(Linux上用ls命令看不到,要用ls -al命令)。
svn1.6及以前版本会在项目的每个文件夹下都生成一个.svn文件夹,里面包含了所有文件的备份,文件名为 .svn/text-base/文件名.svn-base
svn1.7及以后版本则只在项目根目录生成一个.svn文件夹,里面的pristine文件夹里包含了整个项目的所有文件备份
隐患描述:SVN(subversion)是源代码版本管理软件,造成SVN源代码漏洞的主要原因是管理员操作不规范。“在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息。但一些网站管理员在发布代码时,不愿意使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使.svn隐藏文件夹被暴露于外网环境,黑客可以借助其中包含的用于版本信息追踪的‘entries’文件,逐步摸清站点结构。”(可以利用.svn/entries文件,获取到服务器源码、svn服务器账号密码等信息)
更严重的问题在于,SVN产生的.svn目录下还包含了以.svn-base结尾的源代码文件副本(低版本SVN具体路径为text-base目录,高版本SVN为pristine目录),如果服务器没有对此类后缀做解析,则可以直接获得文件源代码。
危害:
一旦网站出现SVN漏洞,其危害远比SQL注入等其它常见网站漏洞更为致命,因为黑客获取到网站源代码后,一方面是掠夺了网站的技术知识资产,另一方面,黑客还可通过源代码分析其它安全漏洞,从而对网站服务器及用户数据造成持续威胁。(git同理)
.svn上可能有账户名和地址,说不定会有弱口令给你同步代码下来
参考链接:
https://www.cnblogs.com/batsing/p/svn-bug.html
https://blog.csdn.net/qq_36869808/article/details/88846945
https://blog.csdn.net/qq_36869808/article/details/88847364
https://blog.csdn.net/qq_36869808/article/details/88848414 漏洞挖掘
0x01:SVN目录
此图来自其他博客
wc.db文件
用SQLiteStudio软件打开 wc.db文件,我们看到 NODES 表,看到 local relpath栏 和 checksum栏,明白了吗(滑稽.jpg)。checksum栏里的$sha1$后面的那串数字就是pristine文件夹里的那堆文件的文件名,pristine里的00~ff文件夹,其实是文件名的前两位,而local relpath就是原始的文件名。
现在,我们根据这个 wc.db 的NODES表,遍历这个表里的每一行,就可以下载到整个项目里的代码了,而且还能得到对应的真实文件名,可谓岂不快哉?
简单的讲 wc.db是一个数据库文件,里面存放了网站目录信息
0x02:漏洞检测
最简单的检测方法是 在网站后面 + /.svn/entries
工具检测方法,检测工具:https://github.com/admintony/svnExploit
python SvnExploit.py -u http://xxxxxx.com/.svn //检测是否存在漏洞
python SvnExploit.py -u http://xxxxxx.com/.svn --dump //下载网站源码
0x03:漏洞修复
(1)删除/.svn 文件夹
(2)禁止访问 /.svn 目录
要说过滤的话
Apache:
Nginx:location ~ ^(.*)\/\.svn\/ {<br />return 404;<br />}
Done!
相关推荐
pub_svnserve.conf的 pub_authz.conf的配置文件有非法字符的原因引起,需要查找pub_authz.conf提的非法内容比如多余的空格删除或直接将pub_authz.conf