挖洞经验 | 利用越权漏洞(IDOR)实现账户劫持
字数 1374 2025-08-15 21:32:12
利用IDOR漏洞实现账户劫持的深入分析与防御指南
1. IDOR漏洞概述
不安全的直接对象引用(Insecure Direct Object Reference, IDOR)是一种常见的Web授权逻辑漏洞,攻击者通过直接操作未经验证的对象引用(如ID、文件名或密钥)来访问未授权的资源。
1.1 IDOR漏洞分类
根据危害程度,IDOR可分为四类:
- 数据读取:未经授权查看他人数据
- 数据篡改:未经授权修改他人数据
- 权限提升:通过数据更改实现权限升级
- 账户劫持:完全控制他人账户或项目(最严重)
2. IDOR漏洞利用场景分析
2.1 项目操作中的IDOR
案例1:添加项目时的IDOR
POST /api/projects/victim/children HTTP/1.1
Host: victim.com
{"subdomain":"victim1"}
漏洞点:请求中直接使用可预测或可枚举的项目名称参数,攻击者可替换为他人项目名称实现控制。
案例2:删除项目时的IDOR
POST /delete_project HTTP/1.1
Host: victim.com
Cookie: ...
{"childrenProjects":["id_project1","id_project2","id_project_victim"]}
漏洞点:
- 删除请求中未验证项目所有权
- 项目ID可通过公开页面HTML源码获取
- 攻击者可构造包含他人项目ID的请求
2.2 用户资料更新中的IDOR
攻击流程:
- 利用访问控制不当查看他人项目详情和子账户
- 在个人资料更新请求中注入他人子账户ID
- 实现对子账户的完全控制
危害:
- 控制子账户创建/管理项目
- 查看和编辑关联数据
- 可能进一步控制主账户
3. 高级利用技术
3.1 信息收集方法
- HTML源码分析:从公开页面查找隐藏的ID或UUID
- 枚举测试:对数字ID进行顺序或模式枚举
- 参数篡改:修改请求中的各种标识符测试响应
3.2 绕过复杂ID的技朧
- UUID分析:寻找UUID生成规律或可预测性
- 哈希破解:对哈希ID进行反向工程
- 间接引用:通过其他接口获取目标ID
4. 实际案例分析:city-mobil.ru漏洞
漏洞详情:
- 跨平台系统中的IDOR漏洞
- 可访问100多万名司机的敏感数据(护照和驾照信息)
- 能够更改司机资料数据
危害评估:
- 大规模数据泄露风险
- 身份伪造可能性
- 系统完整性破坏
5. 防御措施
5.1 开发层面防御
-
访问控制:
- 实施基于角色的访问控制(RBAC)
- 每次请求都验证用户权限
- 遵循最小权限原则
-
标识符设计:
// 不安全:使用连续数字ID int userId = 123; // 更安全:使用不可预测的UUID String userId = UUID.randomUUID().toString(); -
输入验证:
- 验证用户对请求对象的所有权
- 实施服务端校验而非依赖客户端校验
-
API设计最佳实践:
- 使用间接引用映射
- 避免暴露内部实现细节
- 对敏感操作实施二次验证
5.2 测试与审计
-
自动化测试:
- 实施IDOR专项测试用例
- 使用工具扫描(如Burp Suite、OWASP ZAP)
-
代码审计重点:
- 检查所有对象引用点
- 验证权限检查是否一致
- 审查加密和随机化实现
-
渗透测试技巧:
- 修改所有请求中的ID参数
- 测试增删改查各操作
- 尝试权限边界值
6. 漏洞赏金实战技巧
-
目标选择:
- 关注用户账户和项目管理功能
- 优先测试企业级应用
-
测试方法论:
- 全面记录所有请求和响应
- 系统性地修改每个参数
- 注意非显式ID(如哈希、编码值)
-
漏洞报告要点:
- 清晰描述漏洞利用路径
- 提供完整请求示例
- 量化潜在影响
- 建议修复方案
7. 总结
IDOR漏洞虽然概念简单,但实际影响可能非常严重,特别是当导致账户劫持时。防御IDOR需要全面的安全意识和系统性的防护措施,从设计阶段就应考虑对象引用安全问题。对于安全研究人员,掌握IDOR的高级利用技术可以在漏洞赏金计划中获得丰厚回报。