首页 > 其他分享 >权限类漏洞解析——功能权限篇

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

时间:2024-07-11 15:57:58浏览次数:13  
标签:功能 解析 访问 接口 漏洞 普通用户 权限

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

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

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

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

0x01

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

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

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

0x02

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

  1. 查询订单

  2. 创建订单

  3. 删除订单

  4. 修改订单

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

实现

那么基于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. 建一个普通用户A,一个管理员用户B。

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

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

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

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

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

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

0x03

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


欢迎关注我的公众号“混入安全圈的程序猿”,更多原创文章第一时间推送!

标签:功能,解析,访问,接口,漏洞,普通用户,权限
From: https://blog.csdn.net/ooooooih/article/details/140353270

相关文章

  • HAL库源码移植解析与使用之捕获
    而且函数HAL__TIM_IRQHANDLER()函数里面也是放置了判断所有tim中会产生中断的标志位,然后执行该中断的回调函数callback并清除标志位#include"./BSP/TIMER/gtim.h"TIM_HandleTypeDefg_timx_cap_chy_handle;/*定时器x句柄*//*通用定时器通道y输入捕获初始化函......
  • Vue 中 v-pre、v-once、v-cloak 标签的深度解析与案例展示
    目录v-prev-once​​​​​​​v-cloak​​​​​​​v-cloak介绍​​​​​​​插值表达式闪烁问题v-pre        当使用v-pre指令时,不会进行编译操作。所有的Vue模板语法都将得以完整保留,并会按照其初始的形态进行渲染。其中,最为常见的应用场景便是......
  • 理解 Linux 文件权限(2)& vim编辑器
    1、如何理解文件权限1)查看文件• 想要理解文件权限,需要先从查看文件入手•使用ls–l命令查看Linux系统上的文件、目录和设备的权限①对象的类型②文件属性③目录/链接个数④所有者(owner)⑤组(group)⑥文件大小⑦最后修改的日期⑧文件名其中:• ①代表了对象的类型:......
  • 图生图流程解析
    一、介绍本篇来介绍下图生图的流程,图生图只是在文生图基础上做了一点点的改动,再结合原理查看,你会发现和文生图类似。二、流程步骤回顾一下上一篇的文生图的完整流程采样器通过模型形成一个Latentspace我们输入的参数有textprompt,通过clip编码器,是由模型提供的,变成token......
  • PlugLink的技术架构实例解析(附源码)
    在探讨PlugLink这一开源应用的实际应用与技术细节时,我们可以从其构建的几个核心方面入手,结合当前AI编程的发展趋势,为您提供既有实例又有深度解析的内容。PlugLink的技术架构实例解析前端技术选型——layui框架:PlugLink选择了轻量级且功能丰富的layui作为前端框架,它提......
  • 「AI绘画Stable Diffusion 零基础入门 」AI 绘画原理与工具介绍,万字解析AI绘画的使用
    大家好,我是程序员晓晓AI绘画原理想要入门AI绘画,首先需要了解它的原理是什么样的。其实很早就已经有人基于深度学习模型展开了对图像生成的研究了,但在那时,生成的图像分辨率和内容都非常抽象。直到近两年,AI产出的图像内容的质量变高、而且有一定的艺术价值,这时它才算......
  • TCP协议三次握手和四次挥手原理图文解析
    前言TCP协议(TransmissionControlProtocol)是计算机网络中最常用的传输层协议之一,负责提供可靠、面向连接的数据传输服务。它存在的目的就是为了让传输更可靠,也更稳定,但同样也会对端口与端口之间的传输速率造成影响。它一般采用两种方式来使传输更加可靠。一种是面向连接,而另......
  • 工程安全监测中的振弦采集仪技术解析与应用
    工程安全监测中的振弦采集仪技术解析与应用河北稳控科技振弦采集仪是一种在工程安全监测中广泛使用的仪器,用于测量和监测结构的振动和应变。它通过采集结构中的振弦信号,可以提供详细的结构运行状态和变化情况,为工程安全监测提供有效的数据支持。 振弦采集仪的原理是基于振弦......
  • AquaCrop模型农业水资源管理及代码解析技术教程
    原文链接:AquaCrop模型农业水资源管理及代码解析技术教程https://mp.weixin.qq.com/s?__biz=MzUzNTczMDMxMg==&mid=2247608744&idx=5&sn=5b642a0f5a95138ae63b3edb9ec9a4b4&chksm=fa82684fcdf5e1596252586aa2f000fce2dc113b8a19ba88d4dd28f526071652918e32218f7e&token=55005666......
  • 【Python】Python中TODO的用法解析
    目录一.Python中的TODO是什么二.Python中什么时候使用TODO三.Pycharm中关于TODO的使用方式一.Python中的TODO是什么在Python中, TODO 通常不是一个语言内置的关键字或功能,而是被用作一种注释约定,来标记代码中需要进一步实现或改进的部分。开发者会在代码中使用 TODO......