Insecure Direct Object reference (IDOR)不安全的直接对象引用,基于用户提供的输入对象直接访问,而未进行鉴权,这个漏洞在国内被称作越权漏洞。
IDOR其实在越权(Broken Access Control)漏洞的范畴之内,严格来说越权的含义更广一些。它可以说是逻辑漏洞,也可以说是一个访问控制问题,细分的话可以将其分为URL层访问控制和数据层访问控制。
1)关注功能
检查任何涉及的敏感ID功能处替换:包括普通的增删改查、上传、共享及密码重置,密码更改,帐户恢复等处的id值,不同功能处影响也不一样:
P1 - 账户接管,访问非常重要的数据(如信用卡)
P2 - 更改/删除其他用户的公共数据,访问私人/公共重要数据(如门票,发票,付款信息)
P3 - 访问/删除/更改私人数据(有限的个人信息:姓名,地址等)
P4 - 访问任何不重要的数据
2)漏洞分类
a、简单:直接标识符
关注“id”,“user_id”,“value”,“pid”,“post_id”等参数处、目录处,关注任何场景每一个可能决定用户权限的参数值。通过加和减1提交整数值,看是否可以看到本不该看到的数据,若返回403拒绝访问很可能说明没有漏洞。
b、复杂:随机标识符
遇到某些参数使用哈希值(如UUIDs),可以尝试解码编码值,或寻找参数值泄露(特定返回包或页面源代码), 测试时通常创建两个账号并替换参数值,查看是否可以操作成功,若参数过多可使用comparer模块筛选处不同参数:
3)越权访问:
广义上讲,越权就是“看到当前用户本不该看到的数据,执行本不该执行的操作”。
用户间越权:
比较管理员和普通用户、用户之间存在权限差异处,包括:
1、 GET:抓取对目录及类名的请求(URL层)
2、 POST:关注任何请求/API,具体的方法(数据层)
单用户内部越权:
1、 灰化按钮,审查元素绕过前端检验
2、 单业务处上下条数据之间是否存在权限差异(编辑/查看)
3、 多业务是否公用方法可以篡改权限或数据
4)更多
结合HPP(传送门),self-xss等漏洞将低危漏洞升级为高危漏洞。
1)微软找回密码IDOR
微软招聘网站通过邮箱找回密码处,ID未进行用户权限校验,导致通过提交攻击者邮箱和遍历id方式重置任意用户密码。
2)雅虎任意评论删除
雅虎评论删除url地址为:
https://tv.yahoo.com/_xhr/contentcomments/delete_comment/
参数为:
comment_id=139967299182-588b2cdd&content_id=485d5605ea9&crumb=DcUNKWnp7%2F8
其中comment_id代表不同用户的id,使用另一个账户victim登录并评论,抓取comment_id并替换,返回200的json数据:
但再次尝试其他评论时,却返回401鉴权失败:
经过反复测试,发现只有攻击者是第一个评论者时才能删除后面的任意评论,开发者遗漏了对第一个评论者的鉴权验证。
3)Twitter信用卡删除IDOR
Twitter支付方法页面中信用卡的删除功能,URL如下:
https://ads.twitter.com/accounts/[account id]/payment_methods
进行删除操作时会发送ajax的post请求为:
请求报文只有两个参数,重点是了解参数代表的含义:account指Twitter账户id,id指绑定的信用卡id,同样的操作,登录另一个Twitter账户获取账户id和绑定的信用卡id,进行替换,页面响应是“403 forbbiden”,但实际卡已经删除。
类似的还有YouTube的任意评论移动漏洞,价值3k美元,漏洞发生在其他人在你的视频下评论,点击查看:
请求数据包为:
需关注的参数是comment和video,含义较明显,依旧尝试替换id,如果将VIDEO_ID更改为任何其他视频ID,会出现错误;但如果保持VIDEO_ID不变只改变COMMENT_ID,其他的评论将会出现在你的视频下。
任何一个端点/接口/请求都应该进行鉴权操作,有效的验证机制为将参数中的每个关键id都和当前登录用户身份及权限进行校验,即使是系统已有相关鉴权操作,也很容易遗漏某些细节。