记一次水平越权漏洞的利用
字数 1613 2025-08-12 12:08:18
水平越权漏洞利用实战教学文档
0x00 前言
水平越权(Horizontal Privilege Escalation)是指攻击者能够访问或操作与其权限级别相同的其他用户的资源。本文档将详细记录一次水平越权漏洞的完整利用过程,包含多种越权方式的实战演示。
0x01 越权查看和删除
漏洞发现过程
- 初始测试:注册登录进入个人中心后,通过修改参数测试越权可能性
- 教育经历操作流程:
- 先创建自己的教育经历
- 再进入编辑状态
漏洞利用步骤
-
抓包分析:
- 拦截编辑请求,发现通过
infoId参数引用对象 - 服务端返回用户信息并进入编辑状态
- 拦截编辑请求,发现通过
-
参数篡改测试:
- 尝试SQL注入无果
- 修改
infoId值为其他用户ID,成功返回其他用户信息 - 同样方法可越权删除任意用户信息
-
REST风格参数测试:
- 发现编辑操作后
infoId值出现在URL路径中 - 修改路径中的ID值,成功越权修改其他用户资料
- 注意:测试时应使用自己的测试账号,避免影响真实用户
- 发现编辑操作后
技术原理
- 不安全的直接对象引用(IDOR):系统仅通过客户端提供的ID进行权限判断,未在服务端验证请求者是否有权访问该ID对应的资源
- REST风格参数:URL路径中的参数同样需要验证权限
0x02 绕过登录未授权访问
漏洞发现过程
- 初始观察:预览资料请求中无GET/POST参数,推测通过cookie鉴别
- cookie分析:
- 发现多个cookie字段值均为base64编码
- 使用控制变量法逐个删除字段测试
漏洞利用步骤
-
关键字段定位:
- 删除
career_id字段后页面异常 - 确认服务端仅校验该字段
- 删除
-
字段解码分析:
- base64解码
career_id发现包含用户ID(如5160397)
- base64解码
-
暴力枚举测试:
- 使用Burp Intruder模块遍历
career_id值 - 成功获取其他用户ID
- 使用Burp Intruder模块遍历
-
cookie替换攻击:
- 复制目标用户
career_id替换自己cookie中的值 - 成功绕过登录,未授权访问其他用户个人中心
- 复制目标用户
技术原理
- 脆弱的身份验证:仅依赖单个未加密的cookie字段进行身份验证
- 信息暴露:使用可逆的编码方式(如base64)存储敏感信息
0x03 利用"self-xss"获取更多权限
组合攻击思路
-
权限限制分析:
- 个人中心仅校验
career_id - 其他页面校验更多字段,限制更多操作
- 个人中心仅校验
-
存储型XSS发现:
- 简历编辑页存在存储型XSS
- 正常情况下为self-XSS(仅影响自己)
-
组合攻击:
- 越权编辑他人简历植入XSS payload
- 等待目标用户访问触发
- 可获取目标用户完整cookie或其他敏感信息
-
CSRF组合攻击:
- 资料编辑操作存在CSRF漏洞
- 可构造"CSRF + self-XSS"攻击链
- 但越权编辑方式更可靠
0x04 测试方法论总结
水平越权测试基本思路
-
参数定位:
- 使用控制变量法删除参数或cookie字段
- 找出真正有效的鉴权参数
-
信息去模糊化:
- 对参数或cookie字段进行解码/解密
- 分析其结构和含义
-
全面测试:
- 修改参数值或cookie字段
- 对增删改查等所有操作进行越权测试
- 包括GET/POST参数和URL路径参数
-
漏洞组合:
- 结合其他漏洞(XSS、CSRF等)提升危害
- 构建攻击链实现更大影响
自动化测试工具
- 可使用Burp Suite的Authz等插件辅助测试
- 但主要适用于查看操作的越权检测
0x05 防御建议
-
服务端验证:
- 所有操作必须在服务端验证请求者权限
- 不能依赖客户端提供的参数或隐藏字段
-
强身份验证:
- 使用不可逆的token代替直接ID
- 多因素认证关键操作
-
安全编码:
- 避免在客户端存储敏感信息
- 如需存储,应使用强加密而非简单编码
-
输入输出处理:
- 对所有输入进行严格验证
- 输出编码防止XSS等二次攻击
-
最小权限原则:
- 用户只能访问必要的功能和数据
- 默认拒绝所有非明确允许的请求