ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

HowToHunt 实战指南:IDOR / 对象级授权缺陷(Broken Object Level Authorization)的发现、绕过与升级

HowToHunt 实战指南:IDOR / 对象级授权缺陷(Broken Object Level Authorization)的发现、绕过与升级 网络安全应用安全【免费下载链接】HowToHuntCollection of methodology and test case for various web vulnerabilities.项目地址https://gitcode.com/gh_mirrors/ho/HowToHunt点击查看免费下载本篇指南基于 HowToHunt 仓库 IDOR/IDOR-Old.md 整理而成并融合姊妹文档 IDOR/IDOR.md 的补充内容。它面向漏洞赏金猎人Bug Bounty Hunter与渗透测试工程师系统讲解如何在 Web 应用中发现 IDORInsecure Direct Object Reference不安全的直接对象引用攻击向量、如何绕过对象级授权控制以及如何将低影响 IDOR 升级为高严重性漏洞。读完本篇你将掌握一套找到端点 → 提问三连 → 手法绕过 → 升级链接的完整实战方法论。一、什么是 IDOR / 对象级授权缺陷IDOR 在 OWASP 术语中也被归入 Broken Object Level Authorization对象级授权缺陷。从仓库 IDOR/IDOR.md 的定义看其核心是应用依赖用户输入直接引用对象一张图片、一条帖子评论、与用户关联的个人身份信息 PII、甚至组织内某个部门的数据。当应用允许攻击者通过修改参数值直接访问系统中本应受限的资源数据库记录、文件等时即发生了 IDOR——攻击者无需任何额外授权即可绕过访问控制。IDOR 可以存在于应用的任何位置因此只要看到 ID 就应当测试即使它们是 GUID 或某种加密 ID。你需要寻找该 ID 的潜在泄露点如公开的个人资料页或分析其生成规律然后放入 Burp Intruder 批量枚举。IDOR 在野外的四种典型形态根据 IDOR/IDOR.md 的归纳你在真实目标上最常遇到以下四类形态示例说明参数直接检索数据库记录http://foo.bar/somepage?invoice12345改invoice即可查看他人账单参数直接触发系统操作http://foo.bar/changepassword?usersomeuser改user可改他人密码参数直接读取文件系统资源http://foo.bar/showImage?imgimg00011改img可读他人私有文件参数直接访问应用功能http://foo.bar/accessPage?menuitem12改menuitem可访问未授权页面二、为什么说 IDOR 是入门首选原文档 IDOR/IDOR-Old.md 给出的结论是难度评级为 Easy容易。但同时文档给出一个重要提醒——不要盲目地逐个改数字直到撞出 PII个人身份信息这些事工具可以帮你做。这句话的含义是手工逐个枚举 ID 效率极低且容易被风控/限速拦截正确的做法是先理解目标的授权机制和 ID 体系再用 Burp Intruder、Autorize 等工具做规模化验证详见本文第六节把精力放在判断哪个参数可控、哪种手法能绕过上而不是暴力撞数。三、定位 IDOR 攻击向量两个前置调查 三连提问3.1 调查一目标用什么做授权首先搞清楚应用的授权载体是什么JWT、API Key、Cookie 还是 Token。文档给出的验证技巧是用低权限授权替换高权限授权观察服务器响应差异。例如用一个普通用户的 JWT 去请求原本只有管理员能访问的接口如果返回的不是 401/403 而是正常数据说明对象级授权校验缺失反之如果替换后响应变化明显说明授权机制确实在起作用你需要继续寻找它的薄弱环节。3.2 调查二理解 ID、哈希与 API 的使用方式搞清楚应用如何组织 ID自增数字、UUID、哈希、Base64 编码 ID 等以及它们的 API 设计风格。如果目标提供 API 文档务必通读——API 文档通常会暴露参数命名规则、ID 格式、版本号以及角色模型这些都是构造 IDOR 测试请求的原料。3.3 每看到一个新端点自问三连原文档给出的核心方法论是每当你看到一个从客户端接收对象 ID 的新 API 端点都强制自己回答以下三个问题这个 ID 属于私有资源吗例如/api/user/123/news公开资讯与/api/user/123/transaction私有交易的风险等级完全不同后者才是重点测试对象哪些 ID 是属于自己的只有先摸清自己账户对应的 ID 特征数字、UUID、编码格式你才知道该往哪个方向改这个 API 中存在哪些角色例如 user用户、driver司机、supervisor主管、manager经理。多一层角色往往意味着多一层被绕过的可能性——尝试用低角色身份去请求高角色资源。四、手动测试的基础步骤在展开各种绕过手法之前IDOR/IDOR.md 给出了四条基础步骤值得固化为肌肉记忆尽量创建两个账户做不到就先枚举用户检查端点是否私有、是否包含任何 ID 类参数把参数值改成其他用户的值观察是否影响对方账户完成——确认了信息泄露或越权写操作即可整理报告。补充一点侦查经验你可以通过删除或编辑其他对象时观察请求里携带的参数名来反推哪些参数值得在目标接口上尝试原文档中称之为 Pro tip。五、绕过对象级授权完整手法清单这是 IDOR/IDOR-Old.md 的核心章节。以下手法按参数层面 → 类型层面 → 路径/方法层面 → 自动化组织全部来自原文档并补充了原理说明。5.1 向端点附加参数Add parameters onto the endpoints有些接口本身不带 ID 参数但它内部依赖隐式身份。尝试往请求上塞一个 ID 参数可能会让后端直接按你给的对象去取数GET /api_v1/messages -- 401 GET /api_v1/messages?user_idvictim_uuid -- 200从原理上看这类场景通常是访问控制检查与业务查询使用了不同的参数来源校验层只检查了路径中无 ID而业务层却从查询字符串中读取了user_id。5.2 HTTP 参数污染HPP对同一个参数提交多个值利用不同中间件/后端框架对重复参数处理不一致取第一个、取最后一个、或拼接全部的特性让校验用的是你的 ID业务用的却是受害者的 IDGET /api_v1/messages?user_idVICTIM_ID -- 401 Unauthorized GET /api_v1/messages?user_idATTACKER_IDuser_idVICTIM_ID -- 200 OK GET /api_v1/messages?user_idYOUR_USER_ID[]user_idANOTHER_USERS_ID[]第二种写法加[]是 PHP 风格数组参数的污染变体同样值得尝试。5.3 追加扩展名如果是 Ruby 构建的应用试试.json/user_data/2341 -- 401 Unauthorized /user_data/2341.json -- 200 OKRuby尤其 Rails应用中常见respond_to式的多格式响应机制不同格式可能走不同控制器分支而授权过滤器可能只挂在了默认格式上。遇到此类技术栈时尝试.json、.xml、.config等扩展名。5.4 测试过期的 API 版本Outdated API versions新版本修复了授权缺陷旧版本往往没有同步修复/v3/users_data/1234 -- 403 Forbidden /v1/users_data/1234 -- 200 OK版本号可以从 API 文档、JS 文件、历史接口或 Wayback 快照中收集。5.5 用数组包裹 IDWrap the ID with an array服务端对数组类型参数的校验可能与标量完全不同——例如授权代码做了id user.id的严格比较而数组形式走的是遍历/批量查询路径{id:111} -- 401 Unauthorized {id:[111]} -- 200 OK5.6 用 JSON 对象包裹 IDWrap the ID with a JSON object同理把 ID 再包一层对象可能触发框架的类型强制转换或不同的反序列化分支{id:111} -- 401 Unauthorized {id:{id:111}} -- 200 OK5.7 JSON 参数污染JSON Parameter Pollution在 JSON 请求体中重复提交同名键利用解析器后者覆盖前者或去重规则差异绕过校验POST /api/get_profile Content-Type: application/json {user_id:legit_id,user_id:victims_id}5.8 通配符 IDWildcard把 ID 换成*——罕见但确实存在实现疏忽导致它生效的案例GET /api/users/user_id/ → GET /api/users/*5.9 数字 ID 要成批量测试而不是靠猜如果确认是数字 ID务必通过大量数字批量验证Burp Intruder 设定 0-100000 区间跑一遍而不是手工猜几个值。补充提示规模化枚举时留意限速问题可参考仓库 Rate_limit/RateLimitBypass.md 中的方法如切换 HTTP 方法、叠加X-Forwarded-For等 IP 伪造头绕过频率限制。5.10 同级路径替换Path replacement如果端点叫/api/users/myinfo就检查是否存在/api/admins/myinfo。从源码结构推断这类命名模式通常意味着同一套处理逻辑在不同角色前缀下复用了控制器而部分前缀可能漏挂了鉴权。5.11 替换请求方法Replace the request method在 GET/POST/PUT/DELETE 之间切换。RESTful 服务中GET与POST/PUT/DELETE往往映射到完全不同的处理函数而访问控制可能只覆盖了其中一部分。例如尝试PUT /api/account?idyour_id向他人资料写入内容。5.12 使用 Burp 扩展 Autorize 做自动化校验手动替换会话 Cookie 逐个测接口效率太低原文档明确建议使用 Burp 扩展Autorize用低权限会话替换高权限会话后重放全部请求通过状态码对比自动标出越权可访问的接口。这是野外发现 IDOR 最主流的半自动化方案。5.13 交叉补充来自姊妹文档的额外测试维度IDOR/IDOR.md 为上述清单补充了几个同样值得纳入流程的变体切换 Content-Typeapplication/xml与application/json之间切换或尝试text/xml、text/x-json等冷门值。访问控制可能在不同内容类型的解析路径上实现不一致非数字 ID 换数字 ID数据库里同一对象往往存在多种引用方式用户名、UUID、数字主键而应用可能只对其中一种做了访问控制。例如usernameuser1 → username1234、account_id7541A92F-... → account_id5678关注新上线的功能例如某应用新推出慈善活动上传头像功能其 API/api/CharityEventFeb2021/user/pp/ID的访问控制往往不如核心功能严格——新功能是 IDOR 高发区。5.14 终极兜底如果以上都不生效原文档的原话是If none of these work, get creative and ask around!——发挥创造力并与其他猎手交流、请教。IDOR 的绕过思路是开放的社区里大量奇技淫巧都来自这种交流。六、自动化扩展让工具替你打工回归文档开头那句工具可以帮你做自动化层面主要有几条路线Autorize / PwnFox 组合用低权限 Session 自动重放高权限请求快速圈定越权接口原文档推荐的首选方案ParamalyzerBurp 扩展自动记忆你向某个 Host 提交过的所有参数名用于 5.1 节附加参数和参数名替换测试Arjun / Parameth自动探测隐藏参数。原文档 Tips 部分强调——想要高影响 IDOR务必用这类工具扫这些端点/settings/profile、/user/profile、/user/settings、/account/settings、/username、/profile以及一切支付相关端点这些位置往往藏着未暴露的user_id、account_id类参数Burp Intruder配合 5.9 节做数字 ID 批量枚举关注公开读写不一致的对象对公开可读但不应可写的对象务必测试 create/update/delete 操作——例如能否PUT /api/products修改商品价格。七、升级与链接Escalation / Chaining把小 IDOR 变成大漏洞低影响的 IDOR 单独提交往往严重性不高如只是改别人昵称但链式组合可以显著放大影响。原文档给出了两条明确的升级路线7.1 低影响 IDOR XSS 存储型 XSS假设你发现一个只能修改他人名字的低影响 IDOR。把 XSS 载荷填入改名请求中配合 IDOR 的能力把它写入受害者的资料受害者下次打开自己资料页时即触发存储型 XSS。单个 IDOR 与单个 XSS 可能都被评为 Low/Medium但组合后变成可窃取会话的高危存储型 XSS。7.2 需要 UUID 的 IDOR UUID 信息泄露 绕过限制有些 IDOR 端点要求 UUID 而非数字 ID导致你无法猜出目标值。此时寻找泄露 UUID 的信息披露端点如公开资料 API、导出接口、日志接口拿到受害者 UUID 后再回测 IDOR 端点即可打通整条链路。7.3 仓库内可顺藤摸瓜的配套方法论HowToHunt 仓库中与 IDOR 升级链高度相关的文档还包括Account_Takeovers_Methodologies/Account_Takeovers_Methods.md会话劫持、Token 泄露、认证绕过等手法IDOR 拿到越权后常与其中方法叠加实现账户接管EXIF_Geo_Data_Not_Stripped/exif_geo.md其中的报告案例即 IDOR 与地理信息泄露的组合见下节案例Rate_limit/RateLimitBypass.md批量枚举 ID 时规避限速。7.4 兜底升级路线同样以原文档的结语收尾如果这些都行不通发挥创造力多与人交流。八、实战案例参考来自原文档收录的已确认报告IDOR/IDOR-Old.md 收录了一批已公开披露的 IDOR 实战报告原文档给出的是 Hackerone 报告链接此处仅保留标题以说明真实世界中的漏洞形态与影响范围IDOR 删除其他商店的图片IDOR 修改共享文件名用户上传的作品集文件在删除后仍可被任何用户访问订单中的 IDOR 与统计数据泄露IDOR 导致可替他人下单/预订/购买涉及他人信用卡未经授权使用IDOR 允许访问任何用户的支付数据IDOR 允许提取所有注册邮箱IDOR 泄露设备/许可证信息load-reports/profileIDOR 查看他人无权访问的隐藏投票IDOR 更新用户偏好设置IDOR 上传个人资料功能IDOR 查看用户订单信息IDOR 与图片 EXIF 地理定位数据未剥离的组合对应仓库 EXIF_Geo_Data_Not_Stripped/exif_geo.md替换收件箱消息中的他人文件。这些案例覆盖了读数据、改数据、删数据、上传/替换文件四类典型越权可作为你构造 PoC 与撰写报告时的参考模板。九、总结一套可复用的 IDOR 猎洞流程将全文浓缩为可执行清单侦查确定授权载体JWT/Key/Cookie/Token通读 API 文档梳理 ID 格式与角色模型三问每个接收对象 ID 的端点回答私有吗哪些是我的有哪些角色绕过依次尝试附加参数 → HPP → 扩展名 → 旧版本 → 数组/对象包裹 → JSON 污染 → 通配符 → 批量数字 → 同级路径 → 换方法 → Autorize 自动化升级组合 XSS 变存储型、借助信息泄露端点补齐 UUID、参考账户接管方法论放大影响报告参考已披露案例的表述方式说明对象、手法、影响与修复建议服务端应基于会话中的授权身份做对象归属校验而非信任客户端传入的 ID。作者与贡献本篇所依据的原文档由社区成员harsha0x01与klaus撰写姊妹文档 IDOR/IDOR.md 由KathanP19撰写文中方法论与案例来自公开社区分享。仓库的完整文档目录见 SUMMARY.mdIDOR 专题被收录在 IDOR 分类下可直接通过 GitBook 或仓库路径查阅原文。赞分享网络安全应用安全【免费下载链接】HowToHuntCollection of methodology and test case for various web vulnerabilities.项目地址https://gitcode.com/gh_mirrors/ho/HowToHunt点击查看免费下载相关推荐Strix BFLA 深度测试指南功能级授权绕过Broken Function Level Authorization的探测与验证Strix BFLA 深度测试指南功能级授权绕过Broken Function Level Authorization的探测与验证 导读 broken f网络安全人工智能AI Agent渗透测试应用安全红蓝对抗CLIPayloadsAllTheThings 实战指南Insecure Direct Object ReferencesIDOR越权漏洞测试方法论与绕过技巧PayloadsAllTheThings 实战指南Insecure Direct Object ReferencesIDOR越权漏洞测试方法论与绕过技巧网络安全应用安全渗透测试Strix IDOR 技能全解对象级授权失效IDOR/BOLA的渗透测试方法与自动化扫描实践Strix IDOR 技能全解对象级授权失效IDOR/BOLA的渗透测试方法与自动化扫描实践 对象级授权失效IDORInsecure Direct O网络安全人工智能AI Agent渗透测试应用安全红蓝对抗CLI上一篇OpenZeppelin Contracts 5.x 安全智能合约开发库安装、使用与安全模型全解析下一篇React 组件无障碍a11y模式实战指南ARIA、键盘导航与焦点管理全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表