通过 Beacon 获取 Microsoft Entra 刷新令牌

admin 2025年5月23日13:03:17评论7 views字数 1865阅读6分13秒阅读模式

传统方法通常依赖从终端提取主刷新令牌 (PRT),这可通过信标(如使用 aad_prt_bof 或 Kozmer 的 request_aad_prt 之类的 BOF)实现。然而,当信标运行在未加入域的 BYOD 设备上时,PRT 提取方法会遇到阻碍,因为此类设备缺乏必要的域环境支持。本文将探讨在此类受限环境下,如何通过替代方法获取刷新令牌,以确保在信标失效时仍能维持对被攻陷身份的访问。

背景知识

主刷新令牌 (PRT) 是 Azure Active Directory (现称为 Entra) 中用于身份验证的关键组件。它存储在已加入域或 Azure AD 的设备上,允许用户无缝访问 Entra 资源。然而,未加入域的 BYOD 设备通常不存储 PRT,或者存储方式使得传统提取方法失效。

替代解决方案:基于浏览器的授权码流程利用

TrustedSec 的 Remote Ops Repo 中新增的 get_azure_token BOF(由 Christopher Paschen 开发)提供了一种创新解决方案。该 BOF 利用已通过浏览器向 Entra 进行身份验证的用户会话,通过以下步骤获取访问和刷新令牌:

  • 启动新的浏览器窗口,针对指定的 Entra 客户端 ID 和范围启动授权码流程。

  • 在本地启动 “监听器”,捕获浏览器重定向时返回的授权码。

  • 使用捕获的授权码向 Entra 服务请求访问令牌和刷新令牌。

  • 将获取的令牌展示给操作员。

  • 技术细节与注意事项

此方法的核心优势在于所有请求均源自最终用户的机器和 IP 地址,与正常用户行为高度相似,从而降低了被检测的风险。然而,使用该 BOF 时需特别注意以下事项:

  • 指定的客户端 ID 必须在 Entra 租户中配置为允许使用 http://localhost 作为重定向 URI。这是本地监听器能够捕获授权码的关键前提。

  • 该方法依赖于用户已在浏览器中完成身份验证,因此适用于已攻陷用户交互终端的场景。

  • 刷新令牌的有效期取决于 Entra 租户的配置,通常较长,但仍需定期轮换以维持访问。

重定向 URI

不幸的是,由于将redirect_uri参数设置为localhost,它限制了可以用于此技术的客户端ID的数量——特别是当你想利用客户端ID系列(FOCI )滥用时。

搜索目前已知的支持 FOCI 且支持“ http://localhost ”的第一方客户端 ID,结果非常少。我只找到了三个:

  • Microsoft Azure CLI

  • Microsoft Azure PowerShell,

  • Visual Studio – 旧版

对于窥探者(SOC)来说,对其中任何三个应用进行身份验证都可能对普通用户来说显得异常,并触发警报。更棘手的是,在成熟的租户中,这些特定的应用可能未获得租户的同意。

通过 Beacon 获取 Microsoft Entra 刷新令牌

Microsoft 的 Native Client 重定向 URI

微软提供了一个预定义的重定向 URI,称为原生客户端重定向 URI ( https://login.microsoftonline.com/common/oauth2/nativeclient),它用于桌面或移动应用等原生应用程序的 OAuth 流程中。它本质上允许这些应用程序无需托管 Web 服务器或使用自定义 URI 方案即可从 Entra 接收授权码——浏览器只需使用“code”参数重定向到此 URI,应用程序即可捕获该 URI 并交换访问令牌和刷新令牌。

为了更好地理解授权码的实际流程,请查看 JUMPSEC 的工具TokenSmith(由Sunny Chau开发),它可以自动完成授权码的获取(尽管 URL 和授权码必须手动复制到目标服务器)。如果您将 URL 粘贴到已登录的浏览器中(并且允许使用客户端 ID),您将几乎立即看到授权码返回。

通过 Beacon 获取 Microsoft Entra 刷新令牌

如果我们从那里提取它,就可以使用原生客户端重定向 URI,从而访问更大范围的 FOCI,并解除只能使用允许“ http://localhost ”作为重定向 URI 的 FOCI 的限制。

通过 Beacon 获取 Microsoft Entra 刷新令牌

实现这一点的方法有很多,但能想到的最简单的 PoC 是通过GetWindowTextAAPI 提取。通过这种方法,可以针对更多 FOCI 执行授权码流程——包括常用的 Teams、Copilot、Edge 等。

以下第一方 FOCI 允许“本机客户端”重定向 URI:

通过 Beacon 获取 Microsoft Entra 刷新令牌

BOF 否则就没有发生

作为基本的概念验证,我构建了一个 BOF,它可以执行以下操作:

  1. 打开浏览器窗口,访问授权码流 URL(用于客户端 ID 和范围)

  2. 从窗口标题中提取返回的代码

  3. 使用代码请求并获取令牌

beacon> entra-authcode-flow <clientid> <scope>

原文始发于微信公众号(Khan安全团队):通过 Beacon 获取 Microsoft Entra 刷新令牌

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月23日13:03:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   通过 Beacon 获取 Microsoft Entra 刷新令牌https://cn-sec.com/archives/4089786.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息