权限类漏洞解析——功能权限篇

上一篇【一文理解权限类漏洞产生的原因之未授权篇】有讲过未授权漏洞产生的原因,但是在我实际的挖洞过程中,其实遇见很少,我有印象的好像只有几个非核心站点的中危。

但是对于另一类权限漏洞,功能及数据权限相关的漏洞就不一样了,我挖的逻辑漏洞中,大部分来源于它们,从中危到严重,危害等级没有上限。

我只能说,即使是一个资深开发人员,也有可能在这部分功能设计上存在疏忽。

本文主要从开发的角度讲一下对应的功能权限功能是如何实现的,以及我们可以怎样的去发现这类漏洞。

0x01

开始之前,我先从开发的角度简单地介绍一下一个系统的权限设计是怎么做的:一般会分为接口/功能权限数据权限这两部分。

功能权限一般是用于描述某个用户允许访问某些功能,现在大部分系统都是使用RBAC(Role-Based Access Control)的权限模型,也就是基于角色的访问控制。这个我们应该比较熟悉,比如一个用户可能会属于普通用户角色、管理员角色等,不同的角色允许访问不同的功能。

而数据权限则用于描述某个用户允许访问哪些数据,这个应该更好理解,比如我创建了一个收货地址,那应该只有我可以查询到,其它人是看不到这个信息的。

0x02

为了方便理解,我用一个业务场景作为栗子吧。比如我们常见的订单功能,先从功能上来区分的话,可能会包含以下功能点:

    1. 查询订单
    1. 创建订单
    1. 删除订单
    1. 修改订单

假设管理员角色有所有的功能权限和数据权限,而普通用户的功能权限只有查询、创建和删除,并且只允许操作自己的订单。

实现

那么基于RBAC的权限模型,功能权限应该是下面这样的:

很简单不是吗?而且实现很非常容易,当用户登录时,拿到它的角色,判断是否有当前请求的接口的权限就行了:

def modify_order(order_info):  # 获取当前登录用户  user_info = get_current_user()  role = user_info.role  # 根据用户角色获取允许访问的资源  resources = get_resource_by_role(role.id)  # 当前访问的路径在不在资源范围内  if current_path() not in resources:  return 'no permission'  # 继续执行  do_next()

很简单的逻辑,而且很通用,只需要将这段代码放在拦截器里面,那么在用户访问每个接口之前,都会进行这个判断,那么对于攻击者来说,普通用户想要越权访问管理员的功能就比较困难了。

那为什么还会存在越权访问的情况呢?

大部分来源于配置错误,像这种资源、角色映射关系的配置,一般都是有一个管理后台进行配置的,可能某次新增接口,忘记配置了,或者配置错误,那自然对应的接口就存在越权漏洞了。

为什么说大部分?因为真的有些网站实现不用框架,也不用拦截器,每个接口都写一遍的,那写错的概率就太高了。

漏洞发现

那我们应该怎么快速地去找这类漏洞?这里分享一下我的方法(仅仅是我自己的测试方式,不代表最好!)

一般这种漏洞在存在多种角色的管理后台,我一般会按以下流程操作

  1. 1. 建一个普通用户A,一个管理员用户B。

  2. 2. 找到对应的鉴权方式,比如是使用cookie或者是某些请求头。

  3. 3. 开启bp插件,功能是替换指定的请求头,并重放我的所有请求。

  4. 4. 配置鉴权相关的请求头,将他们全部替换为普通用户A的。

  5. 5. 使用管理员用户B点击所有仅允许管理员访问的功能。

    1. 查看重放接口,如果某个重放的请求成功了,那就证明此接口存在越权,理论上所有重放的请求都应该失败,因为重放时是使用普通用户A的鉴权token。

这里的BP插件是我自己写的,其实手动也可以,就是麻烦了一点。如果有兴趣的师傅们也可以去github上搜索,我看上面也有挺多插件是可以实现这个操作的。

0x03

