当前位置: 首页 > article >正文

逻辑漏洞之越权漏洞

一、越权漏洞简介

越权访问(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)观察是否会影响到另一个账号的数据。  

测试垂直越权一般看是否不通过认证即可访问管理页面,或是找是否有一个参数表示身份权限是否是管理员。

五、越权漏洞的防御
  1. 前后端同时对用户输入的信息进行校验,双重验证;
  2. 不能只根据用户 id 参数去搜索,应该再次进行身份验证(防止水平越权);
  3. 在每个页面加载前进行权限认证(防止垂直越权);
  4. 可以从用户的加密认证 cookie 中获取当前用户 id,防止攻击者对其修改。或在 session、cookie 中加入不可预测、不可猜解的 user 信息;
  5. 对有多步验证的应用,需要准确验证上一步是否通过。
建议做一个 过滤器,对权限进行全局校验(每次调用某个接口时,可先对权限进行校验)。大体流程是:
  • 第一步清洗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

http://www.kler.cn/a/159829.html

相关文章:

  • 成都睿明智科技有限公司解锁抖音电商新玩法
  • UniApp 应用、页面与组件的生命周期详解
  • SpringBoot参数注解
  • MySQL重难点(一)索引
  • 每日一练:二分查找-搜索插入位置
  • 阿里巴巴通义灵码推出Lingma SWE-GPT:开源模型的性能新标杆
  • 每天一点python——day88
  • Ubuntu 环境安装 Kafka、配置运行测试 Kafka 流程笔记
  • 案例052:用于日语词汇学习的微信小程序
  • 【laBVIEW学习】4.声音播放,自定义图标,滚动条设置,保存参数以及恢复参数
  • 前端模拟新闻列表ajax请求 mocky
  • TortoiseGit 小乌龟svn客户端软件查看仓库地址
  • 分布式锁常见实现方案
  • Android自动化测试中使用ADB进行网络状态管理!
  • CMake编译C++项目并链接动态库
  • 【Linux】信号的保存和捕捉
  • 在eclipse中安装python插件:PyDev
  • Python环境管理利器-Anaconda介绍与安装
  • 三相电表可以当作高压电表使用吗?
  • blade 项目
  • Vue学习笔记-activated和deactivated生命周期
  • 七、VMware虚拟机安装和docker容器部署项目
  • 二叉树OJ题之三
  • js基础之事件监听案例入门
  • Vue3炫酷可旋转的3D地球
  • 【500强 Kubernetes 课程】第4章 dockerfile基础篇-基本语法