什么是越权访问漏洞?
“越权访问漏洞” 是 “逻辑漏洞” 的一种,是由于网站系统的权限校验的逻辑不够严谨,没有对用户权限进行严格的身份鉴别,导致普通权限的用户做到了其它普通用户或管理员才能完成的操作,称之为“越权访问”。
越权漏洞分类
越权漏洞我个人把它分为三类:
- 水平越权:原本只能操作自己的数据,如增删改查,通过越权操作,能操作其它同等权限的账号数据。
- 垂直越权:账号原本是低权限,通过越权操作,获取了高权限。
- 未授权访问:即不需要登录认证,通过越权操作,直接获得了某个功能权限。
水平越权:
首先使用 lili 的账号进行登录
点击查看个人信息,抓包
将用户名 lili 改成 lucy ,放包
成功水平越权,获得lucy的个人信息。
垂直越权:
先使用 admin 账户登录
然后点击添加用户,抓包并放到重放器
接着用普通用户pikachu登录,密码:000000;抓包,将pikachu的cookie替换到admin的cookie并发包;
利用普通用户的权限创建了新用户,垂直越权成功。
发现越权漏洞的思路
越权漏洞产生的原因:
想要发现越权漏洞,就要知道漏洞出现的原因;越权漏洞的出现大致有以下几种场景:
1、隐藏 URL :
- 有些程序的管理页面只有管理员才会显示,普通用户无法看不到,程序开发人员利用 URL 实现访问控制。但若URL 泄露或被恶意攻击者猜到后,这会导致普通用户访问导致出现越权攻击。
2、直接对象引用:
- 这种通过修改验证参数就可以模拟成其他用户进行访问。例如:查看用户信息页面 URL 后加上自己的 id 便可查看,当修改为他人的 ID 号时会返回他人的信息,便产生了水平越权。
3、多阶段功能处疏忽:
- 多阶段功能是一个功能由多个阶段来进行实现。例如:修改密码,可能第一步是验证用户身份信息,号码验证码类的。当验证成功后,跳到第二步,输入新密码,很多程序会在这一步不再验证用户身份,导致恶意攻击者抓包直接修改标识身份参数值,导致可修改其他用户密码。
4、静态文件下载疏忽:
- 很多网站的下载功能,一些被下载的静态文件,可能只有付费用户或会员可下载。但当这些文件的 URL 地址泄露后,导致任何人可下载,如果知道 URL 命名规则,则会便利服务器的收费文档进行批量下载。
5、平台验证权限配置错误:
- 一些程序会通过控件来限制用户的访问。例如后台地址,普通用户不属于管理员组,则不能访问。但当配置平台或配置控件错误时,就会出现越权访问。
发现漏洞的思路:
-
使用已登陆账户访问页面的URL让未登录用户直接访问,根据是否能访问判断是否由未授权访问。
-
使用普通账户标识信息去替换其他普通账户标识,根据是否能进行访问判断是否有水平越权漏洞。
-
使用普通账户标识信息去替换管理员账户标识,根据是否能进行访问判断是否有垂直越权漏洞。
越权漏洞从方式上可分为两大类:
-
未使用 cookie 鉴权,通过修改 userid 等字段进行越权。
-
使用 cookie 鉴权,未检测对应操作是否符合当前权限预期。
测试工具
可以使用Burp扩展:Autorize,来快速测试垂直越权和未授权访问。
还是以 pikachu 靶场为例
先登录低权限 pikachu 用户(密码:000000),然后点击 Fetch Cookies header,会从最近一次请求历史中提取cookie
然后登录 admin(密码:123456)用户,再点击 autorize is off 打开该插件(autorize is on为开启状态)。
然后在 admin 权限下,快速点击所有可以点击的接口(要保证两个cookie 都未过期)。
然后就可以看到,右边三个框发的包,分别是:
- 原始cookie的请求
- 修改后cookie的请求(就是之前复制进去的那个低权限cookie)
- 无cookie请求
那么与之相对的左边那几个带颜色的就是测试结果,红色存在越权,黄色代表不确定,绿色代表没问题。
- 左边一列 红色代表存在越权可能
- 右边一列 红色代表存在未授权访问可能
可以点击 三个代表响应长度的数字,分别是原始长度,替换低权限后的长度,以及未授权的长度,在右侧查看具体响应,根据长度也可以判断结果了。