最后,本来想功能和数据权限一篇写完的,但是我着实高估了我的耐心,加上工作比较忙,周末回家又只想躺平,所以关于数据权限篇就只能放在下次啦。如果感觉有点用就点个赞赞咯。哎,也不知道有没有人爱看


欢迎关注我的公众号,更多原创文章第一时间推送!
点赞,在看,分享,我都可以的

本文转自 https://mp.weixin.qq.com/s?__biz=MzU3ODI3NDc4NA==&mid=2247484312&idx=1&sn=0533a599b99dde57d566e0abe4503642&chksm=fd769717ca011e01d9f362b7367adde79d1e14933bf286b933c7c3d7a37993b6700bda802f00&scene=21#wechat_redirect,如有侵权,请联系删除。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/865589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机图形学入门23:蒙特卡洛路径追踪

1.前言 前面几篇文章介绍了Whitted-style光线追踪,还介绍了基于物理渲染的基础知识,包括辐射度量学、BRDF以及渲染方程,但并没有给出解渲染方程的方法,或者说如何通过该渲染方程计算出屏幕上每一个坐标的像素值。 Whitted-style光…

SQLServer:从数据类型 varchar 转换为 numeric 时出错。

1.工作要求 计算某两个经纬度距离 2.遇到问题 从数据类型 varchar 转换为 numeric 时出错。 3.解决问题 项目版本较老,使用SQLServer 2012 计算距离需执行视图,如下: SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO ALTER view vi_ord…

【坚果识别】果实识别+图像识别系统+Python+计算机课设+人工智能课设+卷积算法

