💣Pikachu靶场之越权漏洞详解
00 分钟
2023-4-24
2023-6-23
type
status
date
slug
summary
tags
category
icon
password
Property
Jun 23, 2023 11:48 AM

🗒️逻辑越权漏洞简述

漏洞描述

越权访问(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、产品号码、订单流水号等)采用难以猜测的构造方式(如随机数)或采用复杂的加密算法加密后再提交
  • 对管理功能模块进行严格的权限验证

📘Level 1水平越权

越权漏洞通常都是要先用一个用户登录成功,点一下提示,这关有三个同级别的用户,账号密码分别是 lucy/123456,lili/123456,kobe/123456
notion image
先用lucy登录,发现有个可以点击查看个人信息的地方:
notion image
注意到上图中url的参数username的值是用户名lucy,那么会不会该参数值是哪个用户名就回显哪个用户的信息呢?
成功看到kobe的个人信息,lili也是一样,就不演示了
notion image

问题分析

到底为啥会出这种问题?来看一下源代码。果然,是因为查找用户信息的时候传入的参数是直接从url中获取的,没有校验当前用户的身份信息
notion image

尝试防御

接下来我想试一下防御水平越权。如下图所示,27行增加判断url传入的username和当前用户是否匹配,如果匹配则为$username赋值,若不匹配则不赋值。
尝试一下,首先是直接点“点击查看个人信息”按钮,返回了当前登录用户lucy的个人信息
notion image
再尝试一下把url中的lucy改成kobe,没有返回kobe的个人信息,成功防御水平越权
notion image

🔍Level2 垂直越权

进入关卡和上一关一样,也是一个登陆界面
notion image
点一下提示,看看有哪些用户admin/123456,pikachu/000000,admin是超级boss
先用pikachu登录看看有哪些权限:pikachu只有后台管理中心的
查看权限
notion image
退出登录,再用admin用户登录,看看有哪些权限:
admin可以查看,添加,删除
notion image
下面分别进行添加和删除操作,记录相关的url:先添加用户url是:
创建一个用户caker
notion image
再来看删除:
点击刚创建的haha用户那行的删除按钮,haha被删掉了,注意到url如下:
好了,现在admin退出登录,再用pikachu登录直接输入地址栏输入payload:http://www.pikachu.com:90/vul/overpermission/op2/op2_admin_edit.php
顺利来到了添加用户的页面
notion image
创建用户enen,创建完之后会跳到登录页面,但是不要担心,用pikachu登录之后,发现用户enen已经创建成功
notion image
下面再来试试浏览器地址栏直接输入
回车之后也跳转到登录页面了,登录之后发现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),如果任意一条不满足,就跳转到登录页面
notion image
再来看看有问题的op2_admin_edit.php:
22~25行,只验证了用户是否登录,如果没登录就跳转到登录页面,没有验证用户权限等级,但前端显示添加用户是权限等级为1的用户才能执行的操作,因此这里有垂直越权漏洞。
notion image

尝试防御

来试一下防御,应该很简单,根据op2_admin.php修改一下op2_admin_edit.php:
22行增加对用户权限等级的判断$_SESSION[‘op2’][‘level’]!=1
现在代码的意思变成,如果用户没登录或者权限等级不为1,则跳转到登录页面
notion image
用pikachu用户登录,直接在浏览器地址栏输入
,结果不再是跳转到添加用户的页面,而是跳转到用户登录的页面。防御成功
notion image

评论
  • Twikoo