越权漏洞学习
0x00 原理
在一个web系统中,一个用户做了一个本不在他的权限范围内的操作,这就是越权。越权又分为水平越权和垂直越权。
比如一个普通用户,通过修改密码的接口,把别的普通用户的密码改了,这是水平越权。总结来说就是相同权限下本不可以相互访问的用户实现了相互访问
再比如,在一个系统中只有管理员有删除用户的功能,一个普通用户调用了管理员的删除用户的功能,把另一个用户删除了,这就是垂直越权。垂直越权就是不同级别或者不同角色之间的越权,一般是低权限用户往高权限越权。
究其根本就是在相关的方法处没有对发起操作的用户身份做核验,没有判断用户是否有权限做该操作。
0x01 漏洞检测
其实这个漏洞属于逻辑漏洞,原理很简单,关键是检测思路。这里我按黑、白盒以及水平、垂直越权,分为了四种情况
黑盒
所谓黑盒就是看不到源码,只有现成的系统
水平越权
首先在一个系统里,要标识不同的用户肯定需要一个字段,这个字段名可能为“id”或者“userid”等等,在诸如修改密码等操作的地方,替换成其他用户的id,如果执行成功,就存在水平越权
垂直越权
垂直越权的思路很重要,准备好两个不同权限的账号,分别登录同一个网站,查看低权限的用户缺少高权限用户的那些模块,抓取高权限模块的请求参数,再使用低权限用户的身份发送这个请求,看是否能执行成功。能执行成功则存在垂直越权。具体以怎么样的身份方式发送请求。还得看系统,可以只替换cookie,也可以只替换userid之类的参数
白盒
所谓白盒就是手里有源码,进行代码审计即可
有代码能够审计的话,在我现在看来水平越权和垂直越权的检查方式差不多,都是检查相关方法是否有相应的权限检查,以及检查权限是否设置正确。
再或者就是检查鉴权函数是否存在被绕过的可能性
0x02 防御
- 系统应具备完备的用户权限体系,要明确哪些数据属于哪些用户,各自的权限要清晰
- 在方法处鉴权
- 对用户可控参数做检查和过滤
越权漏洞学习
https://wanf3ng.github.io/2022/06/02/越权漏洞学习/