SVN(subversion)是源代码版本管理软件,造成SVN源代码漏洞的主要原因是管理员操作不规范。“在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息。但一些网站管理员在发布代码时,不愿意使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使.svn隐藏文件夹被暴露于外网环境,黑客可以借助其中包含的用于版本信息追踪的‘entries’文件,逐步摸清站点结构。”(可以利用.svn/entries文件,获取到服务器源码、svn服务器账号密码等信息)
更严重的问题在于,SVN产生的.svn目录下还包含了以.svn-base结尾的源代码文件副本(低版本SVN具体路径为text-base目录,高版本SVN为pristine目录),如果服务器没有对此类后缀做解析,黑客则可以直接获得文件源代码。
1. svn问题出现
警报组找到SVN存储库(已验证)
严重程度高
描述在此文件夹中找到了Subversion元数据目录(.svn)。攻击者可以通过请求流行的版本控制工具Subversion创建的隐藏元数据目录来提取敏感信息。元数据目录用于开发目的,以便在将一组源代码提交回中央存储库之前跟踪对一组源代码的开发更改(反之亦然)。当代码从存储库滚动到活动服务器时,应该将其作为导出而不是本地工作副本来完成,因此会出现此问题。
推荐建议从生产系统中删除这些文件或限制对.svn目录的访问。要拒绝访问所有.svn文件夹,您需要在适当的上下文中添加以下行(全局配置,vhost /目录或来自.htaccess):<Directory ~ "\.svn">
Order allow,deny
Deny from all
</Directory>
警报变体
细节SVN文件位于:/ . svn/ entries。
储存库URL:http : //192.168.0.9/hdplat/swic/irtu/src/trunk/irtu_sw_new/irtu-ui-new/public
储存库文件/目录:
favicon.icoindex.html
存储库用户:
zhen
GET /.svn/entries HTTP/1.1Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Encoding: gzip,deflateHost: 172.16.22.249:42496User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.21Connection: Keep-alive
2. 解决办法
利用
1、漏洞利用工具: Seay SVN漏洞利用工具
2、添加网站url
在被利用的网址后面加 /.svn/entries,列出网站目录,甚至下载整站。
修复
1、在web服务器配置文件中增加一段代码,过滤到.svn文件,返回404
nginx服务器:
location ~ ^(.*)\/\.svn\/
{
return 404;
}
重启nginx
Apache服务器:
Order allow,deny
Deny from all
重启Apache
2、查找服务器上所有.svn隐藏文件夹,删除
以下命令删除当前目录下.svn文件夹
find . -type d -name ".svn"|xargs rm -rf
rm -rf `find . -type d -name .svn`
find . -name ".svn" -type d | xargs rm -fr
find . -name ".svn" -type d | xargs -n1 rm -R
使用脚本删除
#!/bin/sh
cd /home/web/
find ./ -name ".svn" |xargs -n1 echo > /dev/null 2>&1
find ./ -name ".svn" -print0 | xargs -0 rm -fr
if [ $? -ne 0 ]; then
echo "remove .svn dirs failed!"
fi
以上文件保存为.sh
执行之后,会删除 /home/web目录及其子目录中 所有 .svn 隐藏文件夹
防御
开发人员在使用SVN时,严格使用导出功能。禁止直接复制代码。