安装sqlite3数据库查看.svn的wc.db文件并解决源码泄露问题
项目中遇到的原代码泄露问题简述:
某项目验收进行渗透测试时,发现存在SVN源码泄露的风险;原因是可以通过.svn目录下的wc.db文件将SVN内所有文件下载下来。
具体漏洞和现象如下:
漏洞名称 | SVN源码泄露 |
漏洞危害 | 高危 |
漏洞地址 | https://abcyimioncba.com/xk/bank/jyyh/.svn/wc.db |
漏洞参数 | - |
漏洞说明 | 网站开发、运维人员在部署生产环境时,将SVN平台部署在当前网站上,并未设置访问权限控制,造成源码泄漏。 |
修复建议 | 不要将svn放置在外网 |
漏洞详情 | 项目服务地址(https://abcyimioncba.com/xk/bank/jyyh/#/home) 该网站存在SVN漏洞,可以通过。https://abcyimioncba.com/xk/bank/jyyh/.svn/wc.db下载wc.db文件,在该数据库文件中,获取当前SVN平台中存放文件的路径以及访问权限。 通过wc.db将SVN内所有文件下载下来。 |
通过wc.db将SVN内所有文件下载下来
SQLite简介
SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。
SQLite 数据库作用: 离线缓存数据
优势:SQLite 是一个轻量级(嵌入式)的数据库,跨平台,体积小,功能强大.
.svn的wc.db文件简介
在 Windows 上安装 SQLite
1.下载SQLite的windows安装包
创建安装目录:D:\Program Files\sqlite,并在此文件夹下解压上面两个压缩文件,把解压得到的 sqlite3_analyzer.exe、sqlite3.exe和 sqldiff.exe 文件放到D:\Program Files\sqlite目录中。
配置环境变量:在PATH参数后面加上;D:\Program Files\sqlite
验证:在控制台输入sqlite3,如下即为成功
在 Linux 上安装 SQLite
目前,几乎所有版本的 Linux 操作系统都附带 SQLite。所以,只要使用sqlite3命令来检查您的机器上是否已经安装了 SQLite。
如果没有看到上面的结果,那么就意味着没有在 Linux 机器上安装 SQLite。因此,按照下面的步骤安装 SQLite:
下载安装包:sqlite-autoconf-*.tar.gz。
步骤如下:
$ tar xvzf sqlite-autoconf-3071502.tar.gz
$ cd sqlite-autoconf-3071502
$ ./configure --prefix=/usr/local
$ make
$ make install
完成后可以按照上述讲解的进行验证。
使用sqlite查看.svn目录下的wc.db文件
漏洞分析
漏洞出现的原因
该漏洞出现的根本原因是服务器上包含有导致源代码泄露的文件,并且也没有对用户的访问权限加以控制。
Jenkins构建Docker镜像环节
Jenkins从SVN中checkout代码的时候,项目目录下会生成隐藏的.svn文件夹(里面包含导致源代码泄露的所有文件),Jenkins工作空间中的代码结构如下:
用户访问环节
nginx没有配置目录访问权限、没有禁止访问.svn目录
漏洞解决办法
从以上漏洞产生的原因可以得出相应的解决办法:
1.使服务器上不存在.svn目录
2.限制用户访问.svn目录
Jenkins构建Docker镜像环节
在打包编译之前删除.svn目录;静态资源或代码中就不会存在此文件,也就不存在访问问题。
实施办法:在对应各项目的jenkins-job中加上删除.svn目录的脚本语句(rm –rf .svn目录),然后再执行后续的编译构建流程即可。
截图如下:
修改后验证是否含有.svn目录:
用户访问环节
nginx配置拦截,不允许访问.svn开头的文件;直接限制用户访问敏感文件。
配置截图如下: