资讯详情

资讯详情

Web安全:越权漏洞原理、分类与防御实战

1. 越权漏洞的本质与分类越权漏洞Privilege Escalation是Web安全领域最常见的高危漏洞之一它允许攻击者超越自身权限范围访问或操作本应受限的资源。根据权限跨越方式的不同我们可以将其分为三类典型场景1.1 水平越权Horizontal Privilege Escalation当攻击者能够访问同权限级别其他用户的资源时就发生了水平越权。例如通过修改URL参数/user/profile?id10086访问其他用户资料电商平台订单号遍历查看他人订单详情社交网络通过API接口获取非好友用户私密相册这类漏洞的共性特征是系统仅验证了用户登录状态未校验数据归属关系。我曾在一个CRM系统中发现只需替换cookie中的企业ID就能访问任意客户数据这正是典型的数据所有权验证缺失。1.2 垂直越权Vertical Privilege Escalation权限的纵向跨越更为危险它使低权限用户获得高权限功能。典型案例包括普通用户通过直接访问/admin/deleteUser路径执行管理员操作前端隐藏界面元素但后端未做权限校验通过修改请求参数将普通评论提升为置顶公告去年审计某OA系统时我发现普通员工提交审批时若在JSON请求体中添加approver:true字段就能自行批准申请。这种前后端权限校验不一致的情况在实际开发中屡见不鲜。1.3 复合越权Compound Privilege Escalation当水平与垂直越权结合时会产生更复杂的攻击面先水平越权获取高权限用户数据再利用该数据实施垂直越权通过低权限接口组合调用实现高权限操作权限继承体系中的传递性漏洞某次渗透测试中我先通过水平越权获取管理员的基础信息再利用这些信息伪造管理员cookie最终实现了从游客到系统管理员的权限跃迁。这种链式攻击往往能绕过常规防御措施。2. 越权漏洞的实战挖掘方法论2.1 参数篡改测试法这是最基础的越权检测手段重点检查以下参数直接ID类参数user_id、order_id、document_id等间接标识符手机号、邮箱、身份证号等个人信息状态标记is_admin、role_type等权限标识操作示例使用Burp Suite拦截正常请求修改参数值为其他用户的已知标识如将user_id123改为user_id456观察响应是否返回目标用户数据关键技巧对于无法猜测的ID可先用自己的两个账号获取ID格式再尝试遍历。2.2 接口未授权访问检测许多系统存在隐藏或废弃的API接口通过爬虫收集所有接口路径测试/admin、/api/v1等常见高危路径检查Swagger等API文档暴露的接口某次src挖掘中我在robots.txt发现/api/v1/internal路径该接口完全未做鉴权可直接查询所有用户敏感信息。这种问题常出现在快速迭代的业务系统中。2.3 JWT令牌攻击面分析JSON Web Token的常见越权场景包括签名未验证alg:none弱密钥爆破使用常用HMAC密钥头部参数注入kid指向攻击者控制文件过期时间篡改exp字段修改实战案例import jwt # 修改alg为none绕过验证 malicious_token jwt.encode( {user:admin,iat:1516239022}, , algorithmnone )2.4 业务逻辑越权挖掘需要深入理解业务场景的特殊漏洞多阶段流程中跳过权限检查步骤竞争条件导致权限校验失效批量操作接口中的权限继承问题在某金融APP测试中我发现转账流程的确认页面实际上不进行二次权限校验攻击者可直接向最终接口发送请求完成转账。这类漏洞需要完整走查业务流程才能发现。3. 10个典型越权漏洞案例分析3.1 案例1IDOR导致用户数据泄露漏洞场景医疗系统患者报告查看接口/api/report?patient_id123攻击过程注册普通账号获取自己的patient_id1001修改参数为patient_id1002成功获取他人体检报告根因分析后端仅验证登录状态未校验患者与账号的归属关系。3.2 案例2JWT alg:none攻击漏洞场景使用JWT进行身份认证的Web应用攻击步骤捕获正常JWT令牌修改头部{alg:none}删除签名部分将payload中的role:user改为role:admin提交伪造的令牌获得管理员权限防御方案服务端必须严格校验签名算法拒绝alg:none的令牌。因篇幅限制此处展示2个案例完整案例集包含 3. 管理员功能未做权限校验 4. 用户枚举导致水平越权 5. 权限缓存失效问题 6. 接口参数污染攻击 7. GraphQL接口越权 8. 微服务间信任滥用 9. 文件元数据越权访问 10. 组合功能权限逃逸4. 自动化越权检测工具链4.1 被动扫描工具配置推荐使用Burp Suite的Autorize插件安装插件后配置高低权限账号用高权限账号浏览所有功能切换低权限账号自动重放请求分析差异响应识别越权点# 配合sqlmap进行参数自动化测试 python sqlmap.py -r request.txt --skipsql --tamperrandomcase --level34.2 自定义越权检测脚本基于Python的自动化检测示例import requests def check_idor(url_pattern, id_range): for id in id_range: res requests.get(url_pattern.format(id)) if res.status_code 200 and 敏感字段 in res.text: print(f越权漏洞发现ID: {id}) check_idor(http://example.com/api/user?id{}, range(1000,1005))4.3 流量对比分析技术使用diff工具对比高低权限账号的流量使用Burp记录管理员操作流量使用普通账号重复相同操作使用diff对比两个流量文件分析差异点寻找权限校验缺失处5. 企业级防御方案设计5.1 权限校验中间件开发建议实现统一的权限网关// Spring Security权限校验示例 PreAuthorize(#userId principal.userId or hasRole(ADMIN)) public User getUserById(Long userId) { return userRepository.findById(userId); }5.2 数据访问层防护在DAO层增加数据归属校验-- 确保查询中包含用户关联条件 SELECT * FROM orders WHERE order_id ? AND user_id CURRENT_USER_ID()5.3 安全监控体系建设关键监控指标包括同一账号访问多用户数据的频率低权限账号访问高危接口的次数异常参数修改行为如ID跳跃式变化我在实际项目中曾通过ELK自定义规则实现实时越权行为告警成功拦截了多起内部越权测试。6. 越权漏洞挖掘的进阶技巧6.1 基于业务场景的测试思路不同行业的特殊关注点电商优惠券领取、订单修改、余额操作社交私信读取、好友关系修改金融转账额度、交易记录查看OA审批流程、公文查阅6.2 非常规参数定位方法除了明显ID参数还要关注文件名参数fileuser1_contract.pdf时间戳参数可能隐含排序信息参考号如refMD5(email)缓存键cache_keyuser:1001:profile6.3 权限继承体系测试重点检查角色继承关系中的权限传递多级审批流程的权限累积临时权限的过期机制权限撤销的及时性在测试某云平台时我发现给子账号授予临时权限后即使主账号取消权限子账号仍能通过特定接口保持权限长达1小时。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →