学习笔记:文件泄露总结
一、前言
1、文件泄露,根据泄漏的信息敏感程度,在WEB漏洞中可以算是中危甚至高危的漏洞。
2、本篇文章就来介绍下一些常见的泄漏,主要分为由版本管理软件导致的泄露,文件包含导致的泄露和配置错误导致的泄露。
3、本文参考了一些前辈的文章,结合了一些乌云的案例,GitHub的工具地址,分享给大家。
二、版本管理软件造成的泄露
(一)Git源码泄露
1、漏洞产生
Git是一个开源的分布式版本控制系统,在执行git init初始化目录的时候,会在当前目录下自动创建一个.git目录,用来记录代码的变更记录等。发布代码的时候,如果没有把.git这个目录删除,就直接发布到了服务器上,攻击者就可以通过它来恢复源代码。
2、漏洞危害(泄露内容)
(1)所有该项目的源代码
(2)私有仓库的地址
(3)私密的配置信息
(4)所有commiter的邮箱帐号信息
(5)(可能)内部的帐号和密码
3、漏洞利用
常规的利用方法就是下载整个目录, 然后用git命令回滚整个项目
(1)wget -r --no-parent --mirror http://www.example.com/.git
(2)cd www.example.com && git reset --hard
4、漏洞利用工具:GitHack、dvcs-ripper
(1)GitHack
github项目地址:https://github.com/lijiejie/GitHack
(2)dvcs-ripper:基于perl的工具,除了git还支持很多版本管理系统
github项目地址:https://github.com/kost/dvcs-ripper
5、漏洞案例
(1)UC某业务导致敏感内部邮件信息泄露:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-091525
(2)高德软件多个信息泄露,影响公司安全:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-094921
(3)陌陌某重要应用源码泄露:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2014-086227
6、漏洞修复
(1)删除.git目录。
(2)修改中间件配置进行对.git隐藏文件夹的访问。
(二)SVN源码泄露
1、漏洞产生
SVN是一个开放源代码的版本控制系统。在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息。网站管理员在发布代码时,没有使用“导出”功能,而是直接复制代码文件夹到WEB服务器上,这就使.svn隐藏文件夹被暴露于外网环境,可以利用.svn/entries文件,获取到服务器源码。
2、漏洞危害(泄露内容)
(1)所有该项目的源代码
(2)svn仓库的地址
(3)svn仓库所属用户的用户名
3、漏洞利用
同样是先下载目录, 然后回滚
(1)wget -r --no-parent --mirror http://www.example.com/.svn
(2)cd www.example.com && svn revert --recursive
4、漏洞利用工具:Seay-SVN、dvcs-ripper
(1)dvcs-ripper: 支持旧版和新版的svn
github项目地址:https://github.com/kost/dvcs-ripper
(2)Seay-Svn: 法师的工具,基于Windows平台
下载地址:https://www.vuln.cn/2225
5、漏洞案例
(1)淘宝网某应用svn信息导致代码泄露:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2012-012665
(2)新浪某服务器svn源码泄露可SQL影响海量用户数据:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0199607
(3)中国联通整站配置不当导致SVN源码泄露:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0169147
6、漏洞修复
(1)删除web目录中所有.svn隐藏文件夹。
(2)开发人员在使用SVN时,严格使用导出功能,禁止直接复制代码。
(三)hg源码泄露
1、漏洞产生
Mercurial是一种轻量级分布式版本控制系统,使用hg init的时候会生成.hg。
2、漏洞危害(泄露内容)
(1)项目源代码
(2)项目仓库地址
(3)(可能)仓库的用户名
3、漏洞利用
手动利用,下载+回滚:
(1)wget -r --no-parent --mirror http://www.example.com/.hg
(2)cd www.example.com && hg revert
4、漏洞利用工具:dvcs-ripper
(1)dvcs-ripper
github项目地址:https://github.com/kost/dvcs-ripper
5、漏洞修复
删除.hg文件。
(四)CVS泄露
1、漏洞产生
CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。主要是针对 CVS/Root以及CVS/Entries目录,直接就可以看到泄露的信息。
2、漏洞危害(泄露内容)
因为是纯客户端的工具,所以只会泄露源代码
3、漏洞利用
下载CVS文件夹然后通过cvs命令获取源码信息,不过似乎没有直接的回滚操作,需要做点额外的处理。
(1)wget -r --no-parent --mirror http://www.example.com/CVS
(2)cd www.example.com && cvs diff *
4、漏洞利用工具:dvcs-ripper
(1)dvcs-ripper
github项目地址:https://github.com/kost/dvcs-ripper.git
5、漏洞案例
(1)华为某系统CVS信息泄漏:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2014-081481
(2)国泰君安某重要分站CVS信息泄露:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0136373
(3)易宝支付某站多处CVS信息泄露:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0109755
6、漏洞修复
删除cvs文件。
(五)Bazaar/bzr泄露
1、漏洞产生
bzr也是个版本控制工具,虽然不是很热门,但它也是多平台支持,并且有不错的图形界面,bzr在初始化项目时(bzr init/init-repo),会在项目根目录产生名为.bzr的隐藏目录,同样暴露了源代码和用户信息。
2、漏洞危害(泄露内容)
(1)源代码
(2)仓库地址
(3)开发者的信息
3、漏洞利用
没用过bzr工具, 不过查询文档得知可用bzr revert命令来进行回滚
(1)wget -r --no-parent --mirror http://www.example.com/.bzr
(2)cd www.example.com && bzr revert
4、漏洞利用工具:dvcs-ripper
(1)dvcs-ripper
github项目地址:https://github.com/kost/dvcs-ripper.git
5、漏洞修复
同git。
(六)GitHub源码泄漏
1、漏洞产生
GitHub是一个面向开源及私有软件项目的托管平台。很多人喜欢把自己的代码上传到平台托管,通过关键词进行搜索,可以找到关于目标站点的敏感信息,甚至可以下载网站源码。类似的代码托管平台还有很多,人才是最大的漏洞。
2、漏洞利用
https://github.com/search?q=smtp+user+<span>@qq.com</span>&type=code
3、漏洞案例
(1)咕咚网github信息泄露:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0177720
(2)一个github引发的畅捷通渗透测试:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0164337
(3)Github Hack之环球运费网代码泄露(审计发现安全漏洞):https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0152208
二、文件包含导致的泄露
(一)网站备份压缩文件
1、漏洞产生
备份文件泄露又分为两种情况, 一种是运维人员偷懒地直接在网站根目录用类似tar -czvf bakup.tgz 的命令将网站进行备份, 这样整站的源代码都能直接被用户打包下载了; 另一种是开发或者运维人员使用的编辑器修改文件时自动备份了所编辑的网页内容, 如vim的.swp, 从而泄露了该网页的源代码。
2、漏洞利用
对于打包文件而言,渗透测试人员可以用{常用文件名}+{常用压缩包后缀}的方式扫描网站,说不定会有意外惊喜。对于网页的临时备份文件,可以扫描对应页面的.swp或者.bak等后缀,说不定也能找到有用的信息。
3、漏洞工具:御剑、dirsearch
(1)dirsearch
github项目地址:https://github.com/maurosoria/dirsearch
4、漏洞案例
(1)广州医科大学某分站备份文件泄露:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0225610
(2)起点中文网某分站备份文件泄露:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0170753
(3)奥凯航空任意用户登陆/敏感信息泄露/内部文件泄露:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0158981
5、漏洞修复
做好版本管理,并利用版本管理工具过滤掉这些类型的文件,同时不要直接在生产环境中修改或者添加文件。
(二)WEB-INF/web.xml泄露
1、漏洞产生
(1)在Java的Servlet文档中,说到WEB-INF目录“包含了所有web应用会用到但是不处于web路径中的资源”,也就是说,WEB-INF目录下的内容是不属于公开页面的。web应用可以通过getResource等API在servlet的上下文中访问到这些资源。
(2)通常开发者会把许多JSP文件,Jar包,Java的类文件放在该目录下。一般目录的内容都是可以预测的
① WEB-INF/web.xml : Web应用程序配置文件, 描述了servlet和其他的应用组件配置及命名规则.
② WEB-INF/database.properties : 数据库配置文件
③ WEB-INF/classes/ : 一般用来存放Java类文件(.class)
④ WEB-INF/lib/ : 用来存放打包好的库(.jar)
⑤ WEB-INF/src/ : 用来放源代码(.asp和.php等)
2、漏洞利用
通过web.xml文件推测应用组件相关类的名字,然后在src目录下查找代码,如果没有源代码可以直接下载class文件反编译即可。
3、漏洞案例
(1)傲世堂官网WEB-INF目录文件导致信息泄露:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2013-029022
(2)华为官网WEB-INF目录配置文件导致信息泄露:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2013-022906
(3)某政府网站WEB-INF目录读取到Getshell:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2014-068399
4、漏洞修复
发布前确认WEB-INF目录是禁止访问的, 或者在server设置好对于的过滤规则。
(三)DS_Store文件泄露
1、漏洞产生
.DS_Store是Mac下Finder用来保存如何展示 文件/文件夹 的数据文件,每个文件夹下对应一个。如果将.DS_Store上传部署到服务器,可能造成文件目录结构泄漏,特别是备份文件、源代码文件。
2、漏洞利用
.DS_Store的格式为二进制,内部数据结构为Proprietary格式,可以自行解析并递归下载所有文件,参考lijiejie的ds_store_exp。
3、漏洞利用工具:ds_store_exp
(1)ds_store_exp
github项目地址:https://github.com/lijiejie/ds_store_exp
4、漏洞案例
(1)西北大学SQL注入+DS_Store信息泄露+git信息泄露+HP打印机未授权访问:https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0167033
(2)Camera360多各分站服务器配置不当导致未授权访问(DS_Store泄密):https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-095996
(3)TCL某网站DS_Store文件泄露敏感信息(谨慎使用Mac系统):https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-091869
5、漏洞修复
使用macOS开发的同学,可以把.DS_Store加入忽略列表中(如.gitignore),但本质上其只是泄露目录结构,就算删掉.DS_Store,文件也依然存在于web服务器可以访问得到的地方,所以治本的方法还是不要将敏感信息放在web路径中。
(四)SWP文件泄露
1、漏洞产生
swp即swap文件,在编辑文件时产生的临时文件,它是隐藏文件,如果程序正常退出,临时文件自动删除,如果意外退出就会保留,文件名为 .filename.swp。
2、漏洞利用
直接访问.swp文件,下载回来后删掉末尾的.swp,获得源码文件。
三、配置文件的泄露
(一)配置文件泄露
1、漏洞产生
现代WEB开发往往不会重新造轮子,而是基于成熟的框架进行配置,如果渗透测试人员知道该网站是基于什么类型的框架,就可能通过该框架的文档获得重要配置文件的路径,如果是开源框架,同时也能获得源代码,因此配置文件泄露的严重性也是不言而喻的。
2、漏洞利用
通过识别网站指纹得知其框架类型,然后手工测试重要的配置文件是否可以获取。如果是批量测试,则可以事先准备好常见的配置文件路径,如wordpress的/wp-config.php等,组织成字典然后用脚本进行批量测试。
2)可以参考猪猪侠的字典:https://github.com/ring04h/weakfilescan/blob/b1a3066e3fdcd60b8ecf635526f49cb5ad603064/dict/configfile.lst
3、漏洞修复
修改配置文件的默认路径,同时在服务器端阻止对这些路径的访问。
(二)配置错误导致的泄露
1、Windows IIS/Apache 目录穿越
(1)漏洞原理:目录穿越漏洞原理比较简单,程序在实现上没有充分过滤用户输入的../之类的目录跳转符,导致恶意用户可以访问web根目录的上级从而遍历服务器上的任意文件。虽然web服务器本身会禁止访问web文件夹以外的地方,但如果是智障开发引入的动态页面,又没有过滤好用户输入,就可能会出现穿越甚至目录遍历。甚至web服务器本身也曾经有类似的漏洞,比如Apache Tomcat的UTF-8解析漏洞,具体利用和绕过可以参考其他网上的文章,这里限于篇幅就不展开了。
(2)文章地址:https://zhuanlan.zhihu.com/p/21516413
2、Nginx配置安全
(1)漏洞原理:Nginx的配置选项之多,并不是所有人都能熟悉,但不表示随便百度一下复制粘贴就配置了,最好还是先看下官方文档对应选项的作用和用法,可以避免许多致命的错误。例如Nginx在代理静态文件时,如果不小心在配置文件中写错了一个字符:location /static {alias /home/web/static/;},就会导致访问http://example.com/static../时可以访问上级目录,从而访问到敏感的信息。关于nginx配置安全,离别歌的这篇文章其实写得很不错,值得每个开发和运维人员仔细了解。
(2)文章地址:https://www.leavesongs.com/PENETRATION/nginx-insecure-configuration.html
四、后记
1、最后引用大佬的话
敏感信息泄露时有发生,而且通常会造成不可预知的危害。本文讨论了一些文件泄露的例子,可以说是信息泄露的一个子集。文件泄露很大程度上是由于人的粗心导致,因此最好的预防办法就是规范开发部署流程,尽量减少人为操作引入的失误。引用猪猪侠的一句话:“我们面对的对手都是信息挖掘和资源整合的高手,他们只要赢一次,我们就永远输了。”
2、参考文章
(1)https://www.secpulse.com/archives/tag/swp-文件泄露
(2)https://evilpan.com/2017/09/22/web-file-disclosure/
(3)https://www.cnblogs.com/xiaozi/p/12397114.html
(4)https://wy.zone.ci/