📜  不安全的直接对象引用 (IDOR) 漏洞

📅  最后修改于: 2022-05-13 01:56:54.375000             🧑  作者: Mango

不安全的直接对象引用 (IDOR) 漏洞

OWASP 前 10 名中列出的最关键的漏洞之一是不安全的直接对象引用漏洞 (IDOR Vulnerability)。在本文中,我们将讨论 IDOR 漏洞。在继续之前,让我们首先讨论身份验证。身份验证意味着验证一个人的身份,并在用户通过身份验证(验证)的情况下允许该人访问特定请求。但是,如果用户未通过身份验证并且可以查看文件,即以黑客/攻击者的错误方式打开文件?这称为损坏的身份验证。本文将重点介绍攻击者使用可能导致 IDOR 的损坏的身份验证漏洞的方式。

什么是 IDOR 漏洞?
在 Web 应用程序中,每当用户生成、发送或接收来自服务器的请求时,都会有一些 HTTP 参数,例如“id”、“uid”、“pid”等,这些参数具有为用户分配的一些唯一值。攻击者可以在 cookie、标头或 wifi 数据包捕获中看到此类参数值。通过这个,攻击者可能能够篡改这些值,并且这种篡改可能导致 IDOR。

一些演示可以使用 IDOR 操作的不受信任数据的示例:

  • www.xyz.com/myaccount/uid=12
  • www.xyz.com/myaccount/uid=14
  • www.xyz.com/myaccount/uid=15
  • www.xyz.com/myaccount/uid=19

在这里我们可以看到 URL 中的 uid 似乎很容易受到攻击,可以被攻击者篡改以破坏身份验证。

IDOR 漏洞如何执行?
让我们首先讨论使用 SQL 中未经身份验证的介质的 Web 应用程序的后端工作,这会导致访问用户帐户信息。

String query = "SELECT * FROM accts WHERE account = ?";
PreparedStatement pstmt = connection.prepareStatement(query, ... );
pstmt.setString(1, request.getParameter("acct"));
ResultSet results = pstmt.executeQuery( );

在上面的代码中,攻击者会修改Web应用程序中的“accts”参数,并可以输入多个帐号来检索信息。

执行 IDOR 攻击的步骤:
Burp Suite 工具被攻击者广泛用于执行此类攻击。以下是正在执行的步骤:

  • 捕获请求:首先,攻击者将确定他想要对其执行 IDOR 攻击的目标网站。然后将网站添加到作用域并爬取网站以获取其中包含特定参数的所有 URL。
  • 过滤参数请求:在第一步之后,我们将使用参数过滤器过滤我们捕获的请求。攻击者只会选择他们可以执行攻击的参数或注入点。
  • 将请求转发到中继器:现在,如果攻击者找到一些可以执行 IDOR 的注入点,他们会将请求转发到中继器。易受攻击的 URL 可能如下所示: www.xyz.com/myaccount/uid=19 。这里的“UID”似乎很脆弱。
  • 参数篡改:现在由于攻击者拥有易受攻击的注入点,他们现在将尝试借助社会工程或注入点中所写的模式来执行 IDOR 攻击。示例:攻击者可能将 uid 从 19 更改为 20,这将打开另一个被分配 id 号为 20 的用户的帐户。

IDOR 漏洞的影响:

  • 机密信息泄露:当攻击者通过此漏洞控制您的帐户时,很明显攻击者将能够接触到您的个人信息。
  • 身份验证绕过:由于攻击者可以通过此漏洞访问数百万个帐户,这将是一种身份验证绕过机制。
  • 数据更改:攻击者可能有权访问您的数据并对其进行更改。通过这种方式,攻击者可能有权更改您的数据,这可能导致对记录的操纵。
  • 帐户接管:虽然攻击者可能仅通过更改“UID”值就可以对用户帐户进行多次访问,但这将导致帐户接管漏洞。当一个漏洞导致另一个漏洞(如本例中)时,它被称为 BUGS 链接。

IDOR漏洞修复:

  • 开发人员应避免显示私有对象引用,例如键或文件名。
  • 应正确实施参数验证。
  • 应完成所有引用对象的验证。
  • 令牌的生成方式应该只映射到用户而不应该是公开的。