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)

低安全级别分析

漏洞位置:密码修改功能

漏洞细节

  1. 页面隐藏了一个input标签用于输入用户名
  2. 攻击者可以修改该input标签的type属性(从hidden改为text)
  3. 从而能够修改任意用户的密码,而不仅限于当前登录用户

攻击步骤

  1. 检查页面源代码,发现隐藏的用户名输入字段
  2. 使用开发者工具或修改HTML,将<input type="hidden" name="login" value="current_user">改为<input type="text" name="login" value="current_user">
  3. 在可见的输入框中输入目标用户名
  4. 提交新密码,完成对任意用户密码的修改

中高安全级别防护

防护措施

  • 使用随机生成的token验证当前登录用户
  • 服务器端验证请求是否来自合法用户
  • 不依赖前端隐藏字段进行用户身份判断

0x02 重置密钥功能中的IDOR (Reset Secret)

漏洞分析

漏洞位置:重置密钥功能

漏洞细节

  1. 通过分析HTML源代码发现按钮的JavaScript事件
  2. 事件代码中包含硬编码的XML请求:
    xmlHttp.send("<reset><login>bee</login><secret>Any bugs?</secret></reset>");
    
  3. 攻击者可以修改XML中的<login>标签内容来指定任意用户

攻击方法

  1. 拦截或修改前端JavaScript代码
  2. 将目标用户名替换原用户名
  3. 发送修改后的请求,实现对任意用户密钥的重置

根本原因

  • 用户身份验证完全依赖客户端提供的数据
  • 没有服务器端的授权检查

0x03 订票功能中的IDOR (Order Tickets)

低安全级别分析

漏洞位置:票务订购系统

漏洞细节

  1. 票的单价存储在前端HTML中
  2. 攻击者可以修改HTML中的价格参数

攻击步骤

  1. 检查页面源代码,找到票价的HTML元素
  2. 修改ticket_price的值为0
  3. 提交订单,实现"0元购"

中高安全级别防护

防护措施

  • 将票价定义在服务器端
  • 不信任客户端提交的价格数据
  • 服务器端重新计算订单总价

防护建议

  1. 实施访问控制

    • 每次数据访问时验证用户权限
    • 使用基于角色的访问控制(RBAC)
  2. 间接引用

    • 使用间接引用映射代替直接对象引用
    • 例如使用会话特定的ID而非数据库主键
  3. 输入验证

    • 验证所有用户输入
    • 使用白名单验证方法
  4. 服务器端验证

    • 所有关键操作必须在服务器端验证
    • 不信任任何客户端提供的数据
  5. 日志记录

    • 记录所有敏感操作的访问尝试
    • 监控异常访问模式

总结

IDOR漏洞的核心问题是过度信任客户端提供的数据,缺乏服务器端的授权验证。通过本教学中的三个案例可以看出,无论是密码修改、密钥重置还是订单系统,只要直接使用用户提供的参数进行对象访问而不验证权限,就会导致严重的安全问题。开发人员应始终遵循"不信任客户端"的原则,在服务器端实施严格的访问控制。

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请求: 攻击者可以修改XML中的 <login> 标签内容来指定任意用户 攻击方法 : 拦截或修改前端JavaScript代码 将目标用户名替换原用户名 发送修改后的请求,实现对任意用户密钥的重置 根本原因 : 用户身份验证完全依赖客户端提供的数据 没有服务器端的授权检查 0x03 订票功能中的IDOR (Order Tickets) 低安全级别分析 漏洞位置 :票务订购系统 漏洞细节 : 票的单价存储在前端HTML中 攻击者可以修改HTML中的价格参数 攻击步骤 : 检查页面源代码,找到票价的HTML元素 修改 ticket_price 的值为0 提交订单,实现"0元购" 中高安全级别防护 防护措施 : 将票价定义在服务器端 不信任客户端提交的价格数据 服务器端重新计算订单总价 防护建议 实施访问控制 : 每次数据访问时验证用户权限 使用基于角色的访问控制(RBAC) 间接引用 : 使用间接引用映射代替直接对象引用 例如使用会话特定的ID而非数据库主键 输入验证 : 验证所有用户输入 使用白名单验证方法 服务器端验证 : 所有关键操作必须在服务器端验证 不信任任何客户端提供的数据 日志记录 : 记录所有敏感操作的访问尝试 监控异常访问模式 总结 IDOR漏洞的核心问题是过度信任客户端提供的数据,缺乏服务器端的授权验证。通过本教学中的三个案例可以看出,无论是密码修改、密钥重置还是订单系统,只要直接使用用户提供的参数进行对象访问而不验证权限,就会导致严重的安全问题。开发人员应始终遵循"不信任客户端"的原则,在服务器端实施严格的访问控制。