逻辑漏洞(越权)

news2024/9/20 18:49:53

逻辑漏洞(越权)

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.coloradmin.cn/o/1231246.html

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

相关文章

『亚马逊云科技产品测评』活动征文|基于next.js搭建一个企业官网

『亚马逊云科技产品测评』活动征文&#xff5c;基于next.js搭建一个企业官网 授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方…

UDP网络套接字编程

先来说说数据在网络上的传输过程吧&#xff0c;我们知道系统其实终究是根据冯诺依曼来构成的&#xff0c;而网络数据是怎么发的呢&#xff1f; 其实很简单&#xff0c;网络有五层。如下&#xff1a; 如上图&#xff0c;我们知道的是&#xff0c;每层对应的操作系统中的那些地方…

Attingo:西部数据部分SSD存在硬件设计制造缺陷

今年5月&#xff0c;西部数据SanDisk Extreme Pro硬盘陆续有用户反馈有故障发生&#xff0c;用户反馈最多的问题是数据丢失和硬件损坏。8月份&#xff0c;因为这个事情&#xff0c;还被爆出&#xff0c;西部数据面临用户的集体诉讼。 近期&#xff0c;有一个专门从事数据恢复的…

【赠书第6期】MATLAB科学计算从入门到精通

文章目录 前言 1 安装与配置 2 变量定义 3 数据处理 4 绘图 5 算法设计 6 程序调试 7 推荐图书 8 粉丝福利 前言 MATLAB 是一种高级的科学计算和数据可视化平台。它由 MathWorks 公司开发&#xff0c;是科学研究、数据分析和工程实践中非常常用的一种软件工具。本文将…

PC 477B西门子触摸屏维修6AV7853-0AE20-1AA0

西门子触摸屏维修故障有&#xff1a;上电黑屏, 花屏,暗屏,触摸失灵,按键损坏,电源板,高压板故障,液晶,主板坏等,内容错乱、进不了系统界面、无背光、背光暗、有背光无字符&#xff0c;上电无任何显示 &#xff0c;Power灯不亮但其他一切正常&#xff0c;双串口无法通讯 &#x…

力扣-414.第三大的数(两种解法)

文章目录 第三大的数解法一&#xff08;排序加遍历对比&#xff09;解法二&#xff08;遍历一遍加迭代&#xff09; 第三大的数 题目&#xff1a; 给你一个非空数组&#xff0c;返回此数组中第三大的数 。如果不存在&#xff0c;则返回数组中最大的数。 示例 1&#xff1a; 输…

【VRTK】【VR开发】【Unity】7-配置交互能力和向量追踪

【前情提要】 目前为止,我们虽然设定了手模型和动画,还能够正确根据输入触发动作,不过还未能与任何物体互动。要互动,需要给手部设定相应的Interactor能力。 【配置Interactor的抓取功能】 在Hierarchy中选中[VRTK_CAMERA_RIGS_SETUP] ➤ Camera Rigs, Tracked Alias ➤ …

基于SSM的高校毕业选题管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

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

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

牛掰的dd命令,cpi0配合find备份(不会主动备份),od查看

dd if设备1或文件 of设备2或文件 blocknsize countn 还原就是把设备1,2调过来 这里想到dump的还原是命令restore&#xff0c;想起来就写一下&#xff0c;省的总忘记 可以针对整块磁盘进行复制&#xff0c;对于新创建的分区&#xff0c;也不用格式化&#xff0c;可以直接…

进程管理(五)

处理器调度及多级调度 批量型往往先进入外存,再进入内存。终端型直接进入内存。 从磁盘选择若干作业,同时装入到内存,创建相应的进程,这是高级调度。 低级调度(进程调度):从进入内存的多道程序中选择一道把处理机给他 注意:时间片轮转是抢占式的 外设的调度统称为…

多态语法详解

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

AIGC ChatGPT 4 将数据接口文件使用Python进行入库Mysql

数据分析,数据处理的过程,往往将采集到的数据,或者从生产库过来的接口文件,我们都需要进行入库操作。 如下图数据: 将这样的数据接口文件,进行入库,插入到Mysql数据库中。 用Python代码来完成。 ChatGPT4来完成代码输入。 ChatGPT4完整内容如下: 这个任务可以使用`…

趣学python编程 (五、常用IDE环境推荐)

Python环境指的是在计算机上安装Python解释器和相关的库&#xff0c;它是运行Python代码所必需的。那么开始Python编程前&#xff0c;准备安装好开发环境是前提。 默认的电脑上只是让人办公使用的&#xff0c;不带python编程开发环境。只有安装python环境&#xff0c;才可以编写…

Mistral 7B 比Llama 2更好的开源大模型 (四)

Mistral 7B在平衡高性能和保持大型语言模型高效的目标方面迈出了重要的一步。通过我们的工作,我们的目标是帮助社区创建更实惠、更高效、更高性能的语言模型,这些模型可以在广泛的现实世界应用程序中使用。 Mistral 7B在实践中,对于16K和W=4096的序列长度,对FlashAttentio…

Nosql之redis概述及基本操作

关系数据库与非关系型数据库概述 关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言&#xff0c;用于执行对关系型…

云桌面 node_modules 切换艰辛历程记录 rebuild失败记录

拿到node_modules后更换 执行npm rebuild 重新构建 报错 node版本不一致 nvm切换 版本 不成功 换个窗口又变回原来版本号了 设置默认版本 nvm alias default 14.16.1 发现下面还有一个stable的还指向原来版本 nvm alias stable 14.16.1 rebuild 还是失败 逐个rebuild 每个依赖单…

【Java 进阶篇】Ajax 实现——JQuery 实现方式 `get` 与 `post`

嗨&#xff0c;亲爱的小白们&#xff01;欢迎来到这篇关于使用 jQuery 实现 Ajax 请求的博客。在前端开发中&#xff0c;Ajax 是一项非常重要的技术&#xff0c;它使我们能够在不刷新整个页面的情况下与服务器进行数据交互。而在 jQuery 中&#xff0c;get 和 post 方法提供了简…

应试教育导致学生迷信标准答案惯性导致思维僵化-移动机器人

移动机器人课程群实践创新的困境与突围 一、引言 随着科技的快速发展&#xff0c;工程教育变得越来越重要。然而&#xff0c;传统的应试教育模式往往侧重于理论知识的传授&#xff0c;忽视了学生的实践能力和创新精神的培养。这在移动机器人课程群的教学中表现得尤为明显。本文…