Az - Pass the PRT
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
在 SSO 状态部分,您应该看到 AzureAdPrt
设置为 YES。
在同一输出中,您还可以看到 设备是否已加入 Azure(在字段 AzureAdJoined
中):
PRT cookie 实际上被称为 x-ms-RefreshTokenCredential
,它是一个 JSON Web Token (JWT)。JWT 包含 3 部分,头部、有效载荷和 签名,由 .
分隔,并且全部是 URL 安全的 base64 编码。一个典型的 PRT cookie 包含以下头部和主体:
实际的 Primary Refresh Token (PRT) 被封装在 refresh_token
中,该令牌由 Azure AD 控制的密钥加密,使其内容对我们来说是不可见和无法解密的。字段 is_primary
表示该令牌中封装了主刷新令牌。为了确保 cookie 保持与其预期的特定登录会话绑定,request_nonce
从 logon.microsoftonline.com
页面传输。
LSASS 进程将向 TPM 发送 KDF 上下文,TPM 将使用 会话密钥(在设备注册到 AzureAD 时收集并存储在 TPM 中)和先前的上下文来 派生 一个 密钥,该 派生密钥 用于 签名 PRT cookie (JWT)。
KDF 上下文是 来自 AzureAD 的随机数和 PRT 创建的 JWT 与 上下文(随机字节)混合。
因此,即使 PRT 不能被提取,因为它位于 TPM 内部,但可以滥用 LSASS 来 请求来自新上下文的派生密钥并使用生成的密钥来签名 Cookies。
作为 普通用户,可以通过请求 LSASS 获取 SSO 数据来 请求 PRT 使用。 这可以像 本地应用程序 一样完成,这些应用程序从 Web Account Manager(令牌代理)请求令牌。WAM 将请求传递给 LSASS,后者使用签名的 PRT 断言请求令牌。或者可以通过 基于浏览器的 (web) 流 完成,其中 PRT cookie 用作 头部 来验证对 Azure AS 登录页面的请求。
作为 SYSTEM,如果没有受到 TPM 保护,可以 窃取 PRT 或 使用加密 API 与 LSASS 中的 PRT 密钥交互。
有关此方法的更多信息 请查看此帖子。ROADtoken 将从正确的目录运行 BrowserCore.exe
并使用它来 获取 PRT cookie。然后可以使用此 cookie 与 ROADtools 进行身份验证并 获取持久的刷新令牌。
要生成有效的 PRT cookie,您需要的第一件事是一个随机数。 您可以通过以下方式获取:
或使用 roadrecon:
然后您可以使用 roadtoken 来获取新的 PRT(从用户的进程中运行该工具进行攻击):
作为单行命令:
然后您可以使用生成的 cookie来生成令牌以使用 Azure AD Graph 或 Microsoft Graph 登录:
Get-AADIntUserPRTToken
从 Azure AD 加入或混合加入的计算机获取用户的 PRT 令牌。使用 BrowserCore.exe
获取 PRT 令牌。
或者,如果您拥有来自 Mimikatz 的值,您也可以使用 AADInternals 生成令牌:
前往 https://login.microsoftonline.com,清除所有 login.microsoftonline.com 的 cookies,并输入一个新的 cookie。
其余的应该是默认设置。确保您可以刷新页面并且 cookie 不会消失,如果消失了,您可能犯了错误,需要重新进行该过程。如果没有消失,您应该没问题。
PRT(主要刷新令牌)从 LSASS(本地安全授权子系统服务)中提取并存储以供后续使用。
接下来提取会话密钥。由于该密钥最初由本地设备发出,然后重新加密,因此需要使用 DPAPI 主密钥进行解密。有关 DPAPI(数据保护 API)的详细信息,请参阅这些资源:HackTricks,有关其应用的理解,请参阅 Pass-the-cookie attack。
在解密会话密钥后,获得 PRT 的派生密钥和上下文。这些对于创建 PRT cookie至关重要。具体而言,派生密钥用于签署构成 cookie 的 JWT(JSON Web Token)。Dirk-jan 提供了对此过程的全面解释,您可以在 这里 找到。
请注意,如果 PRT 在 TPM 中而不在 lsass
中,mimikatz 将无法提取它。
但是,可以从 TPM 中的上下文派生密钥获取密钥,并使用它来签署 cookie(检查选项 3)。
您可以在这里找到提取这些详细信息的深入解释:https://dirkjanm.io/digging-further-into-the-primary-refresh-token/
在 2021 年 8 月的修复后,这将无法准确地获取其他用户的 PRT 令牌,因为只有用户可以获取他的 PRT(本地管理员无法访问其他用户的 PRT),但可以访问他的。
您可以使用 mimikatz 提取 PRT:
(Images from https://blog.netwrix.com/2023/05/13/pass-the-prt-overview)
复制标记为Prt的部分并保存。
还要提取会话密钥(ProofOfPossesionKey
字段的KeyValue
),您可以在下面看到高亮显示的部分。这个是加密的,我们需要使用我们的DPAPI主密钥来解密它。
如果您没有看到任何PRT数据,可能是因为您没有任何PRT,因为您的设备没有加入Azure AD,或者您可能在运行旧版本的Windows 10。
要解密会话密钥,您需要提升您的权限到SYSTEM,以在计算机上下文中运行,以便能够使用DPAPI主密钥进行解密。您可以使用以下命令来实现:
现在你想复制上下文值:
以及派生密钥值:
最后,你可以使用所有这些信息来 生成 PRT cookies:
访问 https://login.microsoftonline.com,清除所有 login.microsoftonline.com 的 cookies,然后输入一个新的 cookie。
其余部分应为默认设置。确保您可以刷新页面并且 cookie 不会消失,如果消失了,您可能犯了错误,需要重新进行该过程。如果没有消失,您应该没问题。
首先更新 PRT,这将其保存在 roadtx.prt
中:
现在我们可以使用交互式浏览器通过 roadtx browserprtauth
请求令牌。如果我们使用 roadtx describe
命令,我们会看到访问令牌包含一个 MFA 声明,因为我在这种情况下使用的 PRT 也有一个 MFA 声明。
在获得上下文和通过 mimikatz 转储的派生密钥后,可以使用 roadrecon 生成一个新的签名 cookie:
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)