本文旨在结合真实项目案例,以通俗易懂的方式呈现漏洞的核心要点,确保读者在阅读后能够迅速理解并付诸实践。我们将力求用最简洁的语言,让你了解漏洞的特性,让你读完本文后便能轻松上手。
NO.0
目录
01
未授权原理与分析
02
越权原理与场景分析
03
常见面试问题
NO.1
未授权分析
01
原理:
未授权指系统或应用程序未对访问用户身份进行验证或权限校验,常见场景:
1、应用服务端的访问控制失效或缺失导致的API接口未授权访问
2、中间件、Dock、Redis等服务的未授权访问
此类漏洞较为常见,此处以应用API未授权为例进行讲解。
防御:
未授权与越权这类问题的修复方案就是完善访问控制,如果是中间件或服务类,需要更改配置或更新补丁。
02
分析:
日常的渗透测试,对于未授权部分主要检测分为两方面:
一、中间件、服务端服务【Tomcat、Weblogic、Redis等】的已知漏洞排查
二、应用API接口的未授权梳理【一般梳理全部接口,较为繁琐】
实例:
此处以API接口的未授权排查为例,已知漏洞一般排查是通过专项漏洞检测或工具扫描后进行梳理。
检测方法:删除所有的认证信息,重新发包,成功则存在未授权访问,常见的认证凭据关键词:Authorisation、login-token、token、Cookie等,如下:
工具辅助:
burp插件autorize,开启自动模式,会自动替换认证关键词凭据,从而可以检测未授权与越权,如下:
https://github.com/Quitten/Autorize
NO.2
越权原理与分析
01
原理:
在应用程序中由于权限控制不当,导致用户可以访问到本身没有权限访问的数据或API即是越权访问。越权访问通常分为水平越权和垂直越权,垂直越权访问指低权限账户可越权访问需要高权限才能访问的功能【API接口】,水平越权访问指同权限的不同的账户的数据互相访问,如 A 用户可以访问 B 用户的资料、订单等
防御:
未授权与越权这类问题的修复方案就是完善访问控制,如果是中间件或服务类,需要更改配置或更新补丁。
02
横向与纵向越权分析:
横向越权【水平越权】:指的是同级别用户跨数据操作,如两个淘宝用户A、B,正常情况下A不能查看和操作B的购物数据,如果发生了用户A可以查看用户B的购物数据和退货B的购物商品等操作,此类情况就是横向越权。【拥有相同的API权限时,需要在数据上做隔离防护,也称数据隔离】
纵向越权【垂直越权】:指的是不同级别用户的API越权,一般是普通用户没有某个功能API,只有管理员可以访问这个接口,此时普通用户成功访问了这个接口,此类情况就是纵向越权。另一种情况就是API接口通用但是普通用户和管理员查看的数据范围不同,如果普通用户查看了管理员的数据也是纵向越权。
实际项目分析:
越权问题在日常的渗透测试中是比较简单但非常繁琐的一个检测内容,一般需要全量接口列表,最好是POSTMan的数据包,另外就是不同角色用户的权限矩阵,这些内容一般需要开发提供,但如果没有完善的SDL体系,一般这些我们是拿不到的,那就没办法,从页面功能挨个访问,开启Burp利用Autorize插件进行筛选,但插件适用的越权范围有限,一般涉及订单ID类型和复杂场景,插件无法解决,就需要手工排查,是一个非常繁琐的过程,下面针对常见的场景进行分析。
03
身份认证信息类越权:
此类越权指通过身份凭据如:Token、Cookie、Authorisation等身份凭证信息来判断用户的身份和权限,此时只需替换管理员API的身份凭证信息就可以验证是否存在越权,此类可通过Autorize插件来辅助进行渗透。
管理员API --> 普通用户的Token/Cookie --> 访问结果判断-->成功则存在越权,否则不存在
ID类型越权:
此类越权不更改用户身份凭证信息,只更改ID,如:用户ID、订单ID、流程单据ID,一般存在场景为:服务端通过ID来判断需要访问那些数据,但ID和用户身份未绑定,从而导致越权
横向越权:更改为同权限用户userID、订单ID来查看和操作其他普通用户的个人信息等数据
纵向越权:更改为管理员用户userID、订单ID来查看和操作管理员数据
ID类无法使用插件进行,需要手工进行判断,一般关键词:ID、userID等,具体要结合项目进行判断。
04
复杂场景的越权分析:
用户的身份鉴权绑定了个人信息如手机号、身份证号等,如下:
包含了id、userID、手机号、身份证号,需要考虑以下几个维度:
* ①身份凭证替换【Token、Cookie】
* ②ID替换【更改ID或userID】,判断用户身份与ID是否绑定
* ③实名与未实名判断,实名时校验身份证Idcard和手机号Phone,未实名只校验TokenCookie,判断是否可以利用未实名用户越权操作实名用户数据
* ④置空判断,置空Idcard、Phone判断是否可以绕过实名校验,具体要结合代码分析,如果黑盒进行那么需要猜测如:置空用户名或ID是否可以绕过鉴权
上面的案例,结合了较多的判断逻辑,需要进行拆分,一一判断是否存在问题,尤其是置空,需要分析校验逻辑,猜解是否存在缺乏内容为空的判断,逻辑越复杂,越权越可能存在,将判断条件重组挨个进行尝试则可。
NO.3
面试问题
01
你如何测试越权类问题?
* 如果对于用户身份信息判断较为单一,比如只有Token或Cookie的校验
的会采用Autorize插件辅助进行
* 对于涉及UserID、订单ID类和复杂逻辑判断场景的手工进行分析判断
02
横向越权与纵向越权的区别:
* 横向越权是同级别用户间的数据越权,比如AB都有某个功能的
权限,但AB的数据不同,当A查询了B的数据时就是横向越权,一般
在商城和论坛类项目比较常见
* 纵向越权是指不同级别用户间的越权行为,如普通用户可操作
管理员的API或普通用户可查看管理员的数据
END
扫码关注
更多资源
等你获取
原文始发于微信公众号(季升安全):OWASP TOP 10 系列:失效的访问控制
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论