【越权漏洞】详解:从原理到漏洞复现以及修复建议

1. 越权漏洞的定义


越权漏洞(Privilege Escalation)是指系统未能正确验证用户权限,导致攻击者能够执行超出其权限范围的操作。这种逻辑漏洞源于服务器对客户端请求的过度信任,缺乏严格的权限校验机制。


越权漏洞就像小区门禁系统出了bug。想象一下:你拿着普通住户的门禁卡,本来只能进自己家和健身房,结果有一天你发现:

  1. 用你的卡居然能刷开邻居家的门(这就是水平越权)
  2. 甚至还能打开物业办公室(这就是垂直越权)
    这明显不正常对吧?网站和APP也会出现这种问题。比如:
    • 你改一下网址里的订单编号,就能看到别人的购物记录
    • 普通用户点个按钮,居然能删除网站所有内容

出现这种情况,都是因为程序员忘记做"查证件"这一步,系统看到有人敲门就直接放行了,根本不检查来的人到底有没有权限做这个操作。

要防止这种漏洞,关键是要做到:每次有人要操作时,系统都要先确认"这个人真的有权限做这件事吗?"就像小区门卫应该认真核对每张门禁卡的权限一样。

2. 分类与危害分析

3. 一般攻击手法详解

① GET参数篡改
原始请求:GET /userinfo?id=123
攻击请求:GET /userinfo?id=456(遍历ID获取他人信息)

*防御方案*:服务端校验session与ID绑定关系

② POST参数伪造
{
“userId”: “123”, // 修改为其他用户ID
“operation”: “delete”
}

*防御方案*:使用JWT等token机制替代明文参数

③ Cookie劫持

document.cookie=“admin_token=xxxx” // 窃取高权限cookie

*防御方案*:HttpOnly+Secure属性+定期刷新

4.靶场练习-Pikachu靶场

(1)水平越权——漏洞复现步骤​​:

登录到Pikachu靶场
打开越权靶场测试
denglv
可以点击这边的提示一下,可以看到这边有3个账户

使用 lucy 登录系统

进入 ​​"查看用户信息"​​ 页面,URL可能类似:
http://127.0.0.1/pikachu/vul/overpermission/op1/op1_mem.php?username=lucy&submit=点击…

观察URL中的参数 username=lucy,此时页面显示 lucy 的信息。
​​修改参数​​:将 username=lucy 改为 username=lili(或其他用户的ID),刷新页面。
修改
刷新
如果页面显示 lili 的信息,说明存在水平越权漏洞(因为我们并没有登录lili,而通过修改参数对lili进行了访问)

(2)垂直越权——漏洞复现步骤​​:

1.切换到垂直越权,点击提示,发现有两个用户, pikachu 用户为普通用户, admin 用户为超级用户
在这里插入图片描述
2. 登录 普通用户Pikachu,密码000000 发现只有查看权限

3.退出,登录管理员账户,账户admin,密码123456
在这里插入图片描述
发现可以有查看、添加、删除功能
把鼠标放在删除按钮上时左下角出现url

查看功能的url如下:
127.0.0.1/pikachu/vul/overpermission/op2/op2_admin.php
添加用户功能的url如下:
127.0.0.1/pikachu/vul/overpermission/op2/op2_admin_edit.php
删除用户功能的url如下:
127.0.0.1/pikachu/vul/overpermission/op2/op2_admin.php?id=5
4.退出管理员,再次登录pikachu 用户,注意url

5. 直接在浏览器输入添加用户功能的url

6.发现可以进入,创建一个用户试试
在这里插入图片描述
7.发现创建成功,说明此处存在垂直越权漏洞

其他功能点同理,逐一尝试,若输入相应的url后跳转到需要登录的页面,则该功能点不存在垂直越权漏洞

​​工具辅助验证(Burp Suite)​​
用Burp拦截查看用户信息的请求。
修改请求中的username参数,观察服务器返回结果


5. 漏洞修复

1、完善用户权限体系。要知道哪些数据对于哪些用户,哪些数据不应该由哪些用户操作;
2、鉴权,服务端对请求的数据和当前用户身份做校验;
3、不要直接使用对象的实名或关键字;
4、对于可控参数进行严格的检查与过滤。


​​​​注意事项​​
仅在授权环境中测试,勿在真实网站尝试。
使用Burp Suite或Postman拦截请求时,注意观察HTTP头部的权限验证字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值