type
status
date
slug
summary
tags
category
icon
password
Property
Jun 23, 2023 11:48 AM
🗒️逻辑越权漏洞简述
漏洞描述
越权访问(Broken Access Control,BAC),指应用在检查授权时存在漏洞,使得攻击者在获得低权限用户账号后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限的用户。越权的成因是因为开发人员在对数据进行增删查改时,对客户端请求的数据过分相信而遗漏了权限的判定,权限验证不当而导致的越权行为。
漏洞原因
通常情况下,一个 Web 程序功能流程是
登录 - 提交请求 - 验证权限 - 数据库查询 - 返回结果
。如果验证权限不足,便会导致越权。常见的程序都会认为通过登录后即可验证用户的身份,从而不会做下一步验证,最后导致越权。- 隐藏URL
- 直接对象引用
- 多阶段功能
- 静态文件
- 平台配置错误
漏洞分类
水平越权
水平越权是指攻击者尝试访问与他具有相同权限的用户资源。比如,用户A和用户B属于同一角色,拥有相同的权限等级,他们能获取自己的私有数据(数据A和数据B),但如果系统只验证了能访问数据的角色,而没有对数据做细分或者校验,导致用户A能访问到用户B的数据(数据B),那么用户A访问数据B的行为就叫做水平越权访问。以下是常出现的水平越权的几种场景:
基于用户身份ID在使用某个功能时,通过用户提交的身份ID(用户ID、账号、手机号、证件号等用户唯一标识)来访问或操作对应的数据。
基于对象ID在使用某个功能时,通过用户提交的对象ID(如订单号、记录号)来访问或操作对应的数据。
基于文件名在使用某个功能时,通过文件名直接访问文件,最常见于用户上传文件的场景。
垂直越权
垂直越权是指低权限用户尝试访问高权限用户的资源。由于后台应用没有做权限控制,或仅仅在菜单、按钮上做了权限控制,导致恶意用户只要猜测其他管理页面的URL或者敏感的参数信息,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。主要有以下两种场景:
未认证账号,访问无需认证后能访问该功能不具备某个功能权限的账户,认证后能成功访问该功能
权限框架缺陷
权限控制框架是实现权限控制功能的基础(例如shiro),如果权限控制框架本身存在缺陷,那么就会导致权限控制功能完全失效。
如何防御
- 采用成熟的权限管理框架(如spring security)
- 验证用户是否具有操作数据的权限
- 用户进行访问操作的凭证(如用户ID、产品号码、订单流水号等)优先采用在服务端关联session或加密后放在session中的方式获取
- 应对用户凭证(如用户ID、产品号码、订单流水号等)采用难以猜测的构造方式(如随机数)或采用复杂的加密算法加密后再提交
- 对管理功能模块进行严格的权限验证
📘Level 1水平越权
越权漏洞通常都是要先用一个用户登录成功,点一下提示,这关有三个同级别的用户,账号密码分别是
lucy/123456,lili/123456,kobe/123456
先用lucy登录,发现有个可以点击查看个人信息的地方:
注意到上图中url的参数username的值是用户名lucy,那么会不会该参数值是哪个用户名就回显哪个用户的信息呢?
成功看到kobe的个人信息,lili也是一样,就不演示了
问题分析
到底为啥会出这种问题?来看一下源代码。果然,是因为查找用户信息的时候传入的参数是直接从url中获取的,没有校验当前用户的身份信息
尝试防御
接下来我想试一下防御水平越权。如下图所示,27行增加判断url传入的username和当前用户是否匹配,如果匹配则为$username赋值,若不匹配则不赋值。
尝试一下,首先是直接点“点击查看个人信息”按钮,返回了当前登录用户lucy的个人信息
再尝试一下把url中的lucy改成kobe,没有返回kobe的个人信息,成功防御水平越权
🔍Level2 垂直越权
进入关卡和上一关一样,也是一个登陆界面
点一下提示,看看有哪些用户
admin/123456,pikachu/000000,admin是超级boss
先用pikachu登录看看有哪些权限:pikachu只有后台管理中心的
查看权限
退出登录,再用admin用户登录,看看有哪些权限:
admin可以查看,添加,删除
下面分别进行添加和删除操作,记录相关的url:先添加用户url是:
创建一个用户caker
再来看删除:
点击刚创建的haha用户那行的删除按钮,haha被删掉了,注意到url如下:
好了,现在admin退出登录,再用pikachu登录直接输入地址栏输入payload:
http://www.pikachu.com:90/vul/overpermission/op2/op2_admin_edit.php
顺利来到了添加用户的页面
创建用户enen,创建完之后会跳到登录页面,但是不要担心,用pikachu登录之后,发现用户enen已经创建成功
下面再来试试浏览器地址栏直接输入
回车之后也跳转到登录页面了,登录之后发现enen还在,没有删除成功。
此时有两种可能性,要么是heihei的id并不是26,要么是这个url不存在垂直越权漏洞。
用admin登录之后删除heihei,确认heihei的id确实是26,那么就说明这个url不存在垂直越权漏洞。
这表示本关的垂直越权漏洞仅存在于
http://www.pikachu.com:90/vul/overpermission/op2/op2_admin_edit.php
,不存在于http://www.pikachu.com:90/vul/overpermission/op2/op2_admin.php?id=
问题分析
看一下这两个操作的具体处理过程有什么区别:
先看没问题的删除操作op2_admin.php:
主要是23~26行,判断了用户是否登录,是否权限级别为1(超级boss),如果任意一条不满足,就跳转到登录页面
再来看看有问题的op2_admin_edit.php:
22~25行,只验证了用户是否登录,如果没登录就跳转到登录页面,没有验证用户权限等级,但前端显示添加用户是权限等级为1的用户才能执行的操作,因此这里有垂直越权漏洞。
尝试防御
来试一下防御,应该很简单,根据op2_admin.php修改一下op2_admin_edit.php:
22行增加对用户权限等级的判断$_SESSION[‘op2’][‘level’]!=1
现在代码的意思变成,如果用户没登录或者权限等级不为1,则跳转到登录页面
用pikachu用户登录,直接在浏览器地址栏输入
,结果不再是跳转到添加用户的页面,而是跳转到用户登录的页面。防御成功
- 作者:百川🌊
- 链接:https://www.baichuanweb.cn/article/example-49
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。