逻辑漏洞之越权漏洞

一、越权漏洞简介

越权访问(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.mfbz.cn/a/223093.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络:传输层(TCP详解)

文章目录 前言一、面向连接传输TCP1.段结构TCP往返延时(RTT)和超时 2.可靠数据传输TCP发送方事件TCP重传产生TCP ACK的建议[RFC 1122. RFC 2581]快速重传 3.流量控制4.TCP连接管理同意建立连接(2次握手)TCP三次握手TCP关闭连接&am…

JavaScript <有道翻译之数据解密‘23年12月06日版‘>--案例(三)

前言: 记得上半年还是去年,有道翻译还是直接返回明文数据;现在也跟着,用接口返回加密数据了; 娱乐一下,破他的密文数据... 成品效果图: js部分: 对于找他的密文数据有点费时,针对密文--->搜他地址和启动器不是特别容易,辗转多时(搜:descrypt/json.parse 结合使用更快),有图…

Linux环境下的MySQL安装

文章目录 前提说明1.卸载内置环境2.检查系统安装包3.卸载这些默认安装包4.获取MySQL官方yum源5.安装MySQLyum源,对比前后yum源6.查看yum源是否生效7.安装MySQL服务8.查看相对应的配置文件9.启动服务10.查看启动服务11.登录方法一12.登录方法二13.登录方法三14.设置开…

uniapp实战 —— 分类导航【详解】

效果预览 组件封装 src\pages\index\components\CategoryPanel.vue <script setup lang"ts"> import type { CategoryItem } from /types/index defineProps<{list: CategoryItem[] }>() </script><template><view class"category&…

Codeforces Round 913 (Div. 3)补题

Rook 题目大意&#xff1a;我们给定一个棋盘(如下图)&#xff0c;棋盘上有一个车&#xff0c;问车可以到的位置&#xff0c;任意顺序输出即可。 思路&#xff1a;输出车的行列中非它本身的点即可。 #include<bits/stdc.h> using namespace std; int main() {int t;scanf…

构建一个语音转文字的WebApi服务

构建一个语音转文字的WebApi服务 简介 由于业务需要&#xff0c;我们需要提供一个语音输入功能&#xff0c;以便更方便用户的使用&#xff0c;所以我们需要提供语音转文本的功能&#xff0c;下面我们将讲解使用Whisper将语音转换文本&#xff0c;并且封装成WebApi提供web服务…

【WebSocket】使用ws搭建一个简单的在线聊天室

前言 什么是WebSockets&#xff1f; WebSockets 是一种先进的技术。它可以在用户的浏览器和服务器之间打开交互式通信会话。使用此 API&#xff0c;你可以向服务器发送消息并接收事件驱动的响应&#xff0c;而无需通过轮询服务器的方式以获得响应。 webscokets 包括webscoket…

AntDesignBlazor示例——创建列表页

本示例是AntDesign Blazor的入门示例&#xff0c;在学习的同时分享出来&#xff0c;以供新手参考。 示例代码仓库&#xff1a;https://gitee.com/known/AntDesignDemo 1. 学习目标 使用Table组件创建列表页面使用DisplayName特性显示中文表头使用模板和Tag组件显示高温数据使…

2023站酷CUBE设计大会,以AIGC赋能创意人

12月6日&#xff0c;2023站酷CUBE设计大会在厦门举行。大会以“AI与热爱”为主题&#xff0c;由美图与站酷联合举办&#xff0c;邀请了多位创意先锋进行分享&#xff0c;旨在构建设计新生态&#xff0c;以AIGC内容生产新范式为创意人持续赋能&#xff0c;共同提升设计价值。 美…

简单自定义vuex的设计思路

vuex集中式存储管理应用所有组件的状态&#xff0c;并以响应的规则保证状态以可预测的方式 发生变化。 步骤&#xff1a; 1.Store类&#xff0c;保存选项&#xff0c;_mutations&#xff0c;_actions&#xff0c;getters 2.响应式状态&#xff1a;new Vue方式设置响应式。 …

电脑开机提示“未正确启动”怎么办?

有时我们在打开电脑时&#xff0c;会出现蓝屏&#xff0c;并提示“电脑未正确启动”&#xff0c;那么&#xff0c;这该怎么办呢&#xff1f;下面我们就来了解一下。 方法一&#xff1a;执行系统还原 我们在上文中提到了Windows无法正确启动的问题可能是由于三方程序或者近期的…

Java利用TCP实现简单的双人聊天

一、创建新项目 首先创建一个新的项目&#xff0c;并命名为聊天。然后创建包&#xff0c;创建两个类&#xff0c;客户端&#xff08;SocketClient&#xff09;和服务器端&#xff08;SocketServer&#xff09; 二、实现代码 客户端代码&#xff1a; package 聊天; import ja…

Spring Boot 3.2项目中使用缓存Cache的正确姿势!!!

你是否曾想过为什么在 Spring Boot 应用中缓存是如此重要&#xff1f;答案在于它通过减少数据检索时间来提高性能。在本文中&#xff0c;我们将深入探讨缓存对微服务模式的影响&#xff0c;并探讨根据操作易用性、速度、可用性和可观测性等因素选择正确缓存的重要性。我们还将探…

[RISCV] 发现一个可以看RISC-V CPU行为的开源项目

最近在浏览某大型程序员交友 网站的时候发现一个好玩的项目,介绍如下: A small program that handles mie, msi, mti and trap interrupts and updates some global variables on interrupts. 重点是他下面还放了一张图: 能看到RISCV CSR的行为太酷啦!!! 下面一起setup一…

Sourcepawn脚本入门(二)命令与事件监听

&#x1f34e;Sourcepawn脚本入门(二)命令与事件监听 &#xff08;控制台&#xff09;命令是常用的插件形式&#xff0c;eg. noclip …等都是常用的命令&#xff0c;在游戏中使用也很容易,souremod可以注册自己的命令。 事件的监听则需要考虑到不同的起源游戏支持的事件不同&am…

中文BERT模型预训练参数总结以及转化为pytorch的方法

1.目前针对中文的bert预训练模型有三家&#xff1a; 谷歌发布的chinese_L-12_H-768_A-12 还有哈工大的chinese-bert-wwm / chinese-bert-wwm-ext 以及HuggingFace上的bert-base-chinese(由清华大学基于谷歌的BERT在中文数据集上训练开发的模型&#xff0c;上传在HuggingFace) …

彻底删除VsCode配置和安装过的插件与缓存

前言 当你准备对 Visual Studio Code&#xff08;VSCode&#xff09;进行重新安装时&#xff0c;可能遇到一个常见问题&#xff1a;重新安装后&#xff0c;新的安装似乎仍然保留了旧的配置信息&#xff0c;这可能会导致一些麻烦。这种情况通常是由于卸载不彻底所致&#xff0c…

【LVS实战】04 LVS+Keepalived实现负载均衡高可用

一、介绍 Keepalived 是一个用于 Linux 平台的高可用性软件。它实现了虚拟路由器冗余协议 (VRRP) 和健康检查功能&#xff0c;可以用于确保在多台服务器之间提供服务的高可用性。Keepalived 可以检测服务器的故障&#xff0c;并在主服务器宕机时&#xff0c;自动将备份服务器提…

外卖系统源码开发:打造高效智能化餐饮解决方案

在当今数字化时代&#xff0c;外卖系统成为了餐饮业中不可或缺的一部分。为了满足日益增长的外卖需求&#xff0c;我们将深入探讨外卖系统源码开发的关键技术和创新应用。 1. 技术栈选择 在开始外卖系统源码的开发之前&#xff0c;我们首先需要选择适用的技术栈。一个典型的…

【langchain实战】开源项目-RasaGPT

1、概述 RasaGpt是一个建立在 Rasa 和 Langchain 之上的没有显示界面的LMM聊天机器人平台。它是一个Rasa和Telegram这种利用像Langchain这样的LMM库进行索引、检索和上下文注入的样板及参考实现。 开源地址&#xff1a; GitHub - paulpierre/RasaGPT: &#x1f4ac; RasaGPT is…
最新文章