越权漏洞学习

0x00 原理

在一个web系统中,一个用户做了一个本不在他的权限范围内的操作,这就是越权。越权又分为水平越权和垂直越权。

比如一个普通用户,通过修改密码的接口,把别的普通用户的密码改了,这是水平越权。总结来说就是相同权限下本不可以相互访问的用户实现了相互访问

再比如,在一个系统中只有管理员有删除用户的功能,一个普通用户调用了管理员的删除用户的功能,把另一个用户删除了,这就是垂直越权。垂直越权就是不同级别或者不同角色之间的越权,一般是低权限用户往高权限越权。

究其根本就是在相关的方法处没有对发起操作的用户身份做核验,没有判断用户是否有权限做该操作。

0x01 漏洞检测

其实这个漏洞属于逻辑漏洞,原理很简单,关键是检测思路。这里我按黑、白盒以及水平、垂直越权,分为了四种情况

黑盒

所谓黑盒就是看不到源码,只有现成的系统

水平越权

首先在一个系统里,要标识不同的用户肯定需要一个字段,这个字段名可能为“id”或者“userid”等等,在诸如修改密码等操作的地方,替换成其他用户的id,如果执行成功,就存在水平越权

垂直越权

垂直越权的思路很重要,准备好两个不同权限的账号,分别登录同一个网站,查看低权限的用户缺少高权限用户的那些模块,抓取高权限模块的请求参数,再使用低权限用户的身份发送这个请求,看是否能执行成功。能执行成功则存在垂直越权。具体以怎么样的身份方式发送请求。还得看系统,可以只替换cookie,也可以只替换userid之类的参数

白盒

所谓白盒就是手里有源码,进行代码审计即可

有代码能够审计的话,在我现在看来水平越权和垂直越权的检查方式差不多,都是检查相关方法是否有相应的权限检查,以及检查权限是否设置正确。

再或者就是检查鉴权函数是否存在被绕过的可能性

0x02 防御

  1. 系统应具备完备的用户权限体系,要明确哪些数据属于哪些用户,各自的权限要清晰
  2. 在方法处鉴权
  3. 对用户可控参数做检查和过滤

越权漏洞学习
https://wanf3ng.github.io/2022/06/02/越权漏洞学习/
作者
wanf3ng
发布于
2022年6月2日
许可协议