Azure Pentesting

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

基本信息

在以下页面学习 Azure 和 Entra ID 的基础知识:

Az - Basic Information

Azure 渗透测试/红队方法论

为了审计 AZURE 环境,了解以下内容非常重要:使用了哪些 服务,暴露了什么,谁有 访问权限,以及内部 Azure 服务和 外部服务 是如何连接的。

从红队的角度来看,攻陷 Azure 环境的第一步是设法获得一些 立足点

外部枚举与初始访问

第一步当然是枚举你正在攻击的租户的信息,并尝试获取立足点。

根据域名,可以知道 公司是否在使用 Azure,获取 租户 ID,获取同一租户中的其他 有效域名(如果有的话),并获取 相关信息,例如 SSO 是否启用、邮件配置、有效用户邮箱等。

查看以下页面以了解如何进行 外部枚举

Az - Unauthenticated Enum & Initial Entry

根据这些信息,尝试获取立足点的最常见方法有:

  • OSINT:检查 Github 或任何其他开源平台上的 泄露,可能包含 凭据 或有趣的信息。
  • 密码 重用、泄露或 密码喷洒
  • 购买员工的凭据
  • 常见钓鱼(凭据或 Oauth 应用)
  • 设备代码认证钓鱼
  • 第三方 被攻破
  • Azure 托管应用中的漏洞
  • 服务器端请求伪造 访问元数据端点
  • 子域接管,如 https://godiego.co/posts/STO-Azure/
  • 其他 Azure 服务的错误配置
  • 如果某个开发者的笔记本被攻破(WinPEAS 和 LinPEAS 可以找到这些信息):
  • <HOME>/.Azure
  • azureProfile.json 包含过去登录用户的信息
  • clouds.config 包含订阅信息
  • service_principal_entries.json 包含应用凭据(租户 ID、客户端和密钥)。仅在 Linux 和 macOS 上
  • msal_token_cache.json 包含访问令牌和刷新令牌。仅在 Linux 和 macOS 上
  • service_principal_entries.bin 和 msal_token_cache.bin 在 Windows 上使用,并使用 DPAPI 加密
  • msal_http_cache.bin 是 HTTP 请求的缓存
  • 加载它:with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)
  • AzureRmContext.json 包含使用 Az PowerShell 的先前登录信息(但没有凭据)
  • C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\* 中有几个 .bin 文件,包含使用用户 DPAPI 加密的 访问令牌、ID 令牌和帐户信息。
  • 可以在 C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\ 中的 .tbres 文件中找到更多 访问令牌,这些文件包含使用 DPAPI 加密的访问令牌的 base64。
  • 在 Linux 和 macOS 中,可以通过运行 pwsh -Command "Save-AzContext -Path /tmp/az-context.json" 从 Az PowerShell 获取 访问令牌、刷新令牌和 ID 令牌(如果使用)。
  • 在 Windows 中,这只会生成 ID 令牌。
  • 可以检查是否在 Linux 和 macOS 中使用了 Az PowerShell,方法是检查 $HOME/.local/share/.IdentityService/ 是否存在(尽管其中的文件是空的且无用)

在以下页面查找 其他 Azure 服务的错误配置,可能导致立足点:

Az - Unauthenticated Enum & Initial Entry

Note

请记住,通常枚举中 最吵闹 的部分是 登录,而不是枚举本身。

Azure 和 Entra ID 工具

以下工具将非常有用,可以慢慢(以避免被检测)或自动(以节省时间)枚举 Entra ID 租户和 Azure 环境:

Az - Enumeration Tools

绕过访问策略

在你拥有一些有效凭据但无法登录的情况下,可能存在一些常见的保护措施:

  • IP 白名单 – 你需要攻破一个有效的 IP
  • 地理限制 – 找到用户居住的地方或公司的办公室,并获取来自同一城市(或至少同一国家)的 IP
  • 浏览器 – 可能只允许某些操作系统(Windows、Linux、Mac、Android、iOS)的浏览器。找出受害者/公司使用的操作系统。
  • 你还可以尝试 攻破服务主体凭据,因为它们通常限制较少,登录审核也较少

绕过后,你可能能够返回到最初的设置,并且仍然可以访问。

查看:

Az - Conditional Access Policies & MFA Bypass

Whoami

Caution

学习 如何安装 az cli、AzureAD 和 Az PowerShell 在 Az - Entra ID 部分。

你需要知道的第一件事是 你是谁(你处于哪个环境中):

az account list
az account tenant list # Current tenant info
az account subscription list # Current subscription info
az ad signed-in-user show # Current signed-in user
az ad signed-in-user list-owned-objects # Get owned objects by current user
az account management-group list #Not allowed by default

Entra ID 枚举与权限提升

默认情况下,任何用户应该具有足够的权限来枚举用户、组、角色、服务主体等…(查看 default AzureAD permissions).
您可以在这里找到指南:

Az - Entra ID (AzureAD) & Azure IAM

查看后渗透工具以查找在 Entra ID 中提升权限的工具,如AzureHound:

Automated Post Exploitation Tools

Azure 枚举

一旦您知道自己是谁,您就可以开始枚举您可以访问的 Azure 服务

您应该开始找出您对资源的权限。为此:

  1. 找到您有访问权限的资源

Tip

这不需要任何特殊权限。

Az PowerShell 命令 Get-AzResource 让您了解当前用户可见的资源

此外,您可以通过访问 https://portal.azure.com/#view/HubsExtension/BrowseAll 或搜索“所有资源”来在Web 控制台中获取相同的信息,或执行:

az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"
  1. 查找您对可见资源的权限

Tip

这不需要任何特殊权限。

通过与 API https://management.azure.com/{resource_id}/providers/Microsoft.Authorization/permissions?api-version=2022-04-01 交互,您可以获取对指定资源 resource_id 的权限。

因此,检查您可以访问的每个资源,您可以获取对它们的权限。

Warning

您可以使用工具 Find_My_Az_Management_Permissions 自动化此枚举。

使用 **`Microsoft.Authorization/roleAssignments/read`** 枚举权限

Tip

请注意,您需要权限 Microsoft.Authorization/roleAssignments/read 才能执行此操作。

  • 拥有足够权限的情况下,可以使用角色 Get-AzRoleAssignment枚举订阅中的所有角色 或对特定资源的权限,指示如下:
Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4

也可以通过运行以下命令获取此信息:

az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value"

请提供需要翻译的具体内容。

az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value"
  • 另一个选项是获取附加到您在 azure 中的角色。这也需要权限**Microsoft.Authorization/roleAssignments/read**:
az role assignment list --assignee "<email>" --all --output table

或运行以下命令(如果结果为空,可能是因为您没有权限获取它们):

az rest --method GET --uri 'https://management.azure.com/subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=principalId eq '<user-id>'
  • 查找附加给您的角色的细粒度权限

然后,要获取细粒度权限,您可以运行 (Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions

或者直接调用 API,使用

az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?api-version=2022-04-01" | jq ".properties"

在以下部分中,您可以找到有关最常见的Azure服务及其枚举方法的信息

Az - Services

权限提升、后期利用与持久性

一旦您了解了Azure环境的结构以及正在使用的服务,您就可以开始寻找提升权限、横向移动、执行其他后期利用攻击和维持持久性的方法。

在以下部分中,您可以找到有关如何在最常见的Azure服务中提升权限的信息:

Az - Privilege Escalation

在以下部分中,您可以找到有关如何在最常见的Azure服务中执行后期利用攻击的信息:

Az - Post Exploitation

在以下部分中,您可以找到有关如何在最常见的Azure服务中维持持久性的信息:

Az - Persistence

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