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']);
}

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

在重发器里面,将管理员的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();
}

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. 持续安全培训:为开发人员、系统管理员和用户提供定期的安全培训和意识教育,使他们了解常见的安全威胁和最佳实践,以提高整体安全意识。
  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来日可期x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值