专栏首页卓文见识越权漏洞(e.g. IDOR)挖掘技巧及实战案例全汇总

越权漏洞(e.g. IDOR)挖掘技巧及实战案例全汇总

1、漏洞理解

Insecure Direct Object reference (IDOR)不安全的直接对象引用,基于用户提供的输入对象直接访问,而未进行鉴权,这个漏洞在国内被称作越权漏洞。

IDOR其实在越权(Broken Access Control)漏洞的范畴之内,严格来说越权的含义更广一些。它可以说是逻辑漏洞,也可以说是一个访问控制问题,细分的话可以将其分为URL层访问控制和数据层访问控制。

2、挖掘技巧

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等漏洞将低危漏洞升级为高危漏洞。

3、实战案例

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,其他的评论将会出现在你的视频下。

4、防护手段:

任何一个端点/接口/请求都应该进行鉴权操作,有效的验证机制为将参数中的每个关键id都和当前登录用户身份及权限进行校验,即使是系统已有相关鉴权操作,也很容易遗漏某些细节。

本文分享自微信公众号 - 卓文见识(zhuowenjianshi),作者:Jayway

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java代码审计汇总系列(一)——SQL注入

    相比黑盒渗透的漏洞挖掘方式,代码审计具有更高的可靠性和针对性,更多的是依靠对代码、架构的理解;使用的审计工具一般选择Eclipse或IDEA;审计工作过程主要...

    Jayway
  • 参数污染漏洞(HPP)挖掘技巧及实战案例全汇总

    HTTP参数污染,也叫HPP(HTTP Parameter Pollution)。简单地讲就是给一个参数赋上两个或两个以上的值,由于现行的HTTP标准没有提及在...

    Jayway
  • Java代码审计汇总系列(七)——XSS

    xss漏洞是指对于和后端有交互的地方没有做参数的接收和输入输出过滤,导致恶意攻击者可以插入一些恶意的js语句来获取应用的敏感信息,黑盒系列可见:浏览器解析...

    Jayway
  • spring3+mbatis3开发实例

    最近一直在深入了解struts2,spring,hibernate以及mybatis框架,通过查看这些框架的源码和官方文档,发现自己对于这些框架的原理,使用有了...

    py3study
  • 分布式系统中生成全局ID的总结与思考

    世间万物,都有自己唯一的标识,比如人,每个人都有自己的指纹(白夜追凶给我科普的,同卵双胞胎DNA一样,但指纹不一样)。又如中国人,每个中国人有自己的身份证。对于...

    用户1263954
  • 那些可以绕过WAF的各种特性

    在攻防实战中,往往需要掌握一些特性,比如服务器、数据库、应用层、WAF层等,以便我们更灵活地去构造Payload,从而可以和各种WAF进行对抗,甚至绕过安全防御...

    Bypass
  • 获取jqGrid中选择的行的数据

    var id=$(‘#gridTable’).jqGrid(‘getGridParam’,'selrow’);

    ydymz
  • myBatis实例

    用户1112962
  • 记一次mysql优化

    今天在技术经理的现场优化中,把一条需要40000ms的sql语句优化到9ms左右,将近提高4500多倍的速度

    botkenni
  • THINKPHP 中关联查询(多表查询)

    THINKPHP 中关联查询(多表查询)可以使用 table() 方法或和join方法,请看示例:

    公众号php_pachong

扫码关注云+社区

领取腾讯云代金券