逻辑漏洞(越权)

逻辑漏洞(越权)

0x01 何为逻辑漏洞

逻辑漏洞是指,在编写程序的时,一个流程处理处理逻辑,不够谨慎或逻辑不完整,从而造成验证失效、敏感信息暴露等问题,这类问题很难利用工具去发现,这是因为逻辑漏洞可能不会通过传统的输入过滤和验证来解决,而需要对整个逻辑进行重新审查和重构,所以挖掘逻辑漏洞的最好方式,还是手动测试。

0x02 什么是越权

在日常使用的软件程序,都会存在权限这一概念,它用于控制信息资源的保密性、完整性,它可以帮助我们来定义信息资源如何被合法的访问。

而越权漏洞就是指在系统中某个实体(用户、程序等)越过了其授权范围获得了未授权的权限或者访问权。

在这个前提下,越权漏洞又分为:

1. 水平越权
- 在未授权的情况下,访问相同权限的资源。
2. 垂直越权
- 在未授权的情况下,访问比自己权限更高的资源。

在权限框架中,我们使用的最多的就的登录系统,登录后验证用户登录的权限来确定用户能的权限,登录验证的流程一般如下:

  1. 提交登录请求:
    • 输入账号密码,发送请求至服务端
  2. 验证账号密码是否正确:
    • 后端对输入的账号密码进行验证,检查其是否在数据库中存在,确保合法用户的登录
  3. 验证账号权限:
    • 确认用户登录后,系统会查询其权限信息,确定其所拥有的角色和权限。
    • 系统根据用户的角色和权限,验证用户对资源的访问权限,确保用户只能访问其被授权的资源或执行被授权的操作。
  4. 完成登录:
    • 当用户的账号密码验证成功且权限验证通过后,用户便完成了登录流程,系统可以为其创建一个会话,并授予相应的访问权限。

越权漏洞的尝试就在第3步,如果在账号权限的过程中,验证不够严谨或者验证的逻辑存在漏洞,就非常容易造成越权漏洞的产生。

0x03 水平越权

水平越权是一种安全漏洞,指的是攻击者利用漏洞来获取其他用户相同权限级别的资源或信息,超越其授权的范围。这种漏洞可能发生在系统对用户身份验证和权限管理方面的不足或错误实现上。

举个例子,假设一个系统允许普通用户访问其他普通用户的私密文件或信息,而不限制只能访问自己的信息。攻击者利用这种漏洞,通过某种方式获取其他用户的身份信息或敏感数据,这就是水平越权漏洞。

