前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IDOR漏洞

IDOR漏洞

作者头像
安恒网络空间安全讲武堂
发布2019-09-29 14:26:41
3.1K0
发布2019-09-29 14:26:41
举报

什么是Web/移动应用程序的授权?

Web/移动应用程序的会话管理对终端用户非常重要。会话管理包括两个重要部分,即认证和授权。认证部分是“我是谁?”问题的答案,授权部分是“我能做什么?”问题的答案。

简而言之,我们会观察Linux操作系统中write,read和execute文件权限的授权阶段。如果用户想要编写文件,则必须授予用户“w”权限,若使用不当,则存在一些隐私侵权行为。

什么是IDOR漏洞?

应用程序中可能有许多变量,例如“id”,“pid”,“uid”。虽然这些值通常被视为HTTP参数,但它们可以在header和cookie中被找到。攻击者可以通过更改这些变量的值来访问,编辑或删除任何其他用户的对象。此漏洞称为IDOR(不安全的直接对象引用)。

首先,它需要了解软件开发人员开发的应用程序流程。当已登录的用户进入Web/移动应用程序时,需要了解所有模块功能及其子模块功能。同样重要的是要记住,此漏洞与安全测试中的XSS,CSRF一样严重,并且是一种通过自动化测试或手动测试检测不易发现的漏洞。

下图说明了存在于用户和服务器之间的IDOR漏洞。

在本文中,将讨论以下主题:

  • 如何找到可以找到IDOR漏洞的注入点?
  • 一些IDOR漏洞提示似乎非常简单,也是我们遇到的最佳体验。
  • 在测试IDOR漏洞时要考虑的注意事项。
  • 如何提供基本授权控制?

有效且快速的IDOR漏洞测试

您可以使用浏览器的秘密选项快速地实验测试IDOR漏洞。因此,当您将常规选项用作普通用户时,可以将秘密选项用作攻击者,这将确保您不会注销。

您可以使用Burp Suite的HTTP历史记录选项检查所有请求。HTTP历史记录功能显示设备(浏览器,电话,平板电脑)和应用程序服务器之间的所有流量。此外,您可以使用Burp Suite的范围功能进行快速测试。因为范围功能对于创建目标列表非常有用,并且范围功能允许仅显示测试范围的相关数据。

例如, 我们测试的公司“Bugcrowd”,在范围页面上范围仅以“bugcrowd.com”的形式给出。在这种情况下,您可以通过右键单击请求来添加相关范围。

您可以根据给定的范围编辑此添加的范围值,如下所示。

最后,您应该通过选择“仅显示范围内项目”在HTTP历史记录选项中执行以下过滤。

这些将帮助您更好地理解应用程序中的readonly,normal,super等角色。

捕获所有请求

当IDOR漏洞测试时,基本上,你需要执行Web/移动应用程序应创建的所有请求。因为如果你在应用程序中更改了某些内容,则可以使用此案例创建其他请求。如果你有应用程序的所有API请求,如WSDL文件,Swagger页面等,并且它定期工作,那么你很幸运,你可以使用它,它将为你提供IDOR测试的便利。

在私有程序中遇到一个例子。在移动应用程序中购买时会添加信用卡。在测试请求之后,可以认为没有任何漏洞。但是,当进行第二次购买时,会看到信用卡选择屏幕,此时IDOR漏洞就出现了。当你在此处选择信用卡时,应用程序将在请求中将信用卡ID发送到服务器,并且该请求提供通路访问其他用户的信用卡数据来更改该信用卡ID。

在另一个私有程序中,Web应用程序包括一个应用内消息传递系统。用户可以向其他用户发送消息并将其他用户添加到自己的消息中。当用户尝试访问自己的消息之一时,请求转到“/messages/5955”并且自己的消息ID似乎是“5955”。同样,当通过向“/messages/5955”发出请求来尝试访问另一个用户的消息时,将不会访问该消息。当用户想要将另一个用户添加到自己的消息时,会出现如下所示的请求。

