1. over permission越权概述
如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。 越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。
一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需要对 对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。
因此,在在权限管理中应该遵守:
1.使用最小权限原则对用户进行赋权;
2.使用合理(严格)的权限校验规则;
3.使用后台登录态作为条件进行权限判断,别动不动就瞎用前端传进来的条件;
越权漏洞属于逻辑漏洞,是由于权限校验的逻辑不够严谨导致的
每个应用系统其用户对应的权限是根据其业务功能划分的,而每个企业的业务又都是不一样的
因此越权漏洞很难通过扫描工具发现,往往需要通过手动进行测试
2. 水平越权
A用户和B用户属于同一级别用户,但各自不能操作对方个人信息。A用户如果越权操作B用户个人信息的情况称为水行越权操作
三个用户 lucy/lili/kobe 密码都为123456
随便登录其中一个用户lucy 可以看到地址栏里 “url为op1_mem.php?username=lucy&submit=点击查看个人信息”
退出lucy登录其他用户 可以看到地址只有username不同
不退出lili账号 直接在地址栏中将username改成lucy 也可以直接访问lucy的信息
3. 水平越权源代码
只判断了是否登录 并没有用session来校验
查看function.php中的check_op_login函数 只是判断了['op']['username']呵['op']['password']是否被定义
查看登录页面的代码 发现所有用户名登录后都会定义['op']['username']和['op']['password']
因为在查看信息的界面 只判断了是否登录 并没有判断是哪个用户
4. 垂直越权
A用户权限高于B用户,B用户越权操作A用户的权限的情况称为垂直越权
登录普通用户pikachu 密码000000 只有查看权限
登录超级用户 admin 密码为123456 拥有修改用户信息和添加用户的权限
用admin用户添加一个新用户 并用burp进行抓包 可以看到PHPSESSID
打开另一个浏览器 登录普通用户pikachu后尝试直接复制admin用户的添加用户网址来进行添加用户 (未授权访问)
发现会回到登录界面
但是用admin用户查看的时候 test2用户已经被添加成功(admin用户需要在登陆状态)
用burp实现 重新用管理员账号添加用户 用burp进行抓包
将抓到的请求发送到repeater中
登陆普通用户 抓取普通用户的cookie值
普通用户登陆成功后 将这个cookie值修改到发送到repeater中的请求中 重放这个数据包
刷新页面查看 发现有了两个test3 一个为admin添加的 一个是重放admin的数据包添加的
5. 垂直越权源代码
op2_login.php页面 对于登陆用户的level进行了判断 判断他们进入哪个页面
op2_user.php 只判断了是否登陆
function中的check_op2_login函数 与check_op1_login一样 只是判断了是否定义变量
op2_admin.php 在这个页面进行了登陆和level级别的判断 所以登陆pikachu用户后访问admin.php页面会直接跳转到登陆页面
添加用户的页面 op2_admin_edit.php 只判断了是否登陆 没有验证级别 所以存在越权