挖洞经验 | 在账户注册和意见反馈处发现越权漏洞(IDOR)
字数 1646 2025-08-18 11:39:15
IDOR(越权访问)漏洞全面解析与实战指南
一、IDOR漏洞概述
IDOR(Insecure Direct Object References,不安全的直接对象引用)是一种常见的Web安全漏洞,允许攻击者通过修改访问参数来绕过授权机制,访问未授权的资源或数据。
核心概念
- 定义:当应用程序基于用户提供的输入(如参数值)直接访问对象,而没有进行适当的授权验证时,就会产生IDOR漏洞。
- 典型场景:用户U1通过修改URL中的ID参数(如从23改为50),可以访问用户U2的私有数据。
- 本质问题:缺乏对访问对象的身份验证措施,仅依赖客户端提供的参数进行资源访问。
二、IDOR漏洞常见发现场景
1. 用户注册处的IDOR漏洞
漏洞特征:
- 注册API中包含可预测或可枚举的用户ID参数
- 修改ID参数后,服务器返回其他用户的敏感信息
案例分析:
POST /analytics/index.php/plus/registerportal?user_id=43657&key=344246b382b1d70c25ea14ed6f2760c6 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: api.whocare.com
email=test@whocare.com&password=as&firstname=tvbb&lastname=gvcz
攻击方法:
- 拦截注册请求
- 修改
user_id参数为其他值 - 观察响应中是否包含其他用户信息
影响:
- 通过枚举user_id可批量获取用户数据
- 可能泄露管理员账户信息
2. 邮件订阅功能中的IDOR漏洞
漏洞特征:
- 取消订阅链接包含base64编码的用户邮箱
- 无身份验证机制验证请求者身份
案例分析:
http://whocare.com/deleteNewsletter/dGVzdGVybWFpbEBnbWFpbC5jb20=
(base64解码后为testermail@gmail.com)
攻击方法:
- 收集目标用户邮箱列表
- 对邮箱进行base64编码
- 使用Burp Intruder等工具自动化发送取消订阅请求
影响:
- 可批量取消其他用户的订阅
- 结合注册处IDOR可形成更大威胁
3. 意见反馈功能中的IDOR漏洞
漏洞特征:
- 反馈提交接口暴露接收邮箱参数
- 可修改发件人邮箱和接收邮箱
案例分析:
POST /Services/PostContactUsEmail HTTP/1.1
Host: www.whocare.com
ContactUs_Name_Txt=hiname
&ContactUs_Email_Txt=attacker@gmail.com
&ContactUs_Department_Txt=feedback@whocare.com
&ContactUs_MessageBody_Txt=this+is+the+comment
攻击方法:
- 修改
ContactUs_Department_Txt为目标管理员邮箱 - 修改
ContactUs_Email_Txt为伪造的发件人 - 构造钓鱼内容发送
影响:
- 可伪造管理员身份向用户发送邮件
- 可用于钓鱼攻击的切入点
三、IDOR漏洞挖掘方法论
1. 参数分析技术
- 识别敏感参数:查找URL、POST数据中的ID、key、email等参数
- 参数类型判断:数字型、哈希值、base64编码等
- 参数修改测试:递增/递减数字,修改哈希值等
2. 测试流程
- 正常业务流程操作
- 拦截请求/观察URL结构
- 修改参数值尝试访问其他资源
- 观察响应差异
3. 工具辅助
- Burp Suite:拦截修改请求,使用Intruder枚举参数
- 编码工具:处理base64、哈希等编码参数
- 自定义脚本:自动化参数枚举测试
四、IDOR漏洞防御方案
1. 访问控制措施
- 实施基于角色的访问控制(RBAC)
- 每次对象访问前验证用户权限
- 遵循最小权限原则
2. 参数安全处理
- 避免使用可预测的标识符(如连续数字ID)
- 使用强加密或随机生成的令牌替代直接ID
- 对参数进行完整性校验
3. 安全编码实践
// 不安全示例
public File getFile(String fileId) {
return fileRepository.findById(fileId);
}
// 安全示例
public File getFile(String fileId, User currentUser) {
File file = fileRepository.findById(fileId);
if(file.getOwner().equals(currentUser)) {
return file;
}
throw new AccessDeniedException();
}
4. 其他防护措施
- 实施CSRF防护
- 敏感操作要求重新认证
- 记录和监控异常访问模式
五、高级攻击场景
1. 横向越权
- 同一权限级别用户间的未授权访问
- 如普通用户A访问普通用户B的数据
2. 纵向越权
- 低权限用户访问高权限功能
- 如普通用户访问管理员功能
3. 间接IDOR
- 通过修改关联参数实现越权
- 如通过订单ID关联到其他用户信息
六、参考资源
- OWASP IDOR防护指南:https://cheatsheetseries.owasp.org/cheatsheets/Insecure_Direct_Object_Reference_Prevention_Cheat_Sheet.html
- Web安全测试手册IDOR章节
- MITRE CWE-639: Insecure Direct Object Reference
通过全面理解IDOR漏洞的原理、发现方法和防御措施,开发人员和安全测试人员可以更好地防范和检测这类常见但危害严重的安全问题。