POST /messages/5955/invite HTTP/1.1Host: example.comUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Firefox/52.0Accept: */*X-Requested-With: XMLHttpRequestCookie: my_cookiesConnection: closeuser=testaccount2

当检查此请求时,用户可以将自己添加到其他用户的消息并访问其所有消息。

此外,必须充分了解应用程序中的角色,以便识别IDOR漏洞。如果你知道角色应该做什么或不应该做什么,那么在弱点检测阶段它将非常有用。所以首先,你应该深入了解应用程序!

如何找到注射点

如前所述,您可以使用应用程序的所有功能找到许多IDOR漏洞测试请求。在IDOR漏洞测试中未提供API端点时,.html源代码或.js文件会很有用。这些文件通常包含有趣的东西和ajax请求,你可以使用这些文件中提出的请求执行IDOR漏洞测试。这可以是应用程序早先提出的请求,也可能是将来可能的请求。

如果幸运的话,你只能看到授权的管理员用户在javascript文件中看到的请求。因此,源代码,特别是javascript文件应该好好地进行分析。

此外,你可以在“archive.org”上搜索Web应用程序的旧版本,或许可以在旧的javascript文件中找到有用的请求,或者你也可以使用dorks搜索搜索引擎中的请求。

在某些情况下,id值不是唯一的,如1,2,3,100,1000等,这些id值可以是编码或散列值。如果你面对编码值,则可以通过解码编码值来测试IDOR漏洞。如果你面对散列值,则应测试散列值是可访问值还是可预测值。在另一种情况下,您可以在“Referrer”标头中访问散列值,因此这些脚本是被可以复制的。

例如,你无法访问其他用户的对象,但你可以在对象页面的源代码中找到对象的散列ID值,你可以在受害者用户的应用消息中找到对象的散列id值(这将减少bug的影响)。因此,您可以创建2个测试帐户作为X和Y,然后在Burp历史记录中的Y请求中尝试X的散列id值。

如果我们触及另一个主题,某些应用程序的请求可能会吓到你。例如,包含多个参数的SmartSheet请求似乎过于复杂。

如果你想在此请求中找到注入点,可以使用Burp Suite的比较工具。你需要右键单击该请求,选择“发送到Comparer”选项。然后,你可以创建使用另一个对象的相同请求并发送到比较工具。

当你访问比较工具并单击“单词”按钮时,你将看到一个窗口,其中包含更改点。

你可以对HTTP响应使用相同的方法来可以检查它们的差异。

IDOR错误的有趣案例

处理创建请求

某些应用程序在客户端创建一个id,然后将in create请求发送到服务器。该id值可以是诸如“-1”,“0”或任何其他的数字。现有的id值随先前创建的对象的id而变化。因此,你可以使用IDOR漏洞删除或编辑其他用户的对象。

如果你在创建对象时没有看到“id”,“user_id”,“value”,“pid”,“post_id”等参数,则应添加并自行测试。你可以通过删除或编辑应用程序上的任何对象来查找参数关键名称。

盲目的IDOR

在另一种情况下,你可以找到一个IDOR漏洞,但你可能无法实现这一点。例如,如果你在应用程序中更改对象的信息,你将收到包含对象信息的电子邮件。因此,如果你尝试更改另一个用户的对象信息,则无法访问HTTP响应中的任何内容,但你可以使用电子邮件访问对象的信息。 你可以将其称之为“Blind IDOR”。

结合他们

IDOR错误的影响是可变的,我们会触及这一点。在某些情况下,IDOR漏洞可以通过触发无法利用的其他漏洞来帮助你。如果你发现一个不重要的IDOR漏洞,例如编辑用户非公开和不重要的文件名,并且你想提高您的bug的影响,你可以使用self-XSS漏洞。你在Web应用程序测试时发现的self-XSS漏洞通常是超出范围并未获得奖励的。但是,你可以将self-XSS漏洞与另一个IDOR漏洞结合使用,并且可以将报告提交为“IDOR + Stored XSS”。通过这种方式,你可以实现P2级别的漏洞。

关键的IDOR

IDOR漏洞允许我们在某个时间访问帐户,而不是编辑或删除帐户。这些严重错误出现在密码重置,密码更改,帐户恢复等方面。首先,你应该仔细检查电子邮件中的链接及其中的参数。然后,你可以捕获密码重置请求并使用任何代理工具检查参数。我们已经多次看到这些请求中的“用户ID”值,并且我们可以轻松地接管到另一个用户的帐户。

同时,在请求中发送的标头值占用帐户是一件很重要的事情。可以看出,测试和调试环境中的某些标题值(例如“X-User-ID”,“X-UID”)已更改。这样用户就可以像任何用户一样行事,并且能够成功地进行帐户接管。

HPP漏洞

在极少数情况下,你可以通过在请求中再次添加相同参数来测试IDOR测试的HPP(HTTP参数污染)漏洞。例如:https://www.youtube.com/watch?v=kIVefiDrWUw

创建有效请求

你应该确保发送到服务器的请求是正确的。如果你尝试向其他用户发送用户请求,则必须确保此请求的“CSRF-Token”值有效。因此,你应该将其他用户的“CSRF-Token”放入请求中。否则,由于令牌值不匹配,你将收到错误。这可能会使你被误导。

同样,如果您的测试请求是XHR(XML HTTP请求),则必须检查请求中“Content-Type”标头参数的验证。此外,应用程序的请求可能有自定义标头,如“W-User-Id”,“X-User-Id”,“User-Token”等。如果你想进行正确且完美的测试,则必须发送所有应用中使用的标头都是正确的。

有用的工具

如前所述,你可以使用Burp Suite功能。此外,你可以使用Burp Suite插件进行IDOR漏洞测试,例如“Authz”,“AuthMatrix”和“Authorize”。

Authz插件用于查看对其他用户的请求的响应。因此,你可以将X用户的请求发送给Authz,并尝试以Y用户身份访问它的响应。 此外,你可以为测试IDOR漏洞添加自定义标头,例如“X-CSRF-Token”。你可以从BApp商店或此地址获取。

AuthMatrix插件允许你通过在应用程序中为角色注册cookie值或header值来执行授权检查。你可以从BApp商店获取它,如果你想了解更多关于这个插件的信息,请转到此处。

如果你有API请求,可以使用Wsdler插件用于Burp Suite,SoapUI,Postman等。你可以使用这些工具尝试所有GET,POST,PUT,DELETE,PATCH请求和成功以及快速的API测试。

IDOR漏洞的影响

IDOR漏洞在Bugcrowd VRT中似乎是“依赖于影响的变种 ”,因为它们的影响完全取决于您提交的错误。

但是我们根据经验创建了以下一份关于IDOR漏洞影响的列表。

P1 - 账户接管,访问非常重要的数据(如信用卡)

P2 - 更改或删除其他用户的公共数据,访问私人或公共重要数据(如门票,发票,付款信息)

P3 - 访问或删除或更改私人数据(有限的个人信息:姓名,地址等)

P4 - 访问任何不重要的数据

IDOR漏洞的影响取决于项目经理的慎重与否。

如何预防IDOR漏洞?

首先,你应该在创建应用程序时控制所有正常,ajax和API请求。例如,只读用户可以在应用程序中写任何内容吗?或者非管理员用户可以访问并创建仅由admin用户创建的API令牌吗?因此,对于所有IDOR漏洞的测试,你都应该像黑客一样思考。

你可以为所有端点提供应用程序的权限。如果您的“privatesection”端点包含API请求,例如“/api/privatesection/admins”,“/api/privatesection/console”,“/api/privatesection/tokens”,则可以阻止非管理员用户的端点。

此外,为了使攻击者的工作更加困难甚至有时甚至可以防止它,您可以使用散列函数并使用散列值而不是正常数字或字符串。

原文链接:https://www.bugcrowd.com/how-to-find-idor-insecure-direct-object-reference-vulnerabilities-for-large-bounty-rewards/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 恒星EDU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Web/移动应用程序的授权?
  • 什么是IDOR漏洞?
  • 有效且快速的IDOR漏洞测试
  • 捕获所有请求
  • 如何找到注射点
  • IDOR错误的有趣案例
    • 处理创建请求
      • 盲目的IDOR
        • 结合他们
          • 关键的IDOR
            • HPP漏洞
            • 创建有效请求
            • 有用的工具
            • IDOR漏洞的影响
            • 如何预防IDOR漏洞?
            相关产品与服务
            手游安全测试
            手游安全测试(Security Radar,SR)为企业提供私密的安全测试服务,通过主动挖掘游戏业务安全漏洞(如钻石盗刷、服务器宕机、无敌秒杀等40多种漏洞),提前暴露游戏潜在安全风险,提供解决方案及时修复,最大程度降低事后外挂危害与外挂打击成本。该服务为腾讯游戏开放的手游安全漏洞挖掘技术,杜绝游戏外挂损失。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档