IDOR Vulnerability Testing
该技能应在用户提出“检测不安全的直接对象引用”、“查找IDOR漏洞”、“利用访问控制缺陷”、“枚举用户ID或对象引用”或“绕过授权访问其他用户数据”等请求时启用。它提供关于在Web应用程序中检测、利用及修复IDOR漏洞的全面指导方案。
IDOR 漏洞测试技能
技能概述
IDOR 漏洞测试技能提供系统化的方法来检测和利用 Web 应用中的不安全直接对象引用漏洞,帮助安全测试人员在授权范围内发现访问控制缺陷并提供修复建议。
适用场景
-
授权渗透测试 在获得书面授权的安全测试项目中,系统化检测目标应用的 IDOR 漏洞,识别水平越权(用户间数据访问)和垂直越权(普通用户获取管理员权限)问题。
-
应用安全审计 对内部或客户的 Web 应用进行安全审计时,快速定位 API 端点、文件下载功能中的对象引用枚举风险,生成漏洞报告和修复方案。
-
安全开发培训 帮助开发团队理解 IDOR 漏洞的形成原理和检测方法,学习如何正确实现服务器端的访问控制和数据所有权验证。
核心功能
-
多类型 IDOR 检测 支持数据库对象引用检测(如用户 ID、订单 ID)和静态文件引用检测(如发票 PDF、收据文件),涵盖 URL 参数、请求体、HTTP 方法切换等多种攻击向量。
-
Burp Suite 自动化利用 提供详细的 Burp Suite Intruder 配置指南,支持 Sniper 和 Battering Ram 攻击模式,可批量枚举用户 ID 范围并自动分析响应状态码识别漏洞。
-
漏洞修复指导 包含 Python/Django 等框架的安全代码示例,演示如何实现正确的访问控制验证、使用间接对象引用以及服务器端数据所有权过滤。
常见问题
什么是 IDOR 漏洞?
IDOR(Insecure Direct Object Reference)是一种访问控制漏洞,当应用直接使用用户提供的标识符(如 ID、文件名)来访问数据库记录或文件时,攻击者可以通过修改这些标识符访问其他用户的资源。例如,将自己的用户 ID 从 1001 改为 1000 就能查看另一个用户的资料。
如何使用 Burp Suite 测试 IDOR?
首先配置浏览器代理通过 Burp Suite,使用测试账号登录并访问包含对象 ID 的页面。在 Proxy 标签页拦截请求后,将 ID 参数设置为 payload 位置,发送到 Intruder 模块。配置数字类型 payload(范围 1-10000),启动攻击后分析响应状态码,200 状态码可能表示存在 IDOR 漏洞。
为什么我的测试请求都返回 403?
如果所有请求都返回 403 Forbidden,说明服务器实现了基本的访问控制。可以尝试以下绕过方法:切换 HTTP 方法(从 GET 改为 POST/PUT)、添加 X-Original-URL 头、使用参数污染(?id=1001&id=1000)、URL 编码变体,或者测试未认证端点和 API 版本差异。
UUID 能防止 IDOR 吗?
UUID 比顺序 ID 更难枚举,但不能完全防止 IDOR。可以通过分析响应体、JavaScript 文件、列表 API 接口来获取有效的 UUID,或者使用时间戳预测 UUID v1。正确的防护还是在服务器端验证请求用户对所请求资源的所有权。
IDOR 测试需要几个测试账号?
至少需要两个有效账号:一个"攻击者"账号用于发起请求,一个"受害者"账号用于确认是否能够访问其数据。两个账号可以验证水平越权;如果需要测试垂直越权,还需要一个管理员账号来识别管理员角色 ID。
如何修复检测到的 IDOR 漏洞?
修复 IDOR 的核心原则是服务器端必须验证当前用户对所请求资源的所有权。不要使用客户端提供的 ID 直接查询数据库,而应该使用当前会话的用户 ID 进行过滤。例如,查询地址时使用 Address.objects.filter(user=request.user, id=address_id) 而不是直接 Address.objects.get(id=address_id)。