7.bWAPP -- INSECURE DIRECT OBJECT REFERENCES
字数 1370 2025-08-24 16:48:07
bWAPP漏洞教学:不安全的直接对象引用(IDOR)
概述
不安全的直接对象引用(Insecure Direct Object References,IDOR)是OWASP Top 10中的常见漏洞,发生在应用程序直接使用用户提供的输入来访问对象(如数据库记录、文件),而没有进行适当的授权检查。本教学基于bWAPP平台,详细分析三种IDOR漏洞场景。
0x01 修改密码功能中的IDOR (Change Secret)
低安全级别分析
漏洞位置:密码修改功能
漏洞细节:
- 页面隐藏了一个input标签用于输入用户名
- 攻击者可以修改该input标签的type属性(从hidden改为text)
- 从而能够修改任意用户的密码,而不仅限于当前登录用户
攻击步骤:
- 检查页面源代码,发现隐藏的用户名输入字段
- 使用开发者工具或修改HTML,将
<input type="hidden" name="login" value="current_user">改为<input type="text" name="login" value="current_user"> - 在可见的输入框中输入目标用户名
- 提交新密码,完成对任意用户密码的修改
中高安全级别防护
防护措施:
- 使用随机生成的token验证当前登录用户
- 服务器端验证请求是否来自合法用户
- 不依赖前端隐藏字段进行用户身份判断
0x02 重置密钥功能中的IDOR (Reset Secret)
漏洞分析
漏洞位置:重置密钥功能
漏洞细节:
- 通过分析HTML源代码发现按钮的JavaScript事件
- 事件代码中包含硬编码的XML请求:
xmlHttp.send("<reset><login>bee</login><secret>Any bugs?</secret></reset>"); - 攻击者可以修改XML中的
<login>标签内容来指定任意用户
攻击方法:
- 拦截或修改前端JavaScript代码
- 将目标用户名替换原用户名
- 发送修改后的请求,实现对任意用户密钥的重置
根本原因:
- 用户身份验证完全依赖客户端提供的数据
- 没有服务器端的授权检查
0x03 订票功能中的IDOR (Order Tickets)
低安全级别分析
漏洞位置:票务订购系统
漏洞细节:
- 票的单价存储在前端HTML中
- 攻击者可以修改HTML中的价格参数
攻击步骤:
- 检查页面源代码,找到票价的HTML元素
- 修改
ticket_price的值为0 - 提交订单,实现"0元购"
中高安全级别防护
防护措施:
- 将票价定义在服务器端
- 不信任客户端提交的价格数据
- 服务器端重新计算订单总价
防护建议
-
实施访问控制:
- 每次数据访问时验证用户权限
- 使用基于角色的访问控制(RBAC)
-
间接引用:
- 使用间接引用映射代替直接对象引用
- 例如使用会话特定的ID而非数据库主键
-
输入验证:
- 验证所有用户输入
- 使用白名单验证方法
-
服务器端验证:
- 所有关键操作必须在服务器端验证
- 不信任任何客户端提供的数据
-
日志记录:
- 记录所有敏感操作的访问尝试
- 监控异常访问模式
总结
IDOR漏洞的核心问题是过度信任客户端提供的数据,缺乏服务器端的授权验证。通过本教学中的三个案例可以看出,无论是密码修改、密钥重置还是订单系统,只要直接使用用户提供的参数进行对象访问而不验证权限,就会导致严重的安全问题。开发人员应始终遵循"不信任客户端"的原则,在服务器端实施严格的访问控制。