// 安全研究 · 2025-10-19

IDOR 越权漏洞测试思路 Checklist

引言

IDOR(Insecure Direct Object Reference,不安全的直接对象引用)是一种常见的 Web 安全漏洞,也称为越权漏洞。它发生在应用程序直接暴露内部对象引用(如 ID、文件名或数据库键)时,用户可以通过修改这些引用来访问未授权的数据或执行未授权的操作。这种漏洞可能导致数据泄露、账户接管或其他严重后果。在渗透测试或安全审计中,系统地检查 IDOR 漏洞至关重要。本文基于典型的测试实践,提供一个详细的 IDOR 越权漏洞测试思路 Checklist,帮助安全研究人员或开发人员识别和验证潜在风险。


IDOR 漏洞测试 Checklist

以下是 IDOR 漏洞测试的详细步骤清单,按照逻辑顺序组织。每个步骤包括描述、测试方法和潜在绕过技巧。

1. 查找并替换 ID 值(Find and Replace IDs)

  • 描述:IDOR 漏洞通常通过 URL、请求头或请求体中的 ID 参数暴露。测试的核心是尝试修改这些 ID 来访问其他用户的资源。
  • 测试思路:
    • 在 URL、Headers 和 Body 中搜索常见 ID 参数(如 user_id、doc_id)。
    • 替换为其他值,例如将 /user/123 改为 /user/124,并观察响应。
    • 检查是否能访问未授权数据,如其他用户的个人信息或文件。
  • 注意:如果响应为 403/404,确保检查是否实际执行了操作(有时漏洞隐藏在响应码后)。

2. 参数污染测试(Typical Parameter Pollution)

  • 描述:通过重复或修改参数来绕过验证逻辑。
  • 测试思路:
    • 在请求中添加重复参数,例如 user_id=123&user_id=124。
    • 使用特殊字符(如 %00、../)污染参数,尝试绕过过滤器。
    • 观察应用程序是否优先处理第一个或最后一个参数。

3. 特殊字符注入(Special Characters)

  • 描述:利用特殊字符测试输入验证的鲁棒性。
  • 测试思路:
    • 在 ID 参数中注入字符如 ’、“、;、% 或 SQL 注入风格的 payload(如 ’ OR 1=1)。
    • 检查是否导致意外行为,如数据库错误或越权访问。

4. 尝试旧版本端点(Try Older Versions of Endpoint)

  • 描述:应用程序可能保留旧 API 版本,这些版本的验证较弱。
  • 测试思路:
    • 修改端点路径,如将 /api/v2/user/123 改为 /api/v1/user/123。
    • 通过目录爆破工具(如 Burp Suite)发现隐藏的旧端点。

5. 添加额外参数(Add Extra Parameters)

  • 描述:添加未文档化的参数来影响验证逻辑。
  • 测试思路:
    • 在请求中添加参数如 admin=true 或 override=true。
    • 结合其他方法,观察是否能绕过权限检查。

6. 更改请求方法(Change Request Method)

  • 描述:不同 HTTP 方法可能有不同的权限验证。
  • 测试思路:
    • 将 GET 改为 POST、PUT、DELETE 或 PATCH。
    • 示例:如果 GET /user/123 被禁止,尝试 POST /user/123 以相同 payload。

7. 检查 Referer 和其他 Headers(Check If Referer Some Other Headers Used to Validate)

  • 描述:一些应用程序依赖 Referer 或其他头进行验证。
  • 测试思路:
    • 修改 Referer 为合法来源,如 Referer: example.com/user/123。
    • 如果 GET /user/123 返回 404,添加 Referer 后检查是否变为 200 OK。
    • 测试其他头如 X-Forwarded-For 或 User-Agent。

8. 加密 ID 处理(Encrypted IDs)

  • 描述:如果 ID 被加密(如 Base64),尝试解密并修改。
  • 测试思路:
    • 使用工具(如 Base64 解码器、Hashcat)解密 ID。
    • 替换解密后的值并重新加密,发送请求。
    • 尝试常见加密算法如 AES 或 JWT。

9. 交换 ID 类型(Swap GUID with Numeric ID or Email)

  • 描述:应用程序可能支持多种 ID 格式。
  • 测试思路:
    • 将数字 ID(如 123)替换为 GUID(如 00000000-0000-0000-0000-000000000000)或 email(如 user@example.com)。
    • 测试零值 GUID(如全零)是否暴露系统资源。

10. GUID 枚举(GUID Enumeration)

  • 描述:尝试发现有效 GUID 以进行越权。
  • 测试思路:
    • 使用搜索引擎(如 Google、Bing)或 Burp Intruder 枚举 GUID。
    • 通过注册新账户、重置密码或其他功能生成 GUID,并推断模式。
    • 如果枚举失败,尝试 Burp Intruder 发送大量请求(如 90-100 个不同 ID)。

11. 403/404 绕过(403/404 Bypass)

  • 描述:响应码为 403/404 时,可能仍存在漏洞。
  • 测试思路:
    • 使用 Burp Intruder 发送批量请求(如从 /user/100 到 /user/200)。
    • 双重检查功能:即使返回 403,验证是否实际修改了数据(如日志泄露)。
    • 测试延迟响应或侧信道攻击。

12. 与其他漏洞结合(IDOR with XSS & Account Takeover)

  • 描述:IDOR 常与其他漏洞(如 XSS)结合,导致更大危害。
  • 测试思路:
    • 检查 IDOR 是否可用于 XSS 注入,导致账户接管。
    • 示例:通过 IDOR 访问用户会话日志,并注入恶意脚本。
    • 测试文件上传或消息系统中的组合漏洞。

结论

IDOR 越权漏洞测试需要耐心和创造性思维,通过上述 Checklist 可以系统地覆盖常见场景。安全测试是一个持续过程,定期审计有助于防范新兴变种。

原文 https://blog.csdn.net/2301_79518550/article/details/153598118