逻辑漏洞(越权)

2023-11-21 00:36
文章标签 逻辑 漏洞 越权

本文主要是介绍逻辑漏洞(越权),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

逻辑漏洞(越权)

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.chinasem.cn/article/398572

相关文章

逻辑表达式,最小项

目录 得到此图的逻辑电路 1.画出它的真值表 2.根据真值表写出逻辑式 3.画逻辑图 逻辑函数的表示 逻辑表达式 最小项 定义 基本性质 最小项编号 最小项表达式   得到此图的逻辑电路 1.画出它的真值表 这是同或的逻辑式。 2.根据真值表写出逻辑式   3.画逻辑图   有两种画法,1是根据运算优先级非>与>或得到,第二种是采

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

Java反序列化漏洞-TemplatesImpl利用链分析

文章目录 一、前言二、正文1. 寻找利用链2. 构造POC2.1 生成字节码2.2 加载字节码1)getTransletInstance2)defineTransletClasses 2.3 创建实例 3. 完整POC 三、参考文章 一、前言 java.lang.ClassLoader#defineClass defineClass可以加载字节码,但由于defineClas

【vulhub】thinkphp5 2-rce 5.0.23-rce 5-rce 漏洞复现

2-rec 1.启动环境  cd /.../vulhub/thinkphp/2-rce # cd进入2-rce靶场文件环境下docker-compose up -d # docker-compose启动靶场docker ps -a # 查看开启的靶场信息 2.访问192.168.146.136:8080网页 3.构造payload http

【Java编程的逻辑】原子变量 CAS 显示锁

原子变量 在理解synchronized中有使用synchronized保证原子更新操作,但是使用synchronized成本太高了,需要先获取锁,最后还要释放锁,如果获取不到锁还需要等到。这些成本都是比较高的,对于这种情况,可以使用原子变量。 Java并发包中的基本原子变量类型有以下几种: AtomicBoolean:原子Boolean类型,常用来在程序中表示一个标志位 AtomicIn

【Java编程的逻辑】容器类的总结

抽象容器类 用法和特点 容器类有两个根接口,分别是Collection 和 Map ,Collection表示单个元素的集合,Map表示键值对的集合 。 Collection Collection表示的数据集合有基本的增、删、查、遍历等方法,但没有定义元素间的顺序或位置,也没有规定是否有重复元素。 List: 是Collection的子接口,表示有顺序或位置的数据集合,增加了根据

【Java编程的逻辑】堆与优先级队列PriorityQueue

完全二叉树 & 满二叉树 & 堆 基本概念 满二叉树是指除了最后一层外,每个节点都有两个孩子,而最后一层都是叶子节点,都没有孩子。 满二叉树一定是完全二叉树,但完全二叉树不要求最后一层是满的,但如果不满,则要求所有节点必须集中在最左边,从左到右是连续的,中间不能有空的。 特点 在完全二叉树中,可以给每个节点一个编号,编号从1开始连续递增,从上到下,从左到右 完全二叉树有一

【Java编程的逻辑】Map和Set

HashMap Map有键和值的概念。一个键映射到一个值,Map按照键存储和访问值,键不能重复。 HashMap实现了Map接口。 基本原理 HashMap的基本实现原理:内部有一个哈希表,即数组table,每个元素table[i]指向一个单向链表,根据键存取值,用键算出hash值,取模得到数组中的索引位置index,然后操作table[index]指向的单向链表。 存取的时候依据键的

【漏洞复现】赛蓝企业管理系统 GetJSFile 任意文件读取漏洞

免责声明:         本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测试时,可能会违反某些法律法规或服务协议。同时,未经授权地访问系统、网络或应用程序可能导致法律责任或其他严重后果。作者不对读者基于本文内容而产生的任何行为或后果承担