区分垂直越权和水平越权。
一、本质
垂直越权的本质是权限提升,破坏了系统角色和功能的映射关系。低权限用户执行了高权限功能,系统未强制证实用户所属的角色层级。
水平越权的本质是数据横移,破坏了系统用户和数据所有权的绑定关系。同级别用户访问了他人数据,系统只认证了身份,却未检查操作者是不是为该数据的所有者。
二、攻击手法
垂直越权重视功能入口的突破。 一是直接访问高权限接口如用普通用户证据强行请求/admin/deleteUser,看后端是不是拦截。二是篡改权限标识,修改Cookie或请求体中声明角色的参数,如将role=user改为admin,试探系统是不是根据客户端声明来赋予权限。
水平越权重视资源标识符的遍历。 操作是替换业务ID。攻击者A查看自己订单后,将请求中的orderId=108改为orderId=109,尝试获取B的订单。这种攻击不依赖猜测UUID,只要知道资源标识符就能发起,本质是访问即所有的思路缺失。
三、测试思路
测垂直越权是以低测高。 先获取低权限用户证据,再拿着它请求预先用管理员账号采集到的所有高权限功能接口。如果返回成功数据而不是403禁止访问,即存在漏洞。
测水平越权是以A查B。 用两个同级别账户,A登录后,将请求自己资源时的ID参数替换为B创建的资源ID。如果A能看到B的数据或操作其对象,即存在漏洞。
一个银行柜员能访问行长才能看的全行经营报表,这叫垂直越权;一个柜员能查看另一名柜员名下管理的客户隐私存款,这叫水平越权。前者是越级拿了功能钥匙,后者是在同级房间里开了别人的抽屉。