IDOR漏洞

什么是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/

本文分享自微信公众号 - 安恒网络空间安全讲武堂(cyberslab)

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

原始发表时间:2019-03-22

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

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券