使用Autorize工具发现访问控制漏洞

本文详细介绍了如何使用Autorize工具检测Web应用中的访问控制漏洞,包括垂直和水平权限漏洞的识别方法,以及通过OWASP Juice Shop实例演示漏洞挖掘过程。

使用Autorize发现访问控制漏洞

在最新的OWASP Top 10中,失效的访问控制从第五位跃升至第一位。OWASP将访问控制定义为“执行策略,使用户不能在其预期权限之外进行操作”。因此,当我们在Web应用中发现自己能够以当前权限执行本不允许的操作时,就发现了访问控制漏洞。除了常见之外,访问控制漏洞在利用时通常具有高影响。

访问控制漏洞可以以多种方式表现。目前,我们将重点放在野外最常见的两种类型:垂直访问控制漏洞和水平访问控制漏洞。垂直访问控制漏洞发生在应用具有不同权限级别但未能正确跨这些权限级别执行访问控制时。例如,一个同时拥有普通用户和更高权限管理用户的应用应限制普通用户执行保留给管理用户的操作。如果应用未能阻止普通用户执行这些特权管理操作,那么这就是一个垂直访问控制漏洞。水平访问控制漏洞发生在用户具有相等权限但被限制访问/操作子集时。例如,一个允许患者登录并查看个人医疗信息的自助医疗应用应限制用户访问其他患者的数据。

在我们深入使用Autorize寻找访问控制漏洞之前,先进行一些设置。我们需要能够同时从多个认证上下文与目标应用交互,因此需要能够同时以不同用户账户登录应用。我首选的方法是使用–no-remote–p标志运行Firefox。

–no-remote标志告诉Firefox启动一个新实例,不与任何其他现有实例通信。-p标志告诉Firefox允许您选择配置文件。

我为渗透测试Web应用创建了两个配置文件:“Primary”和“Secondary”。这些配置文件定制了有用的扩展、用于高质量截图的UI修改,以及一些配置(由Brian“BB”King提供),这些配置减少了Firefox通常产生的一些背景噪音。一旦我们启动了两个具有不同配置文件的独立Firefox实例,并将它们配置为通过Burp Suite代理请求,我们就可以启动Burp Suite并配置Autorize。

要安装Autorize,您需要在Burp Suite顶部选择“Extensions”选项卡,然后选择“BApp Store”选项卡,向下滚动到Autorize扩展,并点击“Install”按钮。幸运的是,不需要Burp Suite Pro,Autorize可以与Burp的免费社区版一起使用。

如果您没有使用其他利用Python的Burp Suite扩展,您可能会看到一条消息,指示您需要下载并配置Jython。要安装扩展,您需要下载Jython独立JAR文件。下载Jython独立JAR后,您需要通过打开“Extensions settings”界面在Burp Suite中配置其位置。

打开扩展设置界面后,浏览到“Python environment”部分,并配置Jython独立JAR的位置。

一旦您将Burp Suite指向Jython独立JAR,您应该能够安装Autorize。

接下来,我在测试主机上启动了OWASP故意易受攻击的Juice Shop应用实例,并在两个Web浏览器中浏览它。

为了测试不同上下文中的访问控制,我们必须首先确定应用如何管理会话并控制对特权请求的访问。我喜欢从使用测试凭据认证到应用并观察应用响应开始。通常,应用会在成功认证请求后发出会话令牌。这些值可以设置为cookie或在响应体中。通常,会返回多个值。首先,我浏览到Juice Shop应用的登录页面,并使用管理员凭据进行认证。

剧透警告! 如果您想自己跟随操作,这些是我们在本文中将使用的相应Juice Shop账户的凭据:

用户名:[email protected] 密码:admin123 用户名:[email protected] 密码:Mr. N00dles

打开登录页面 输入凭据并认证

一旦认证,我们将在Burp Suite中查看应用的响应。在Juice Shop的情况下,应用没有设置任何cookie,但它返回了JSON内容。这部分JSON内容是一个名为“token”的属性,其值看起来像一个JSON Web Token(JWT)。

我们不会在本文中深入探讨JWT,但BB King有一个优秀的网络广播,如果您想了解更多关于它们如何工作的信息。这里的重点是,这个JWT值是响应中唯一看起来可能用于会话管理和访问控制的东西,所以让我们继续。接下来我们要做的是通过使用我们新认证的会话发出特权请求来确认这个值用于会话管理。什么构成特权请求因应用而异,但修改认证用户自己账户的能力通常是一个安全的选择。所以,接下来我将导航到认证用户的账户设置并上传一个新的个人资料图片。

浏览到认证用户的账户 上传新的个人资料图片 个人资料图片已上传

当我们在Burp Suite中检查上传请求时,我们可以看到它包含了我们的JWT以及一些其他cookie。

特权请求和响应

