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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
基本信息
在以下页面学习 Azure 和 Entra ID 的基础知识:
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 环境:
绕过访问策略
.png)
在你拥有一些有效凭据但无法登录的情况下,可能存在一些常见的保护措施:
- 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 服务。
您应该开始找出您对资源的权限。为此:
- 找到您有访问权限的资源:
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"
- 查找您对可见资源的权限:
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服务及其枚举方法的信息:
权限提升、后期利用与持久性
一旦您了解了Azure环境的结构以及正在使用的服务,您就可以开始寻找提升权限、横向移动、执行其他后期利用攻击和维持持久性的方法。
在以下部分中,您可以找到有关如何在最常见的Azure服务中提升权限的信息:
在以下部分中,您可以找到有关如何在最常见的Azure服务中执行后期利用攻击的信息:
在以下部分中,您可以找到有关如何在最常见的Azure服务中维持持久性的信息:
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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
HackTricks Cloud

