找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

377

积分

0

好友

51

主题
发表于 3 天前 | 查看: 4| 回复: 0

在Web应用安全测试中,不安全的直接对象引用 是一个常见但容易被低估的漏洞。除了常规的ID递增测试外,攻击者和安全研究员在实践中也发现了一些新颖的绕过思路,这些思路往往针对后端验证逻辑的特定实现缺陷。本文将介绍四种实战中易被忽略的IDOR检测技巧。

1. 前导零绕过

原理:部分后端系统在校验资源ID时,会先将参数字符串转换为数字类型,或在进行比对时忽略前导零,导致0099被视为同一个ID。 示例: 假设攻击者的用户ID为10,正常情况下只能访问 /api/users/10。直接尝试访问 /api/users/9 会被拒绝。然而,尝试访问以下路径可能成功:

GET /api/users/009

某些后端语言(如PHP、Python)在类型转换时会将字符串 "009" 解析为整数 9。如果权限验证环节使用了转换后的值进行判断,而数据查询环节使用了原始字符串或进行了不同的处理,就可能绕过验证,泄露用户9的信息。

2. URL编码空格绕过

原理:部分系统未能正确处理URL编码,或在对请求路径进行验证时,未对%20(空格的URL编码)进行规范化处理,导致其被忽略。 示例

GET /api/users/9%20

如果后端权限验证逻辑没有对路径进行严格的解码和匹配,可能会将 "9%20" 错误地解析或匹配为 "9",从而绕过访问控制,成功获取目标数据。

3. 类型混淆绕过

原理:当API的验证逻辑与数据处理逻辑存在类型不一致时,可能产生漏洞。例如,权限校验使用字符串比对,而数据库查询使用整数ID,在弱类型比较下可能被绕过。 示例

GET /api/users/"9"

在某些弱类型语言(如PHP、JavaScript)中,使用==进行比较时,字符串 "9" 与整数 9 会被判定为相等(true)。如果验证环节采用了这种宽松比较,而后续环节类型严格,则可能造成权限绕过。

4. 十六进制或哈希值绕过

原理:后端可能接受资源的十六进制表示形式或哈希值(如MD5、SHA1)作为查询参数,但未将传入的替代ID与当前用户身份进行绑定校验。 示例: 正常请求:

GET /api/users/123

绕过尝试:

GET /api/users/0x7B        # 十六进制表示123(0x7B = 7*16+11=123)
GET /api/users/202cb962ac59075b964b07152d234b70 # 123的MD5哈希值

如果后端接收到这些参数后,仅仅将其解码或还原为原始ID 123,然后直接查询数据库,而没有再次校验当前登录用户是否有权访问ID为123的资源,就会导致越权信息泄露。这提醒开发者在涉及资源访问时,必须进行严格的权限验证,这是安全开发的核心实践之一。

总结与防御建议

以上几种思路的核心,均在于后端对用户输入的处理逻辑不一致验证不充分。要有效防御此类IDOR漏洞,开发者应在整个请求处理链路中保持一致的资源标识符处理方式,并在数据访问层实施基于会话或令牌的强制权限检查,而非仅仅依赖前端传入的ID值。对于安全测试人员而言,在测试Web安全漏洞时,应拓宽测试边界,尝试多种参数变形和编码方式,以发现更深层的逻辑缺陷。




上一篇:Anthropic 收购 Bun:AI 如何重塑 JavaScript 运行时与开发体验
下一篇:Python大模型入门实践:从零代码到数据分析与提示工程
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-7 01:44 , Processed in 0.071900 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表