前言
在Web安全之中,可能大家对SQL注入、XSS跨站脚本攻击、文件上传一些漏洞已经耳熟于心了,这些漏洞可以对系统造成严重的风险,今天来看一个造成的风险完全不低于上述的漏洞,那就是源码泄露,而且web源码泄露在实际中并不少见,一些大的厂商也有可能存在这种风险。
常用的源码泄露漏洞
下面是一些常见的源码泄露漏洞
git源码泄露
漏洞成因
Git是一个开源的分布式版本控制系统,在执行git init初始化目录的时候,会在当前目录下自动创建一个.git目录,用来记录代码的变更记录等。发布代码的时候,如果没有把.git这个目录删除,就直接发布到了服务器上,攻击者就可以通过它来恢复源代码。
git目录结构
• HEAD:这个git项目当前处在哪个分支里; • config:文件包含项目特有的配置选项,git config命令会改动它; • description:项目的描述信息 • hooks/:系统默认钩子脚本目录 • info/:目录包含一个全局性排除(global exclude)文件,用以放置不希望被记录在 .gitignore 文件中的忽略模式(ignored patterns) • objects/:目录存储所有数据内容 (commits, trees, blobs, tags) • refs/:标识你项目里的每个分支指向了哪个提交(commit)。 • index:文件保存暂存区信息
漏洞利用
利用工具:GitHack
github地址:https://github.com/lijiejie/GitHack
使用方式
python GitHack.py http://www.example.com/.git/
修复建议
删除.git目录或者修改中间件配置进行对.git隐藏文件夹的访问。
SVN源码泄露
漏洞成因
SVN是源代码本地管理软件。使用SVN管理本地代码过程中,会生成一个名为.svn的隐藏文件夹,其中包含重要的源码信息。而造成.svn文件泄露的主要原因还是网站管理员在发布代码时,没有使用导出功能,而直接进行复制粘贴。这就使.svn隐藏文件夹被暴露于外网环境,可以利用.svn/entries文件,获取到服务器源码。
漏洞利用
利用工具
svnExploit
github地址:https://github.com/admintony/svnExploit
使用方式
安装依赖库
sudo pip install -r requirements.txt
查看帮助
python SvnExploit.py -h
检测SVN源代码泄露
python SvnExploit.py -u http://192.168.27.128/.svn
下载源代码
python SvnExploit.py -u http://192.168.27.128/.svn --dump
修复建议
-
不要使用svn checkout和svn up更新服务器上的代码,使用svn export(导出)功能代替。
-
服务器软件(Nginx、apache、tomcat、IIS等)设置目录权限,禁止访问.svn和.git目录
DS_Store 文件泄露
漏洞成因
.DS_Store是Mac OS保存文件夹的自定义属性的隐藏文件,如文件的图标位置或背景色,相当于Windows的desktop.ini。
由于开发人员发布代码时未删除文件夹中隐藏的.DS_store,可能造成文件目录结构泄漏、源代码文件等敏感信息的泄露。
漏洞利用
利用工具:ds_store_exp
github地址:https://github.com/lijiejie/ds_store_exp
ds_store_exp.py http://hd.zj.qq.com/themes/galaxyw/.DS_Store
hd.zj.qq.com/
└── themes
└── galaxyw
├── app
│ └── css
│ └── style.min.css
├── cityData.min.js
├── images
│ └── img
│ ├── bg-hd.png
│ ├── bg-item-activity.png
│ ├── bg-masker-pop.png
│ ├── btn-bm.png
│ ├── btn-login-qq.png
│ ├── btn-login-wx.png
│ ├── ico-add-pic.png
│ ├── ico-address.png
│ ├── ico-bm.png
│ ├── ico-duration-time.png
│ ├── ico-pop-close.png
│ ├── ico-right-top-delete.png
│ ├── page-login-hd.png
│ ├── pic-masker.png
│ └── ticket-selected.png
└── member
├── assets
│ ├── css
│ │ ├── ace-reset.css
│ │ └── antd.css
│ └── lib
│ ├── cityData.min.js
│ └── ueditor
│ ├── index.html
│ ├── lang
│ │ └── zh-cn
│ │ ├── images
│ │ │ ├── copy.png
│ │ │ ├── localimage.png
│ │ │ ├── music.png
│ │ │ └── upload.png
│ │ └── zh-cn.js
│ ├── php
│ │ ├── action_crawler.php
│ │ ├── action_list.php
│ │ ├── action_upload.php
│ │ ├── config.json
│ │ ├── controller.php
│ │ └── Uploader.class.php
│ ├── ueditor.all.js
│ ├── ueditor.all.min.js
│ ├── ueditor.config.js
│ ├── ueditor.parse.js
│ └── ueditor.parse.min.js
└── static
├── css
│ └── page.css
├── img
│ ├── bg-table-title.png
│ ├── bg-tab-say.png
│ ├── ico-black-disabled.png
│ ├── ico-black-enabled.png
│ ├── ico-coorption-person.png
│ ├── ico-miss-person.png
│ ├── ico-mr-person.png
│ ├── ico-white-disabled.png
│ └── ico-white-enabled.png
└── scripts
├── js
└── lib
└── jquery.min.js
21 directories, 48 files
修复建议
不影响应用运行的情况下删除.DS_Store文件
网站备份压缩文件泄露
漏洞成因
在网站正常使用中,往往需要经过修改和升级,这时就需要对网站或对某处数据进行备份。而备份文件会因为各种原因保存在网站web目录下,而当对此目录没有访问权限限制时,就很可能会导致备份或缓存文件被下载下来。
该漏洞往往会导致服务器整站源代码或者部分页面的源代码被下载,利用。源代码中所包含的各类敏感信息,如服务器数据库连接信息,服务器配置信息等会因此而泄露,造成巨大的损失
常见备份文件后缀
• .rar
• .zip
• .7z.
• tar
• .gz
• .bak
• .swp
• .txt
• .html
常见的网站源码备份文件名
web
website
backup
back
www
wwwroot
temp
漏洞利用
像备份压缩文件泄露,可以直接用专门的目录扫描工具进行敏感文件扫描
利用工具:御剑、disearch.py
修复建议
• 做好目录访问限制
• 在不影响运行的情况下,及时删除备份文件
WEB-INF/web.xml泄露
漏洞成因
WEB-INF 是 Java 的 WEB 应用的安全目录 ,该目录原则上来说是客户端无法访问,只有服务端才可以可以访问。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。
WEB-INF主要包含一下文件或目录:
-
• /WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则
• /WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
• /WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
• /WEB-INF/src/:源码目录,按照包名结构放置各个java文件。
• /WEB-INF/database.properties:数据库配置文件
WEB-INF/web.xml泄露的起因就是我们在使用网络架构的时候,对静态资源的目录或文件的映射配置不当,可能会引发一些的安全问题,导致web.xml等文件能够被读取。
漏洞利用
扫描后台有没有WEB-INF/web.xml,然后直接访问
通过找到web.xml文件,分析可用敏感信息,推断class文件的路径,直接class文件,最后再通过反编译class文件,得到网站源码。
修复建议
合理配置,控制目录访问权限
CVS泄漏
漏洞成因
cvs项目在初始化(cvs checkout project)的时候, 会在project目录下创建一个名为CVS的目录,
其中保存了各个文件的修改和commit记录. 通过此目录可以获取代码的历史版本. 其中两个关键文件为:
CVS/Root和CVS/Entries, 分别记录了项目的根信息和所有文件的结构
漏洞利用
主要是针对 CVS/Root以及CVS/Entries目录,直接就可以看到泄露的信息。
工具:dvcs-ripper
github地址:https://github.com/kost/dvcs-ripper
rip-cvs.pl -v -u http://www.example.com/CVS/
修复建议
删除CVS的CVS目录
.hg源码泄露
漏洞成因
Mercurial 是一种轻量级分布式版本控制系统, 使用hg init 新建仓库的时候,会生成一个备份文件.hg。
利用方式
工具:dvcs-ripper
github地址:https://github.com/kost/dvcs-ripper
Example run (for hg):
rip-hg.pl -v -u http://www.example.com/.hg/
It will automatically do hg revert <file>
or if you would like to ignore SSL certification verification (with -s):
rip-hg.pl -s -v -u http://www.example.com/.hg/
修复建议
删除web目录中所有.hg隐藏文件夹
Bazaar/bzr泄露
漏洞成因
bzr也是个版本控制工具, 虽然不是很热门, 但它也是多平台支持, 并且有不错的图形界面。
利用方式
工具:dvcs-ripper
github地址:https://github.com/kost/dvcs-ripper
Example run (for bzr):
rip-bzr.pl -v -u http://www.example.com/.bzr/
It will automatically do bzr revert
or if you would like to ignore SSL certification verification (with -s):
rip-bzr.pl -s -v -u http://www.example.com/.bzr/
修复建议
删除web目录中所有.bzr隐藏文件夹
.swp文件泄露
漏洞成因
swp即swap文件,在编辑文件时产生的临时文件,它是隐藏文件,如果程序正常退出,临时文件自动删除,如果意外退出就会保留,文件名为 .filename.swp。
漏洞利用
可通过直接访问.swp文件,下载回来后删掉末尾的.swp,获得源码文件。
修复建议
删除web目录中所有.swp隐藏文件夹
防范措施
源码泄露的危害是巨大的,因此在企业内要根据实际情况选择恰当的方式去发现以及杜绝此类风险。
1)nginx上配置拒绝对对相应目录的访问
2)上线时检测是否存在相应的目录,防止带有.git的目录上线
3)线上定期巡检web目录,检查是否有相关的目录
参考链接
https://www.freebuf.com/articles/web/346607.html
https://cloud.tencent.com/developer/article/2127503
原文始发于微信公众号(信安路漫漫):web源码泄露
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论