Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >通过 Beacon 获取 Microsoft Entra 刷新令牌

通过 Beacon 获取 Microsoft Entra 刷新令牌

作者头像
Khan安全团队
发布于 2025-05-22 01:52:44
发布于 2025-05-22 01:52:44
12700
代码可运行
举报
文章被收录于专栏:Khan安全团队Khan安全团队
运行总次数:0
代码可运行

传统方法通常依赖从终端提取主刷新令牌 (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)来说,对其中任何三个应用进行身份验证都可能对普通用户来说显得异常,并触发警报。更棘手的是,在成熟的租户中,这些特定的应用可能未获得租户的同意。

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),您将几乎立即看到授权码返回。

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

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

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

BOF 否则就没有发生

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

  1. 打开浏览器窗口,访问授权码流 URL(用于客户端 ID 和范围)
  2. 从窗口标题中提取返回的代码
  3. 使用代码请求并获取令牌
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
beacon> entra-authcode-flow <clientid> <scope>
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Khan安全攻防实验室 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
开放授权之道:OAuth 2.0的魅力与奥秘
在数字时代,保护用户数据和应用的安全性至关重要。想象一下,有一种神奇的协议,可以让你的应用在安全的前提下获取用户权限,而用户也无需直接分享密码。是的,这就是OAuth 2.0,一种开放授权的魔法。让我们一起揭开这个魔法的面纱,探索OAuth 2.0的奥秘吧!
一只牛博
2025/05/30
1410
开放授权之道:OAuth 2.0的魅力与奥秘
使用OAuth 2.0访问谷歌的API
谷歌的API使用的OAuth 2.0协议进行身份验证和授权。谷歌支持常见的OAuth 2.0场景,如那些Web服务器,安装,和客户端应用程序。
拿我格子衫来
2022/01/24
5K0
使用OAuth 2.0访问谷歌的API
Django REST Framework-基于Oauth2的身份验证(二)
接下来,我们需要创建OAuth2客户端和授权服务器。OAuth2客户端是需要访问API的应用程序,授权服务器负责验证并授予OAuth2客户端的访问令牌。
玖叁叁
2023/04/25
2.4K0
OAuth 2.0 威胁模型渗透测试清单
使用强客户端身份验证(例如 client_assertion / client_token)
Khan安全团队
2022/01/14
8770
Spring Security 系列(2) —— Spring Security OAuth2
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
求和小熊猫
2022/06/30
6.3K0
OAuth 2.0身份验证
浏览网络时,几乎可以肯定您会遇到一些使您可以使用社交媒体帐户登录的网站,该功能很可能是使用流行的OAuth 2.0框架构建的,OAuth 2.0对于攻击者来说非常有趣,因为它非常常见,而且天生就容易出现实现错误,这可能导致许多漏洞,从而使攻击者可以获得敏感用户数据,并有可能绕过身份验证。
Al1ex
2021/04/22
3.8K0
OAuth 2.0身份验证
深入理解OAuth 2.0:原理、流程与实践
OAuth 2.0 允许用户授权第三方应用访问他们在另一个服务提供方上的数据,而无需分享他们的凭据(如用户名、密码)。
windealli
2024/05/20
19.6K0
深入理解OAuth 2.0:原理、流程与实践
全面详解互联网企业开放API的 “守护神”
这篇文章前前后后写了两个多礼拜,也是自己第三次写4000字以上的技术单篇文章。写作过程先是根据自己的思考和资料查找确认,再结合宙斯开放平台的实际使用,每天中午吃过饭一个小时来将这些内容碎片化的记录下来,今天得以利用整块的时间梳理总结完成。
王新栋
2019/09/04
8040
全面详解互联网企业开放API的 “守护神”
OAuth 详解<1> 什么是 OAuth?
从高层次开始,OAuth 不是API或服务:它是授权的开放标准,任何人都可以实施它。
用户1418987
2023/04/10
5.1K0
OAuth 详解<1> 什么是 OAuth?
从0开始构建一个Oauth2 Server服务 <3> 构建服务器端应用程序
服务器端应用程序是处理 OAuth 服务器时遇到的最常见的应用程序类型。这些应用程序在 Web 服务器上运行,其中应用程序的源代码不向公众开放,因此它们可以维护其客户端机密的机密性。
用户1418987
2023/10/16
4360
从0开始构建一个Oauth2 Server服务 <3> 构建服务器端应用程序
从0开始构建一个Oauth2Server服务 <5> 单页应用
单页应用程序(也称为基于浏览器的应用程序)在从网页加载 JavaScript 和 HTML 源代码后完全在浏览器中运行。由于浏览器可以使用整个源代码,因此它们无法维护客户端机密的机密性,因此这些应用程序不使用机密。因为他们不能使用客户端密码,所以最好的选择是使用 PKCE 扩展来保护重定向中的授权代码。这类似于也不能使用客户端密码的移动应用程序的解决方案。
用户1418987
2023/10/16
4490
从0开始构建一个Oauth2Server服务 <5> 单页应用
Spring Security 与 OAuth2 介绍
OAuth2 角色 resource owner:资源所有者(指用户) resource server:资源服务器存放受保护资源,要访问这些资源,需要获得访问令牌(下面例子中的 Twitter 资源服务器) client:客户端代表请求资源服务器资源的第三方程序(下面例子中的 Quora)客户端同时也可能是一个资源服务器 authrization server:授权服务器用于发放访问令牌给客户端(下面例子中的 Twitter 授权服务器) OAuth2 工作流程例子 客户端 Quora 将自己注册到授
朝雨忆轻尘
2019/06/18
1.5K0
OAuth 2.0初学者指南
本文概述了OAuth 2.0协议。它讨论了OAuth 2.0实现过程中涉及的不同参与者和步骤。
银河1号
2019/05/16
2.7K0
OAuth 2.0初学者指南
OAuth 2.0 的探险之旅
OAuth 2.0 全称是 Open Authorization 2.0, 是用于授权(authorization)的行业标准协议。OAuth 2.0 专注于客户端开发人员的简单性,同时为 Web 应用程序、桌面应用程序、移动设备应用等提供了特定的授权流程。它在2012年取代了 OAuth 1.0, 并且 OAuth 2.0 协议不向后兼容 OAuth 1.0。
全球技术精选
2021/11/12
1.8K0
OAuth 2.0 的探险之旅
.Net 鉴权授权
通过在nginx或者代码中写死token,或者通过在限制外网访问的方式已来达到安全授权的方式
郑小超.
2018/12/25
1.6K0
Golang 如何实现一个 Oauth2 客户端程序
欢迎star demo007x/oauth2-client: Oauth2 Client package for Golang (github.com)
用户1418987
2023/10/16
6630
Golang 如何实现一个 Oauth2  客户端程序
从协议入手,剖析OAuth2.0(译 RFC 6749)
      传统的client-server授权模型,客户端通过使用凭证(通常的用户名和明文密码)访问服务端受保护的资源,为了能够让第三方应用程序访问受保护的资源,需要将凭证共享给第三方。
justmine
2022/05/10
5.2K0
【壹刊】Azure AD(二)调用受Microsoft 标识平台保护的 ASP.NET Core Web API (上)
—————————Grant_Allen 是一位博客园新晋博主,目前开始专注于Azure方向的学习和研究,是我认识不多的、打算长时间研究Azure的群友,因此打算帮他开个专栏,同时也希望并祝愿他能一直坚持下去,学有所成。
老张的哲学
2022/04/11
2K0
【壹刊】Azure AD(二)调用受Microsoft 标识平台保护的 ASP.NET Core Web API (上)
Docusign如何取得附有授权码授予的访问令牌
用户9857551
2024/01/10
5080
从0开始构建一个Oauth2Server服务 <4> 构建服务器端应用程序
该应用程序通过制作包含客户端 ID、范围、状态和 PKCE 代码验证程序的 URL 来启动流程。该应用程序可以将其放入<a href="">标签中。
用户1418987
2023/10/16
3520
从0开始构建一个Oauth2Server服务 <4> 构建服务器端应用程序
推荐阅读
相关推荐
开放授权之道:OAuth 2.0的魅力与奥秘
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验