• Pikachu靶场——越权访问漏洞(over permission)


    1. over permission

    漏洞描述

    越权访问(Broken Access Control,BAC),指应用在检查授权时存在漏洞,使得攻击者在获得低权限用户账号后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限的用户。

    越权漏洞的成因是因为开发人员在对数据进行增删查改时,对客户端请求的数据过分相信而遗漏了权限的判定,权限验证不当而导致的越权行为。

    漏洞原因

    通常情况下,一个 Web 程序功能流程是登录 - 提交请求 - 验证权限 - 数据库查询 - 返回结果。如果验证权限不足,便会导致越权。常见的程序都会认为通过登录后即可验证用户的身份,从而不会做下一步验证,最后导致越权。

    • 隐藏URL
    • 直接对象引用
    • 多阶段功能
    • 静态文件
    • 平台配置错误

    漏洞分类

    1. 水平越权

      • 水平越权是指攻击者尝试访问与他具有相同权限的用户资源
      • 例如,用户A和用户B属于同一角色,拥有相同的权限等级,他们能获取自己的私有数据(数据A和数据B),但如果系统只验证了能访问数据的角色,而没有对数据做细分或者校验,导致用户A能访问到用户B的数据(数据B),那么用户A访问数据B的行为就叫做水平越权访问。
    2. 垂直越权

      • 垂直越权是指低权限用户尝试访问高权限用户的资源。
      • 由于后台应用没有做权限控制,或仅仅在菜单、按钮上做了权限控制,导致恶意用户只要猜测其他管理页面的URL或者敏感的参数信息,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。

    1.1 水平越权

    登录lucy用户

    image-20230909143944606

    然后修改URL中的username的值为kobe。

    image-20230909144037268

    越权成功。

    当然也还可以使用bp抓包的方式修改数据包中URL的参数实现水平越权。

    1.1.1 源代码分析

    op1_mem.php

    用户信息是直接从url中获取的,没有校验当前用户

    image-20230916165852439

    function.php

    查看check_op_login函数,函数只检查了isset($_SESSION[‘op’][‘username’]) && isset($_SESSION[‘op’][‘password’]),也就是用于检查会话变量中是否存在 'op' 数组中的 'username''password' 键。

    image-20230916170005917

    1.1.2 漏洞防御

    op1_mem.php

    尝试进行防御,使用session来校验,增加一个if判断url传入的username和当前用户是否匹配,如果匹配则为$username赋值,若不匹配则不赋值。

    if($_SESSION['op']['username'] == $_GET['username']){
        $username=escape($link, $_GET['username']);
    }
    
    • 1
    • 2
    • 3

    image-20230916170518187

    验证:在lucy登录的情况下,在URL路径中修改username的值为lili。

    image-20230916170842558

    成功防御!

    1.2 垂直提权

    查看提示信息

    image-20230909144304685

    提示信息表示admin用户是最高权限的。

    先使用pikachu用户登录,显示我们只有查看的权限。

    image-20230909144813576

    使用admin账户进行登录,显示我们有查看用户,添加用户以及和删除用户的权限。

    image-20230909144909852

    使用admin用户添加一个用户,并使用bp抓取数据包。(同样删除用户也可以)

    image-20230909145319560

    image-20230909145407090

    然后回到页面中退出管理员登录,再登录pikachu用户,并且使用bp抓取数据包

    image-20230909145601423

    将pikachu这个普通用户的Cookie信息复制。

    Cookie: BkGOp9578O_think_template=default; PHPSESSID=8g9mq8duq1kc55kbmp6t7espq1
    
    • 1

    在重发器里面,将管理员的Cookie值换成普通用户的Cookie,放包即可。

    image-20230909145827705

    这里我点击了两次,然后回到页面查看,添加了两个xiaoxue用户。

    image-20230909145955575

    越权成功。

    1.2.1 源代码分析

    op2_login.php

    image-20230916173328699

    说明:如果级别是1,进入amdin.php。如果级别是2,进入user.php。

    op2_admin.php

    image-20230916173436940

    说明:这段代码判断了用户是否登录,是否权限级别为1(也就是admin用户),如果任意一条不满足,就跳转到登录页面。

    op2_admin_edit.php

    image-20230916173605516

    说明:op2_admin_edit.php中只是验证了用户是否登录,如果没登陆就跳转到登录页面,没有验证用户的权限级别等级,但是前端显示添加用户的权限级别为1的用户才能执行的操作。所以这里才会出现垂直越权漏洞。

    function.php

    image-20230916174319863

    1.2.2 漏洞防御

    修改op2_admin_edit.php文件,对用户权限等级进行判断,判断用户级别是否为1。现在代码的意思变成,如果用户没登录或者权限等级不为1,则跳转到登录页面。

    if(!check_op2_login($link) || $_SESSION['op2']['level']!=1){
        header("location:op2_login.php");
        exit();
    }
    
    • 1
    • 2
    • 3
    • 4

    image-20230916174600262

    验证我们的防御措施是否生效,首先登录admin账户后添加一个xiaoha用户

    image-20230916175230876

    然后使用bp抓取数据包

    image-20230916175815406

    退出登录后再使用pikachu用户登录,抓包将pikachu用户的Cookie信息替换到指定位置,然后放包即可。

    image-20230916180243206

    现在发现无论怎么放包都不会在添加用户了。

    image-20230916180037831

    1.3 越权访问漏洞防御

    常见的防御措施:

    1. 验证和授权:在应用程序中实施适当的身份验证和授权机制。确保只有经过身份验证的用户才能访问其具备权限的资源。使用强密码策略、多因素身份验证等增加用户验证的安全性。
    2. 最小化权限原则:遵循最小权限原则,即每个用户只能获得其工作职责所需的最低权限。限制用户访问敏感信息和关键操作,防止未授权的访问。
    3. 输入验证:对于用户提供的输入数据进行充分验证和过滤,以防止恶意用户提交恶意请求。包括对输入数据进行检查、限制或转义,避免常见的安全漏洞如跨站脚本攻击(XSS)和SQL注入。
    4. 安全配置:合理配置应用程序和服务器的安全设置。这包括限制文件和目录的访问权限、禁用不必要的服务和功能、定期更新和修补软件漏洞。
    5. 会话管理:为用户会话实施安全措施,如生成强大且随机的会话标识符、设置会话超时、确保会话仅在安全通道上传输等。防止会话劫持和会话固定攻击。
    6. 访问日志和监控:记录用户活动和访问日志,并定期检查异常活动。使用入侵检测系统(IDS)和入侵防御系统(IPS)来监控网络流量并发现潜在的越权行为。
    7. 定期安全审计:进行定期安全审计,评估应用程序的安全性,并修复发现的漏洞和问题。这可以包括代码审查、渗透测试、安全漏洞扫描等。
    8. 敏感信息保护:对于敏感信息如密码、身份证号等,采取适当的加密手段进行保护。确保敏感数据在存储、传输和处理过程中都得到妥善保护。
    9. 持续安全培训:为开发人员、系统管理员和用户提供定期的安全培训和意识教育,使他们了解常见的安全威胁和最佳实践,以提高整体安全意识。
  • 相关阅读:
    跨域资源共享CORS详解及常见错误解决方案
    Java基于API接口爬取商品数据
    基于开源模型搭建实时人脸识别系统(六):人脸识别(人脸特征提取)
    flink-cdc同步mysql数据到kafka
    【SM8475】user版本开root权限
    序列类型(元组()、列表[]、字符串““)、集合类型({}、set())
    Jvm参数
    飞书应用配置+蓝鲸流水线+jump server
    技术干货 | MindSpore精度调试能力更上一层楼!
    【JavaScript保姆级教程】输出函数和初识变量
  • 原文地址:https://blog.csdn.net/weixin_58783105/article/details/133513114