水平越权与垂直越权

越权漏洞简介

越权,顾名思义,就是超出了权限或权力范围。多数WEB应用都具备权限划分和控制,但是如果权限控制功能设计存在缺陷,那么攻击者就可以通过这些缺陷来访问未经授权的功能或数据,这就是我们通常说的越权漏洞。攻击者越权后就可以进行一些操作,例如查看敏感信息、进行一些增删改查的
操作等等。
越权漏洞是一种很常见的逻辑安全漏洞。是由于服务器端对客户提出的数据操作请求过分信任,忽略了对该用户操作权限的判定,导致修改相关参数就可以拥有了其他账户的增、删、查、改功能,从而导致越权漏洞。

水平越权

概念

水平越权指的是攻击者尝试访问与他拥有相同权限的用户的资源,怎么理解呢?比如某系统中有个人资料这个功能,A账号和B账号都可以访问这个功能,但是A账号的个人信息和B账号的个人信息不同,可以理解为A账号和B账号个人资料这个功能上具备水平权限的划分。此时, A账号通过攻击手段访问了B账号的个人资料,这就是水平越权漏洞。

说人话就是平民之间的明争暗斗。

常见场景

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

实例

实验环境为 pikachu 靶场 over permission 模块水平越权

我们已事先知道三个账号:
lucy/123456
lili/123456
kobe/123456

怎么实现水平越权呢?首先我们随便登录一个账号,比如 lucy,同时抓包,发现显示了 username & password
在这里插入图片描述
放包肯定是能登陆上去的。那我们把 username 改成 kobe 或者 lili 后放包呢?
在这里插入图片描述
放包发现成功登陆了 kobe 的账户
在这里插入图片描述
这就成功实现了水平越权。想想看,你作为一个平民玩家,随便改了个 id 就掌握了其他平民(甚至可能是氪金大佬)的信息,岂不是…

我们做点更坏的事,能不能顺带把 kobe 的密码也一块改了呢?
在这里插入图片描述
放包,发现登录失败。刷新一下,用设置的密码登录,还是失败,说明此处是不能通过水平越权更改其他用户的信息的。
在这里插入图片描述

垂直越权

概念

垂直越权是不同级别之间或不同角色之间的越权,垂直越权还可以分为向上越权和向下越权。向上越权指的是一个低级别用户尝试访问高级别用户的资源,比如说某个系统分为普通用户和管理员用户,管理员有系统管理功能,而普通用户没有,那我们就可以理解成管理功能具备垂直权限划分,如果普
通用户能利用某种攻击手段访问到管理功能,那我们就称之为向上越权(就是以下犯上)。向下越权是一个高级别用户访问低级别用户信息(那这也是不行的,我们每个人都要有私生活和小秘密)。

常见场景

1、未认证账户访问无需认证就能访问该功能
2、不具备某个功能权限的账户认证后成功访问该功能

实例

实验环境为 pikachu 靶场 over permission 模块垂直越权

我们已事先知道两个账号:
admin/123456
pikachu/000000
admin是超级boss(管理员)

先分别登录看看,再确定出题人想要我们实现的是向上越权还是向下越权
首先是admin
在这里插入图片描述
再是pikachu
在这里插入图片描述
发现唯一的不同是管理员账户多了一个添加用户的功能。猜测此处是要不使用管理员账户来获取添加用户的功能。

我们先在登录 pikachu 的时候抓个包看看能不能更改 admin 的密码
在这里插入图片描述
发现登录失败,说明通过普通用户改管理员密码是不行的
在这里插入图片描述
经过排查初步确定是添加用户这个板块存在越权了,url是
http://192.168.244.1/pikachu/vul/overpermission/op2/op2_admin_edit.php
查看 op2_admin_edit.php 文件代码

$link=connect();
// 判断是否登录,没有登录不能访问
//这里只是验证了登录状态,并没有验证级别,所以存在越权问题。
if(!check_op2_login($link)){
    header("location:op2_login.php");
    exit();
}
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>";

        }
    }
}

发现只判断了是否登陆,没有验证级别,确实存在越权

如何实现越权呢?我们只需要重新登入这个板块,把url改成
http://192.168.244.1/pikachu/vul/overpermission/op2/op2_admin_edit.php即可
在这里插入图片描述
这样,即使不登陆管理员账户,也可以添加用户

垂直越权是指攻击者通过利用应用程序中的漏洞,从低权限用户账户提升权限,并获得高权限用户的访问或操作权限的情况。对于pikachu垂直越权的情况,我们需要进行一些防范措施来确保系统的安全。一种防范措施是在调用功能之前验证用户的身份,并验证用户是否具备执行关键操作的权限。此外,对于直接对象引用的加密资源ID,我们可以采取措施来防止攻击者通过枚举ID来获取敏感数据。另外,对于用户输入的可控参数,我们需要进行严格的检查和过滤,以确保不相信来自用户的输入。垂直越权漏洞通常在需要登录的页面的增、删、改、查功能中容易出现,因此在这些地方需要对当前用户的权限进行校验,并确保校验规则不过于简单,以避免越权漏洞的产生。123 #### 引用[.reference_title] - *1* *2* [Pikachu-----Over permission 越权](https://blog.csdn.net/m0_65712192/article/details/128506113)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *3* [渗透测试之pikachu 越权水平越权+垂直越权)](https://blog.csdn.net/qq_37077262/article/details/103025989)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值