if(isset($_GET['submit']) && $_GET['username']!=null){$username=escape($link, $_GET['username']);$query="select * from member where username='$username'";$result=execute($link, $query);if(mysqli_num_rows($result)==1){$data=mysqli_fetch_assoc($result);$uname=$data['username'];$sex=$data['sex'];$phonenum=$data['phonenum'];$add=$data['address'];$email=$data['email'];

这一串代码就存在水平越权漏洞,它没有对传入的username 进行进一步的验证,而且是使用GET方法进行传参,所以在URL中,就可以进行越权。

pikachu 水平越权

image-20231120203416633

使用作者给的用户名登录。

image-20231120203514781

点击查看个人信息。

image-20231120203546423

在此处查询到登录用户的个人信息,在URL里也存在参数暴露。一旦我们修改用户名,就可以查看其他用户的信息,因为这里没有进一步的验证,应该在查看用户信息时,要再次验证本地登录用户的信息,验证完成后在显示验证后的用户信息。

image-20231120204604931

当我将username的值改为其他用户,就可以获取到其他用户的信息,这个就是水平越权,在相同权限的情况区获取其他用户的信息。

0x04 垂直越权

垂直越权与水平越权相对应。它指的是攻击者通过漏洞提升自己的权限,从而获取比其授权权限更高级别的资源或信息。通常出现在系统权限管理不严谨的情况下,允许某些用户越权访问敏感信息或执行高权限操作。

if(isset($_POST['submit'])){if($_POST['username']!=null && $_POST['password']!=null){$username=escape($link, $_POST['username']);$password=escape($link, $_POST['password']);$query="select * from users where username='$username' and password=md5('$password')";$result=execute($link, $query);if(mysqli_num_rows($result)==1){$data=mysqli_fetch_assoc($result);if($data['level']==1){$_SESSION['op2']['username']=$username;$_SESSION['op2']['password']=sha1(md5($password));$_SESSION['op2']['level']=1;header("location:op2_admin.php");}if($data['level']==2){$_SESSION['op2']['username']=$username;$_SESSION['op2']['password']=sha1(md5($password));$_SESSION['op2']['level']=2;header("location:op2_user.php");}}else{$html.="<p>登录失败,请重新登录</p>";}}

此时在登录页面代码中,可以看出该代码对用户权限进行的分类登录,假如level=1 它就是管理员账户,登录的页面是op2_admin.php, 假如level=2 它就是普通账户,登录后的页面也就到了op2_user.php页面。这是对登录时,用户验证的基础方法。

if(isset($_POST['submit'])){if($_POST['username']!=null && $_POST['password']!=null){$getdata=escape($link, $_POST);$query="insert into member(username,pw,sex,phonenum,email,address) values('{$getdata['username']}',md5('{$getdata['password']}'),'{$getdata['sex']}','{$getdata['phonenum']}','{$getdata['email']}','{$getdata['address']}')";$result=execute($link, $query);if(mysqli_affected_rows($link)==1){header("location:op2_admin.php");}else {$html.="<p>修改失败,请检查下数据库是不是还是活着的</p>";}}
}

这一串代码,是一个用于新用户创建的代码,如果在此处没有对用户权限的二次验证,那么就会造成任意用户都可以创建新用户。

pikachu 垂直越权

image-20231120220544435

我们先用管理账户登录。

image-20231120220720576

在管理账户页面,可以发现它比普通用户多了一个添加用户的功能点。

image-20231120220904637

点击添加用户,我们进入到该页面随意创建一个新用户,并用BP抓包

image-20231120221043710

虽然普通用户无法进入到该页面,但是由于在创建用户的界面,没有对用户权限的二次验证,在此任意用户只需要使用URL拼接访问到该网络,就可以进行管理账户的操作,创建一个新的账户。

image-20231120221655201

这是使用管理员账户创建的用户,现在我在登录一个普通用户,并使用BP抓取它的session-id。

image-20231120221900767

此处我们登录的是一个普通用户,它的session-id为:vcnpk9vbsdiqkk1fi5cj2pf1o2,接下来就把它拼接到之前的op2_admin_edit.php请求头中去。

image-20231120222157515

此时已经成功的跳转到这个页面当中,我们使用普通账户添加的账户,应该也是成功的写入到数据库当中,

image-20231120222628774

这是是在进行敏感操作时候,未对账户的权限进行进一步的验证,所以就造成了垂直漏洞的产生。

0x05 越权漏洞产生的位置

  1. 隐藏的URL:
    • 系统中存在可以被未授权用户访问的隐藏链接,这些链接可能未经过适当的身份验证。
  2. 直接引用的参数:
    • 当系统未对直接引用的参数进行适当的权限验证时,攻击者可以通过修改参数值来获取未授权的资源。
  3. 多阶段功能:
    • 如果系统中某个功能经过多个步骤完成,但在后续步骤未再次验证权限,攻击者可能在某个步骤通过合法验证后访问其不应有权限的资源。
  4. 静态文件:
    • 系统中的静态文件或资源(如配置文件、日志文件)如果未经过适当保护,可能被攻击者直接访问,导致信息泄露。
  5. 平台配置错误:
    • 错误的平台配置或安全设置不当可能导致未授权访问的风险。

0x06 防范措施总结

  1. 合适的身份验证和授权:
    • 在任何可访问敏感信息或执行关键操作的地方,进行适当的身份验证和权限控制。
  2. 谨慎处理输入参数:
    • 对用户输入进行严格验证和过滤,不信任任何直接传递给系统的输入。
  3. 最小权限原则:
    • 给予用户仅所需的最小权限,避免授予不必要的权限。
  4. 安全配置文件:
    • 对静态文件和配置文件进行适当的权限设置和保护,确保未经授权用户无法直接访问这些文件。
  5. 安全审计与漏洞扫描:
    • 定期进行安全审计,使用漏洞扫描工具检测系统中可能存在的漏洞,及时修复。

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

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

相关文章

多态语法详解

多态语法详解 一&#xff1a;概念1&#xff1a;多态实现条件 二:重写&#xff1a;三&#xff1a;向上转型和向下转型1:向上转型&#xff1a;1&#xff1a;直接赋值&#xff1a;2&#xff1a;方法传参3&#xff1a;返回值 2:向下转型 一&#xff1a;概念 1&#xff1a;同一个引…

Linux从 全栈开发 centOS 7 到 运维

Linux从 全栈开发centOS 7 到 运维 一 Linux 入门概述1.1 操作系统1.2 Linux 简介1.3 Linux 系统组成1.4 Linux 发行版1.4 Linux 应用领域1.5 Linux vs Windows 二 环境搭建【狂神说Java】服务器购买及宝塔部署环境说明为什么程序员都需要一个自己的服务器服务器如何购买买完服…

高防CDN有什么作用?

分布式拒绝服务攻击&#xff08;DDoS攻击&#xff09;是一种针对目标系统的恶意网络攻击行为&#xff0c;DDoS攻击经常会导致被攻击者的业务无法正常访问&#xff0c;也就是所谓的拒绝服务。 常见的DDoS攻击包括以下几类&#xff1a; 网络层攻击&#xff1a;比较典型的攻击类…

快速入门:构建您的第一个 .NET Aspire 应用程序

##前言 云原生应用程序通常需要连接到各种服务&#xff0c;例如数据库、存储和缓存解决方案、消息传递提供商或其他 Web 服务。.NET Aspire 旨在简化这些类型服务之间的连接和配置。在本快速入门中&#xff0c;您将了解如何创建 .NET Aspire Starter 应用程序模板解决方案。 …

JavaEE初阶 01 计算机是如何工作的

前言 今天开始进行对JavaEE的一些基本总结,希望大家能在阅读中有所收获,如有错误还望多多指正. 1.冯诺依曼体系结构 这个体系结构相信学计算机的同学都不陌生,但是你真的知道这个体系结构说的是什么嘛?请听我娓娓道来.首先我先给出一张冯诺依曼体系结构的简图 你可以理解为当前…

闭眼检测实现

引言 这段代码是一个实时眼睛状态监测程序&#xff0c;可以用于监测摄像头捕获的人脸图像中的眼睛状态&#xff0c;判断眼睛是否闭合。具体应用实现作用说明如下&#xff1a; 1. 实时监测眼睛状态 通过摄像头捕获的实时视频流&#xff0c;检测人脸关键点并计算眼睛的 EAR&a…

C#调用C++ dll教程

文章目录 一、创建C dll项目二、C#程序员调用C dll三、C与C#数据类型对应基本数据类型对应表C指针类型与C#类型 在使用C#开发客户端时&#xff0c;有时需要调用C dll&#xff0c;本篇博客来介绍C#程序如何调用C dll。 一、创建C dll项目 首先使用VS2022创建C dll项目&#xf…

Android设计模式--责任链模式

无善无恶心之体&#xff0c;有善有恶意之动。知善知恶是良知&#xff0c;为善去恶是格物。 一&#xff0c;定义 使多个对象都有机会处理请求&#xff0c;从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直…

vscode 推送本地新项目到gitee

一、gitee新建仓库 1、填好相关信息后点击创建 2、创建完成后复制 https&#xff0c;稍后要将本地项目与此关联 3、选择添加远程存储库 4、输入仓库地址&#xff0c;选择从URL添加远程存储仓库 5、输入仓库名称&#xff0c;确保仓库名一致

AIGC创作系统ChatGPT源码,支持最新GPT-4-Turbo模型,支持DALL-E3文生图

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

鸿蒙4.0开发笔记之DevEco Studio之配置代码片段快速生成(三)

一、作用 配置代码片段可以让我们在Deveco Studio中进行开发时快速调取常用的代码块、字符串或者某段具有特殊含义的文字。其实现方式类似于调用定义好变量&#xff0c;然而这个变量是存在于Deveco Studio中的&#xff0c;并不会占用项目的资源。 二、配置代码段的方法 1、打…

052-第三代软件开发-系统监测

第三代软件开发-系统监测 文章目录 第三代软件开发-系统监测项目介绍系统监测 关键字&#xff1a; Qt、 Qml、 cpu、 内存、memory 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Language&#xff09;和 C 的强大功…

最强英文开源模型Llama2架构与技术细节探秘

prerequisite: 最强英文开源模型LLaMA架构探秘&#xff0c;从原理到源码 Llama2 Meta AI于2023年7月19日宣布开源LLaMA模型的二代版本Llama2&#xff0c;并在原来基础上允许免费用于研究和商用。 作为LLaMA的延续和升级&#xff0c;Llama2的训练数据扩充了40%&#xff0c;达到…

【JavaEE初阶】 CSS相关属性,元素显示模式,盒模型,弹性布局,Chrome 调试工具||相关讲解

文章目录 &#x1f38b;字体属性&#x1f6a9;设置字体&#x1f6a9;字体大小&#x1f6a9;字体粗细&#x1f6a9;文字样式 &#x1f38d;文本属性&#x1f6a9;文本颜色&#x1f388;认识 RGB&#x1f388;设置文本颜色 &#x1f6a9;文本对齐&#x1f6a9;文本装饰&#x1f6…

什么是Mock?为什么要使用Mock呢?

1、前言 在日常开发过程中&#xff0c;大家经常都会遇到&#xff1a;新需求来了&#xff0c;但是需要跟第三方接口来对接&#xff0c;第三方服务还没好&#xff0c;我们自己的功能设计如何继续呢&#xff1f;这里&#xff0c;给大家推荐一下Mock方案。 2、场景示例 2.1、场景一…

【数据结构(三)】单向环形链表和约瑟夫问题(3)

文章目录 1. 单向环形链表应用场景2. 思路分析3. 代码实现3.1. 实现单向环形链表3.2. 产生出队编号序列3.2.1. 思路分析3.2.2. 代码实现 1. 单向环形链表应用场景 Josephu(约瑟夫、约瑟夫环) 问题&#xff1a; 设编号为 1&#xff0c;2&#xff0c;… n 的 n 个人围坐一圈&…

C语言入门笔记—static、extern、define、指针、结构体

一、static static修饰局部变量的时候&#xff0c;局部变量出了作用域&#xff0c;不销毁。本质上&#xff0c;static修饰局部变量的时候&#xff0c;改变了变量的存储位置。详见下图&#xff0c;当a不被static修饰和被static修饰的时候。 C/C static关键字详解&#xff…

面试题-6

1.精灵图和base64的区别是什么&#xff1f; 精灵图:把多张小图整合到一张大图上,利用定位的一些属性把小图显示在页面上,当访问页面可以减少请求,提高加载速度 base64&#xff1a;传输8bit字节代码的编码方式,把原本二进制形式转为64个字符的单位&#xff0c;最后组成字符串 …

计算机毕业设计 基于SpringBoot的企业内部网络管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…