接下来,我们将此请求发送到Burp Suite的Repeater,以确切识别哪些cookie是成功发出特权请求所必需的。首先,重放请求以确保它按预期成功。接下来,我喜欢移除所有cookie以了解失败请求的样子。对于Juice Shop,我们可以看到应用响应HTTP 500内部服务器错误,并在正文中显示消息指示“非法活动”被阻止。

cookie已移除 – 请求失败

接下来,我们可以重放原始请求,逐个移除cookie,直到只剩下请求成功所需的令牌。对于提交大量额外cookie的应用,您可以使用Request Minimizer扩展来帮助修剪内容。如您所料,只有我们的“token”JWT是必需的。

最小成功特权请求

现在我们终于准备好开始使用Autorize测试访问控制了。我们将在第二个浏览器中以低权限[email protected]账户登录Juice Shop。一旦认证,我们将将此账户会话的JWT粘贴到Autorize配置界面并启用Autorize。

配置和启用Autorize

接下来,我们只需要使用高权限账户浏览应用。对于在高权限账户浏览器中发出的每个请求,Autorize将发出两个额外的请求。其中一个请求将使用我们低权限账户的会话令牌,第二个请求将在未认证上下文中发出。Autorize比较每个请求的响应,并尝试确定访问控制是否已正确执行。结果显示在Autorize选项卡左侧的表格中。

Autorize结果表格

查看Autorize结果,我们可以看到给定请求的三种结果类别:

  • 已执行! – Autorize认为此请求的访问控制已正确执行。
  • 已绕过! – Autorize认为此请求的访问控制未正确执行。
  • 是否执行??? – 请求的响应与原始请求的响应不同,但Autorize不确定访问控制是否已执行。

手动审查Autorize结果是必要的,因为请求的上下文和响应的内容决定了访问控制是否已应用或甚至是否应该应用。让我们看一些例子。首先,考虑一个GET请求,用于“Products”API方法,似乎允许低权限用户和未认证用户绕过访问控制。

产品请求

一旦我们在结果表格中选择了一行,我们可以在Autorize界面右侧查看所有三个请求及其响应的详细信息。

未认证请求的响应

对于我们选择的请求,我们发现所有三个响应都是相同的。响应都包含了关于应用中出售产品详情的详细信息。未认证用户浏览应用中出售产品的能力几乎肯定是期望的行为,因此这不构成访问控制漏洞。

接下来,考虑一个对“whoami”API方法的请求,Autorize似乎对此感到困惑。

Whoami请求 – Autorize不确定访问控制执行

这些请求的响应都不同,但响应的内容适合每个请求的认证上下文。也就是说,对于修改后的请求,应用返回了低权限用户的身份信息,而在未认证请求的响应中没有返回身份信息。

Whoami请求的响应

因为响应的内容适合每个请求的认证上下文,这不构成访问控制漏洞。

接下来,考虑一个POST请求,在将产品添加到购物篮以购买时发出。Autorize报告此请求的访问控制已正确执行。

添加物品到购物篮的请求

查看响应,我们发现原始请求成功。

原始请求的成功响应

我们发现修改后的请求和未认证请求导致了错误响应。虽然这些错误响应有一些其他有趣的地方,但它们不构成访问控制漏洞。

低权限请求的错误响应

最后,让我们检查一个请求,在添加几个物品后查看高权限用户购物篮的内容。

检索购物篮内容的请求

检索认证用户购物篮的内容将被视为特权请求,所以这很有希望。当我们查看原始请求的响应时,我们发现高权限用户购物篮的内容在响应中。

原始请求的响应

查看低权限请求和未认证请求的响应,我们发现应用也在这些响应中返回了高权限账户的购物篮内容。

未认证请求响应中返回的特权数据

对此行为的进一步调查显示,个别购物篮由请求URL末尾的数字索引。通过更改此数字,我们可以访问不同用户的购物篮内容。以下截图显示了我们如何通过修改此值检索与不同用户关联的购物篮内容。

检索用户3的购物篮内容 检索用户8的购物篮内容

此行为显示应用受到称为不安全直接对象引用(IDOR)的访问控制漏洞的影响。访问控制漏洞的广泛存在和潜在影响意味着在执行Web应用渗透测试时,我们应特别关注此类情况。希望本文有助于演示如何使用Autorize更有效地识别这些漏洞。

脚注 https://owasp.org/www-project-top-ten/ ↩︎https://www.brycevandyk.com/dissecting-firefoxs-no-remote-option/ ↩︎https://www.blackhillsinfosec.com/towards-quieter-firefox/ ↩︎https://www.jython.org/download.html ↩︎https://owasp.org/www-project-juice-shop/ ↩︎https://jwt.io/ ↩︎https://www.blackhillsinfosec.com/webcast-modern-webapp-pentesting-how-to-attack-a-jwt/ ↩︎https://portswigger.net/bappstore/cc16f37549ff416b990d4312490f5fd1 ↩︎https://www.blackhillsinfosec.com/revisiting-insecure-direct-object-reference-idor/ ↩︎

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计