一、介绍 坚果识别系统,使用Python语言进行开发,通过TensorFlow搭建卷积神经网络算法模型,对10种坚果果实(‘杏仁’, ‘巴西坚果’, ‘腰果’, ‘椰子’, ‘榛子’, ‘夏威夷果’, ‘山核桃’, ‘松子’, ‘开心果’, ‘核桃’&a…

CTO透露GPT-5内幕,OpenAI 以36亿美元收购数据库初创公司

目录 01 GPT-5 02 OpenAI收购Rockset 2.1 谁是Rockset? 2.2 OpenAI的目的是什么? 01 GPT-5 虽然GPT-4的视频通话功能尚未全面推广,但OpenAI的CTO已经对即将到来的GPT-5给出了新的暗示。 不久前,Mira回到母校达特茅斯工程学…

springboot 自定义的全局捕获异常失效

背景:springbootspringcloud 分布式微服务。 问题:公共模块在使用RestControllerAdvice全局捕获异常时,捕获不到子服务抛出的相应异常 首先看一下全局异常组件有么有被扫描到 如何查看,很简单只需要写一段类加载打印代码&#x…

剪映数字人口播原理终于搞清楚了

剪映版本升级了,新版本支持数字人定制,于是我赶紧申请了使用资格 目前的价格是49元单个价格/30天 支付49元之后剪映要求上传2.5至10分钟的视频 接着要阅读一段话并录制视频上传 第三步提交,提交完成之后大概两三个小时就会有一个特定数字人形象出现:

嵌入式c语言3——自定义数据类型

结构体struct,共用体union 结构体中定义变量,首尾地址相连 对于union,其包含变量对起始地址相同 由于其起始地址相同,则改变其中某一变量值时有可能使得另一个变量值发生改变 enum 枚举,可以用来定义一堆整形常量构成…

深入详解RocketMQ源码安装与调试

1.源码下载 http://rocketmq.apache.org/dowloading/releases/ 2. 环境要求 64位系统JDK1.8(64位)Maven 3.2.x

性价比蓝牙耳机怎么选?百元高性价比蓝牙耳机推荐

在现代社会中,蓝牙耳机已经成为人们日常生活中必不可少的配件之一。对于许多消费者来说,找到一款高性价比且价格在百元左右的蓝牙耳机是非常重要的。市面上有许多价格不菲的蓝牙耳机,性价比蓝牙耳机怎么选?如何在有限预算下找到性…

ODN网络弱光聚类定界与整治

01 ODN网络弱光运维现状 ODN网络是家庭宽带连接系统-无源光网络 (PON) 的重要组成部分,是连接局端 OLT 和用户 ONT 之间的光路通道,其质量直接影响整个PON系统的性能及可靠性。ODN光纤链路包括OLT PON口、ODF、主干光纤、一级分光器、分支光纤、二级分光…

Unity Shader技巧:实现带投影机效果,有效避免边缘拉伸问题

这个是原始的projector 投影组件,边缘会有拉伸 经过修改shader 后边缘就没有拉伸了 (实现代码在文章最后) 这个着色器通过检查每个像素的UV坐标是否在定义的边界内,来确定是否应用黑色边框。如果UV坐标处于边缘区域,那么像素颜色会被强制设为黑色,从而在投影图像周围形成一…

240703_昇思学习打卡-Day15-K近邻算法实现红酒聚类

KNN(K近邻)算法实现红酒聚类 K近邻算法,是有监督学习中的分类算法,可以用于分类和回归,本篇主要讲解其在分类上的用途。 文章目录 KNN(K近邻)算法实现红酒聚类算法原理数据下载数据读取与处理模型构建--计算距离模型预测 算法原理 KNN算法虽…

日产X-Trail | 压电式喷油器故障

故障现象 冷启动正常,但超车或者发动机处于负荷状态时就会出现熄火。熄火后无法重新发动,要等发动机完全冷却下来才能再次启动。 有两个故障代码:“P2146:喷油器1和2电源对地短路” 和 “P2146:喷油器3和4电源对地短…

vscode python调试,找不到控制调试工具栏,被隐藏了

问题: 如图所示,最开始蓝框中的调试台被莫名其妙的隐藏了,没法进行调试。 解决办法: 打开设置输入调试点击调试(31)找到红框选的那个选项,选择floating

Django QuerySet对象,all()方法

all()方法 在Django中,all()方法是QuerySet对象的一个方法,用于获取模型的所有实例。 当你调用ModelName.objects.all()时,Django会生成一个SQL查询,从数据库中获取该模型的所有记录,并返回一个QuerySet对象&#xf…

匠心独运:红酒与手工艺的很好结合

在岁月的长河中,红酒与手工艺都以其不同的魅力和技艺,书写着各自的故事。当这两者相遇,仿佛是一场跨越时空的对话,不仅展现了匠心独运的技艺之美,更在无声中诉说着对品质与生活的热爱。今天,就让我们一起探…

echarts-wordcloud:打造个性化词云库

前言 在当今信息爆炸的时代,如何从海量的文本数据中提取有用的信息成为了一项重要的任务。词云作为一种直观、易于理解的数据可视化方式,被广泛应用于文本分析和可视化领域。本文将介绍一种基于 echarts-wordcloud 实现的词云库,通过其丰富的…

魔行观察-AI数据分析>>勒泰中心购物中心

摘要 本报告基于 魔行观察 搜集整理的数据,对勒泰中心购物中心的营业状态、商户构成、业态分布以及消费者评价进行了详细分析。 商场概览 勒泰中心是一个正常营业的购物中心,自2013年开业以来,已成为当地居民和游客的重要购物和休闲场所。…

golang写的自动更新器

文件自动更新器,这个很多端游和软件都有用到的。 golang的rpc通信,是非常好用的一个东西,可以跟调用本地函数一样,调用远程服务端的函数,直接从远程服务端上拉取数据下来,简单便捷。 唯一的遗憾就是&#x…

Speculative decoding 投机采样原理和验证

概念 做法有很多,这里介绍最广泛被人认识的一种(朴素投机采样) 瓶颈: 大模型推理自回归采样,逐步串行解码。 生成的每个Token都需要将所有参数从存储单元传输到计算单元。 因此:内存访问带宽成为重要的瓶颈…