Pikachu靶场之越权漏洞详解

前言

本篇文章用于巩固对自己逻辑越权漏洞的学习总结,其中部分内容借鉴了以下博客。
链接: pikachu Unsafe Fileupload 不安全的文件上传(pikachu Over permission 越权(皮卡丘漏洞平台通关系列))

链接: 逻辑越权漏洞

逻辑越权漏洞简述

漏洞描述

越权访问(Broken Access Control,BAC),指应用在检查授权时存在漏洞,使得攻击者在获得低权限用户账号后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限的用户。
越权的成因是因为开发人员在对数据进行增删查改时,对客户端请求的数据过分相信而遗漏了权限的判定,权限验证不当而导致的越权行为。

漏洞原因

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

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

漏洞分类

水平越权

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

基于用户身份ID
在使用某个功能时,通过用户提交的身份ID(用户ID、账号、手机号、证件号等用户唯一标识)来访问或操作对应的数据。
基于对象ID
在使用某个功能时,通过用户提交的对象ID(如订单号、记录号)来访问或操作对应的数据。
基于文件名
在使用某个功能时,通过文件名直接访问文件,最常见于用户上传文件的场景。

垂直越权

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

未认证账号,访问无需认证后能访问该功能
不具备某个功能权限的账户,认证后能成功访问该功能

权限框架缺陷

权限控制框架是实现权限控制功能的基础(例如shiro),如果权限控制框架本身存在缺陷,那么就会导致权限控制功能完全失效。

如何防御

  • 采用成熟的权限管理框架(如spring security)
  • 验证用户是否具有操作数据的权限
  • 用户进行访问操作的凭证(如用户ID、产品号码、订单流水号等)优先采用在服务端关联session或加密后放在session中的方式获取
  • 应对用户凭证(如用户ID、产品号码、订单流水号等)采用难以猜测的构造方式(如随机数)或采用复杂的加密算法加密后再提交
  • 对管理功能模块进行严格的权限验证

第一关 水平越权

进入pikachu的水平越权关卡,出现一个登录界面
在这里插入图片描述
越权漏洞通常都是要先用一个用户登录成功吧,点一下提示,这关有三个同级别的用户,账号密码分别是 lucy/123456,lili/123456,kobe/123456
在这里插入图片描述
先用lucy登录,发现有个可以点击查看个人信息的地方
在这里插入图片描述
点一下,回显了lucy的个人信息

在这里插入图片描述
注意到上图中url的参数username的值是用户名lucy,那么会不会该参数值是哪个用户名就回显哪个用户的信息呢?

来试一下payload:http://www.pikachu.com:90/vul/overpermission/op1/op1_mem.php?username=kobe&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF

成功看到kobe的个人信息,lili也是一样,就不演示了
在这里插入图片描述

问题分析

到底为啥会出这种问题?来看一下源代码

啊,和猜想的一样,是因为查找用户信息的时候传入的参数是直接从url中获取的,没有校验当前用户
在这里插入图片描述

尝试防御

接下来我想试一下防御水平越权。

如下图所示,27行增加判断url传入的username和当前用户是否匹配,如果匹配则为$username赋值,若不匹配则不赋值。
在这里插入图片描述

尝试一下,首先是直接点“点击查看个人信息”按钮,返回了当前登录用户lucy的个人信息
在这里插入图片描述

再尝试一下把url中的lucy改成kobe,没有返回kobe的个人信息,成功防御水平越权
在这里插入图片描述

第二关 垂直越权

进入关卡和上一关一样,也是一个登陆界面
在这里插入图片描述
点一下提示,看看有哪些用户:

admin/123456,pikachu/000000,admin是超级boss
在这里插入图片描述
先用pikachu登录看看有哪些权限:

pikachu只有后台管理中心的查看权限
在这里插入图片描述
退出登录,再用admin用户登录,看看有哪些权限:

admin可以查看,添加,删除
在这里插入图片描述
下面分别进行添加和删除操作,记录相关的url
添加用户
url是:http://www.pikachu.com:90/vul/overpermission/op2/op2_admin_edit.php

创建一个用户caker
在这里插入图片描述
再来看删除:

点击刚创建的haha用户那行的删除按钮,haha被删掉了,注意到url如下:

http://www.pikachu.com:90/vul/overpermission/op2/op2_admin.php?id=52
在这里插入图片描述

好了,现在admin退出登录,再用pikachu登录
直接输入地址栏输入payload:http://www.pikachu.com:90/vul/overpermission/op2/op2_admin_edit.php

顺利来到了添加用户的页面
在这里插入图片描述
创建用户enen,创建完之后会跳到登录页面,但是不要担心,用pikachu登录之后,发现用户enen已经创建成功
在这里插入图片描述
下面再来试试浏览器地址栏直接输入 http://www.pikachu.com:90/vul/overpermission/op2/op2_admin.php?id=52
回车之后也跳转到登录页面了,登录之后发现enen还在,没有删除成功。

此时有两种可能性,要么是heihei的id并不是26,要么是这个url不存在垂直越权漏洞。

用admin登录之后删除heihei,确认heihei的id确实是26,那么就说明这个url不存在垂直越权漏洞。

这表示本关的垂直越权漏洞仅存在于 http://www.pikachu.com:90/vul/overpermission/op2/op2_admin_edit.php ,不存在于http://www.pikachu.com:90/vul/overpermission/op2/op2_admin.php?id=

问题分析

看一下这两个操作的具体处理过程有什么区别:

先看没问题的删除操作op2_admin.php:

主要是23~26行,判断了用户是否登录,是否权限级别为1(超级boss),如果任意一条不满足,就跳转到登录页面
在这里插入图片描述

再来看看有问题的op2_admin_edit.php:

22~25行,只验证了用户是否登录,如果没登录就跳转到登录页面,没有验证用户权限等级,但前端显示添加用户是权限等级为1的用户才能执行的操作,因此这里有垂直越权漏洞。
在这里插入图片描述

尝试防御

来试一下防御,应该很简单,根据op2_admin.php修改一下op2_admin_edit.php:

22行增加对用户权限等级的判断$_SESSION[‘op2’][‘level’]!=1

现在代码的意思变成,如果用户没登录或者权限等级不为1,则跳转到登录页面
在这里插入图片描述
用pikachu用户登录,直接在浏览器地址栏输入http://www.pikachu.com:90/vul/overpermission/op2/op2_admin_edit.php,结果不再是跳转到添加用户的页面,而是跳转到用户登录的页面。防御成功
在这里插入图片描述

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值