介绍
信息泄露漏洞是指网站在无意中向用户泄露敏感信息,根据上下文,网站可能会在无意中向攻击者泄露各种信息,包括:
- 其他用户信息
- 敏感商业或业务数据
- 有关网站以及基础设置的技术细节
原因
信息泄露可能存在无数不同的方式出现,但是可以大致分为以下几类:
- 没有从公共内容删除内部数据 eg: 开发人员注释
- 网站和相关技术的不安全配置 eg: 没有禁用调试和诊断功能
- 应用程序的设计和行为存在缺陷
影响
信息泄露的产生可以帮助攻击者更好的了解关于目标的认识
攻击
1. 网站爬虫文件 / 站点地图
许多网站会提供 robots.txt 或者 sitemap.xml 配置文件,这些文件中可能存在一些利用的位置
2. 网站源码
比如 js``html 注释
等等中会泄露一些子域的一些信息
3. 目录列表
WEB 服务器可以配置为自动列出没有索引页的目录的内容,这会帮助攻击者快速识别路径上的资源并直接进行分析和攻击
4. 网站图标
当使用框架构建网站时,开发人员很有可能没有替换网站图标,所以我们可以根据网站图标来查找对应的 CMS 类型
5. HTTP 头
当响应中存在过多的 HTTP 头部信息时,也有可能会泄露网站的架构或者其他信息
6. 开发者注释
有时候开发者会忽略在页面中的一些注释内容,这可能帮助攻击者访问一些特殊的网页
7. 错误信息
错误信息的内容可以帮助攻击者了解有关给定参数的输入或数据类型的信息,这可以帮助我们缩小攻击范围
详细的错误信息还可能提供有关网站的不同技术的信息
8. 调试数据
许多网站会生成自定义错误消息和日志,其中包含了大量有关应用程序的信息,在实际环境中调试信息会包含对发起进攻的至关重要的信息:
- 后端组件的主机名和凭据
- 服务器上的文件和目录名称
- 用于加密通过客户端传输的数据的密钥
9. 用户账户页面
用户的个人资料中通常会包含用户的敏感信息,eg: 电子邮件地址、电话号码、API 密钥等,但是一般用户只能访问自己的页面,这并不会产生漏洞,但是一些网站可能会包含 逻辑缺陷
这可能会让攻击者利用该缺陷查看其他用户数据
10. 备份文件泄露源代码
1. .DS_Stor 源码泄露
在发布代码时未删除隐藏的 .DS_Stor 被发现后,获取敏感文件名等信息
dumpall -u http://example.com/.DS_Store/
2. .hg 源码泄露
hg init的时候会生成.hg
./rip-hg.pl -v -u http://www.example.com/.hg/
cat .hg/store/fncache
3. CVS 泄露
/CVS/Root 返回根信息
/CVS/Entries 返回所有文件的结构
rip-cvs.pl -v -u http://www.example.com/CVS/
4. .SVN 源码泄露
漏洞概述: 在使用 SVN 管理本地代码过程中,使用 svn checkout 功能来更新代码时,项目目录下会自动生成隐藏的.svn
文件夹。
一些网站管理员在发布代码时,不愿意使用“导出”功能,而是直接复制代码文件夹到WEB服务器上,这就使得.svn
隐藏文件夹被暴露于外网环境
访问目标存在以下文件
.svn/entries
.svn/wc.db
漏洞利用
**.svn/pristine**
目录 : 直接访问获得文件源代码
wc.db文件
用Navicat
软件打开 wc.db
文件,可以看到 NODES 表,遍历这个表里的每一行,就可以下载到整个项目里的代码了,而且还能得到对应的真实文件名。
REPOSITORY
表里面存储了svn的项目路径和 uuid,如果没有做访问IP限制的话,可以直接使用此信息取得此项目的SVN权限(下载、提交等)
./rip-svn.pl -v -u http://www.example.com/.svn/
http://47.110.235.233:8089/.svn/pristine/
5. .Git 源码泄露
- 漏洞概述: 在运行git init初始化代码库的时候,会在当前目录下面产生一个.git的隐藏文件,用来记录代码的变更记录;在发布代码的时候,.git目录没有删除,使用这个文件,可以恢复源代码
- 漏洞验证:
/.git/config 页面存在
- 漏洞利用:
文件夹分析
index:文件保存暂存区信息
info:存放仓库的信息
object:存放所有git对象的地方
refs:存放提交hash的地方
config:github的配置信息
description:仓库的描述信息,主要给gitweb等git托管系统使用
HEAD:映射到ref引用,能够找到下一次commit的前一次哈希值
- Stash
#需要使用可还原历史版本那个Githack才行
1、查看 .git/refs/stash 找到 stash 对应的 hash
2、git diff hash值
- Log
# 1、执行 git log 查看历史记录
# 2、与上(某)次提交进行比对
git diff log中的hash前四位
# 或者
git diff HEAD^
# 3、或者直接切换到上个 (3e25d) 版本
git reset --hard 3e25d
# 或
git reset --hard HEAD^
防御
因为信息泄露的方式多种多样,因此要完全防止信息泄露送很困难,但是我们可以设置一些比较通用的做法来降低风险
- 开发人员应该了解那些信息被视为敏感信息
- 我们需要审计代码以发现潜在的信息泄露
- 尽可能使用通用的错误信息
- 仔细检查是否在开发环境中禁用了调试和诊断功能
工具
- 源码泄露类最好用的工具:dvcs-ripper
- GitHack