一、越权漏洞简介
越权访问(Broken Access Control,简称
BAC)是Web应用程序中一种常见的漏洞。它的威胁在于一个账户即可控制全站用户数据。
该漏洞是指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。
越权漏洞的
成因主要是因为开发人员
在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定。而且属于逻辑漏洞的一种,防护和检测都不好做。
二、越权漏洞分类
1.水平越权
这种类型的越权就是
越权
同等权限的
其他用户,比如说你要查看一篇邮件,但是有越权漏洞,却可以查看其他人的邮件。水平越权导致任意用户敏感信息泄露或者用户信息被恶意修改。
2.垂直越权
这种类型的越权就是可以在
不同身份之间越权,比如你是普通用户,但是可以越权到管理员,甚至超级管理员。管理员和超级管理员能使用的功能就多了。
3
.未授权越权
本来没有账号(即没有某个功能权限),但是通过越权操作,获取了某个功能权限。
三、易发生的点
1、基础参数
通过修改一下参数就可以产生水平越权,例如查看用户信息页面 URL 后加上自己的 id 便可查看,当修改为他人的id号时会返回他人的信息。再比如cookie中的参数就作为用户的凭据,修改这个凭据便可以其他用户身份通过验证。
2、多阶段验证
多阶段功能是一个功能有多个阶段的实现。例如修改密码,可能第一步是验证用户身份信息,号码验证码类的。当验证成功后,跳到第二步,输入新密码,很多程序会在这一步不再验证用户身份,导致恶意攻击者抓包直接修改参数值,导致可修改任意用户密码。
3、基于参数的访问控制
有的程序会在参数里面进行权限认证。如:www.xxx.com/uid=test&admin=0 ,把0改为1就有了admin权限。
4、链接隐藏
有的程序会把页面独立,让爬虫爬取不到,但是可以使用扫目录的方式扫到url,如果此时页面不做权限认证,就可直接访问到功能点,或者只是前端跳转,可以使用burp抓回包,然后删除js代码绕过。
5、其他位置
越权可能存在的地方:增、删、改、查、详情、导出等功能,当有这些功能的时候提高重视,在url、post data、cookie处寻找是否有鉴权参数
四、越权漏洞的挖掘
测试水平越权漏洞一般要控制2个账号,来互相探测能否影响到对方数据,一般是使用2个浏览器,分别使用2个账号登陆,在各个功能点修改参数(get、post、cookie)观察是否会影响到另一个账号的数据。
测试垂直越权一般看是否不通过认证即可访问管理页面,或是找是否有一个参数表示身份权限是否是管理员。
五、越权漏洞的防御
- 前后端同时对用户输入的信息进行校验,双重验证;
- 不能只根据用户 id 参数去搜索,应该再次进行身份验证(防止水平越权);
- 在每个页面加载前进行权限认证(防止垂直越权);
- 可以从用户的加密认证 cookie 中获取当前用户 id,防止攻击者对其修改。或在 session、cookie 中加入不可预测、不可猜解的 user 信息;
- 对有多步验证的应用,需要准确验证上一步是否通过。
建议做一个
过滤器,对权限进行全局校验(每次调用某个接口时,可先对权限进行校验)。大体流程是:
- 第一步清洗URL地址,并提取Api接口名称;
- 第二步从session中提取当前登录用户的userid;
- 第三步提取当前用户的角色id;
- 第四步判断当前用户对应的角色是否有权限访问当前Api接口(检查垂直越权);
- 最后判断当前登录用户是否对目标对象有操作权限(检查水平越权)。
五、Pikachu关于越权漏洞演示
5.1、水平越权
也称为横向越权,指
相同权限下不同的用户可以互相访问,比如A和B是同权限的用户,如果A能看到理论上只有B能看到的信息,或者A能执行理论上只有B能执行的操作,那就是水平越权啦。
越权需要先用账户登陆成功,可以通过爆破实现。但这里通过右上角“点一下提示”,
这关有三个同级别的用户,账号密码分别是lucy/123456、lili/123456、kobe/123456
先用lucy/123456登录,然后点击“点击查看个人信息”:
仔细观察个人信息的接口url中存在参数username=lucy,那么会不会该参数值是哪个用户名就回显哪个用户的信息呢?
来试一下
payload: http://192.168.11.45:8765/vul/overpermission/op1/op1_mem.php?username=lili&submit=点击查看个人信息
成功查看到lili的个人信息:
查看下源码:
是因为查找用户信息的时候传入的参数是直接从url中获取的,没有校验当前用户
防御水平越权:
登录时设置了_SESSION:
所以这里可以在27行增加判断url传入的username和当前用户是否匹配,如果匹配则为$username赋值,若不匹配则不赋值。
5.2、垂直越权
又称纵向越权,指使用权限低的用户可以访问到权限较高的用户。比如A用户权限比B低,如果A可以访问理论上只有B才能访问的资源,或者执行理论上B才能执行的操作,那就是垂直越权啦。
点一下提示,这里有两个用户admin/123456、pikachu/000000,admin是超级boss
先用普通用户pikachu/000000登录,如下:pikachu只有后台管理中心的查看权限
再用管理员用户admin/123456登录,可以看到admin可以查看,添加,删除:
先添加用户:创建一个用户test
url是:POST
http://192.168.11.45:8765/vul/overpermission/op2/op2_admin_edit.php
再来看
删除:
点击刚创建的test用户那行的删除按钮,test被删掉了,注意到url如下:
http://192.168.11.45:8765/vul/overpermission/op2/op2_admin.php?id=25
好了,现在admin退出登录,再用pikachu登录
直接输入地址栏输入payload:
http://192.168.11.45:8765/vul/overpermission/op2/op2_admin_edit.php,顺利来到了添加用户的页面:
创建用户test2,创建完之后会跳到登录页面,但是不要担心,用pikachu登录之后,发现用户test2已经创建成功:
下面再来试试浏览器地址栏直接输入
http://192.168.11.45:8765/vul/overpermission/op2/op2_admin.php?id=26
回车之后也跳转到登录页面了,登录之后发现test2还在,没有删除成功。
此时有两种可能性,要么是test2的id并不是26,要么是这个url不存在垂直越权漏洞。
用admin登录之后删除test2,确认test2的id确实是26,那么就说明这个url不存在垂直越权漏洞。
这表示本关的垂直越权漏洞仅存在于
http://ip:port/pikachu/vul/overpermission/op2/op2_admin_edit.php,不存在于
http://ip:port/pikachu/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,则跳转到登录页面
六、工具检测越权漏洞
6.1、Burpsuite插件Authz进行越权检测
Authz
工作原理:
将用户认证的HTTP请求头进行修改(Cookie等),然后通过响应长度、响应状态码判断是否存在越权。
安装:Extender > BApp Store > Authz > install > 安装成功
安装好出现:
使用前提:同个业务系统中两个测试账号lucy、lili
使用方法:lucy账户机进行功能操作,抓包,将待测请求包发送给Authz模块
lili账户登录,得到Cookie PHPSESSID=nmo2eev6jj4pe69l8pgtedpmq2
修改cookie值(或者其他的用户身份凭证请求头)为lili账户凭证。运行,
当原响应内容长度、响应状态码和被修改后请求的响应内容长度、响应状态码一致则会绿,代表存在越权。
优缺点:
6.2、Burpsuite插件AuthMatrix进行越权检测
AuthMatrix 是一个Burp Suite扩展,用于检测权限授权问题,设置好session就能进行自动化测试。
AuthMatrix插件用于越权漏洞的检测,
在插件中配置多个不同用户的Cookies
,检测各等级账号对页面的访问权限。
6.2.1、配置jython环境
1、官网下载
2、点击下载
3、在burpsuite里导入
6.2.2、在bapp store下载Authzmarix
6.2.3、使用AuthMatrix
测试pikachu的垂直越权,根据提示,这里有两个用户admin/123456、pikachu/000000,admin是超级boss
1、将截获的数据包发送到AuthMatrix
2、创建测试用户admin与pikachu
结果如下:
4、创建用户的角色role(这里创建两个角色:管理员与普通用户),并分配用户的角色(admin用户分配管理员角色,pikachu分配普通用户角色)
5、分别在不同的浏览器上使用admin与pikachu用户登录,获取其cookie,复制到AuthMatrix对应的用户的Cookies
6、为接口指定使用者
5、run运行
如果想检测全部的 requests,直接点最下面的 Run。如果想对单个 request 进行检测,在该 request 上右键选择 Run Request 即可(按 Control 多选同样适用)
run程序会自动将每个 request 里的 cookie 换成之前设置的同名 cookie,当 response 匹配到正则时,会出现红色,反之是绿色(蓝色是 session 过期)。绿色内容表示无漏洞,红色表示请求中可能存在漏洞,蓝色表示结果可能存在假阳性(session过期或不行,看看session有没有搞错)
七、参考
16 逻辑漏洞:你的订单信息是如何泄露的?_哔哩哔哩_bilibili