mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-05 11:26:11 -08:00
Translated ['src/pentesting-cloud/azure-security/README.md', 'src/pentes
This commit is contained in:
@@ -34,22 +34,22 @@ az-unauthenticated-enum-and-initial-entry/
|
||||
- 购买员工的凭据
|
||||
- [**常见钓鱼**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html)(凭据或 Oauth 应用)
|
||||
- [设备代码认证钓鱼](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md)
|
||||
- 第三方 **被攻破**
|
||||
- Azure 托管应用中的漏洞
|
||||
- 第三方 **泄露**
|
||||
- Azure 托管应用程序中的漏洞
|
||||
- [**服务器端请求伪造**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) 访问元数据端点
|
||||
- **子域接管**,如 [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/)
|
||||
- **其他 Azure 服务的错误配置**
|
||||
- 如果某个开发者的笔记本被攻破([WinPEAS 和 LinPEAS](https://github.com/peass-ng/PEASS-ng) 可以找到这些信息):
|
||||
- 如果某个开发者的笔记本被攻陷([WinPEAS 和 LinPEAS](https://github.com/peass-ng/PEASS-ng) 可以找到这些信息):
|
||||
- 在 **`<HOME>/.Azure`**
|
||||
- **`azureProfile.json`** 包含过去登录用户的信息
|
||||
- **`clouds.config`** 包含订阅信息
|
||||
- **`service_principal_entries.json`** 包含应用凭据(租户 ID、客户端和密钥)。仅在 Linux 和 macOS 中
|
||||
- **`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\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 令牌。
|
||||
@@ -62,7 +62,7 @@ az-unauthenticated-enum-and-initial-entry/
|
||||
{{#endref}}
|
||||
|
||||
> [!NOTE]
|
||||
> 请记住,通常枚举中 **最嘈杂** 的部分是 **登录**,而不是枚举本身。
|
||||
> 请记住,通常枚举中 **最吵闹** 的部分是 **登录**,而不是枚举本身。
|
||||
|
||||
### Azure 和 Entra ID 工具
|
||||
|
||||
@@ -72,19 +72,25 @@ az-unauthenticated-enum-and-initial-entry/
|
||||
az-enumeration-tools.md
|
||||
{{#endref}}
|
||||
|
||||
### 绕过登录条件
|
||||
### 绕过访问策略
|
||||
|
||||
<figure><img src="../../images/image (268).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
在你拥有一些有效凭据但无法登录的情况下,可能存在一些常见的保护措施:
|
||||
|
||||
- **IP 白名单** -- 你需要攻破一个有效的 IP
|
||||
- **IP 白名单** -- 你需要攻陷一个有效的 IP
|
||||
- **地理限制** -- 找到用户居住的地方或公司的办公室位置,并获取来自同一城市(或至少同一国家)的 IP
|
||||
- **浏览器** -- 可能只允许来自某些操作系统(Windows、Linux、Mac、Android、iOS)的浏览器。找出受害者/公司使用的操作系统。
|
||||
- 你还可以尝试 **攻破服务主体凭据**,因为它们通常限制较少,登录审核也较少。
|
||||
- **浏览器** -- 可能只允许某些操作系统(Windows、Linux、Mac、Android、iOS)的浏览器。找出受害者/公司使用的操作系统。
|
||||
- 你还可以尝试 **攻陷服务主体凭据**,因为它们通常限制较少,登录审核也较少。
|
||||
|
||||
绕过后,你可能能够返回到最初的设置,并且仍然可以访问。
|
||||
|
||||
查看:
|
||||
|
||||
{{#ref}}
|
||||
az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
|
||||
{{#endref}}
|
||||
|
||||
### Whoami
|
||||
|
||||
> [!CAUTION]
|
||||
@@ -149,7 +155,7 @@ az-services/az-azuread.md
|
||||
az-enumeration-tools.md#automated-post-exploitation-tools
|
||||
{{#endref}}
|
||||
|
||||
### 枚举 Azure 服务
|
||||
### Azure 枚举
|
||||
|
||||
一旦您知道自己是谁,您就可以开始枚举**您可以访问的 Azure 服务**。
|
||||
|
||||
@@ -157,15 +163,15 @@ az-enumeration-tools.md#automated-post-exploitation-tools
|
||||
|
||||
1. **找到您有访问权限的资源**:
|
||||
|
||||
Az PowerShell 命令 **`Get-AzResource`** 让您**了解当前用户可见的资源**。
|
||||
Az PowerShell 命令 **`Get-AzResource`** 让您**知道当前用户可见的资源**。
|
||||
|
||||
此外,您可以通过访问 [https://portal.azure.com/#view/HubsExtension/BrowseAll](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"`
|
||||
此外,您可以在**Web 控制台**中获取相同的信息,访问 [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) 或搜索“所有资源”或执行:`az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"`
|
||||
|
||||
2. **查找您对有访问权限的资源的权限,并查找分配给您的角色**:
|
||||
|
||||
请注意,您需要权限 **`Microsoft.Authorization/roleAssignments/read`** 才能执行此操作。
|
||||
|
||||
此外,拥有足够权限后,可以使用角色 **`Get-AzRoleAssignment`** 来**枚举订阅中的所有角色**或特定资源的权限,指示方式如下:**`Get-AzRoleAssignment -Scope /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4`**。
|
||||
此外,拥有足够权限后,可以使用角色 **`Get-AzRoleAssignment`** 来**枚举订阅中的所有角色**或特定资源的权限,指示如下:**`Get-AzRoleAssignment -Scope /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/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=2020-08-01-preview" | jq ".value"`** 获取此信息,如下所示:
|
||||
|
||||
@@ -183,7 +189,7 @@ Az PowerShell 命令 **`Get-AzResource`** 让您**了解当前用户可见的资
|
||||
az-services/
|
||||
{{#endref}}
|
||||
|
||||
### 权限提升、后期利用与 Azure 服务中的持久性
|
||||
### 权限提升、后期利用与持久性
|
||||
|
||||
一旦您了解 Azure 环境的结构以及正在使用的服务,您就可以开始寻找**提升权限、横向移动、执行其他后期利用攻击和维持持久性**的方法。
|
||||
|
||||
|
||||
@@ -2,21 +2,21 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
### 非法同意授权
|
||||
### OAuth 应用程序
|
||||
|
||||
默认情况下,任何用户都可以在 Azure AD 中注册应用程序。因此,您可以注册一个需要高影响权限的应用程序(仅针对目标租户),并获得管理员同意(如果您是管理员,则批准它) - 例如代表用户发送邮件、角色管理等。这将使我们能够**执行网络钓鱼攻击**,如果成功,将非常**有成效**。
|
||||
默认情况下,任何用户都可以在 Entra ID 中注册应用程序。因此,您可以注册一个需要高影响权限的应用程序(仅针对目标租户),并获得管理员同意(如果您是管理员,则批准它) - 例如代表用户发送邮件、角色管理等。这将使我们能够 **执行网络钓鱼攻击**,如果成功,将非常 **有成效**。
|
||||
|
||||
此外,您还可以接受该应用程序作为您的用户,以维持对其的访问。
|
||||
此外,您还可以接受该应用程序作为您的用户,以保持对其的访问。
|
||||
|
||||
### 应用程序和服务主体
|
||||
|
||||
凭借应用程序管理员、GA 或具有 microsoft.directory/applications/credentials/update 权限的自定义角色的权限,我们可以向现有应用程序添加凭据(密钥或证书)。
|
||||
|
||||
可以**针对具有高权限的应用程序**或**添加具有高权限的新应用程序**。
|
||||
可以 **针对具有高权限的应用程序** 或 **添加具有高权限的新应用程序**。
|
||||
|
||||
一个有趣的角色是**特权身份验证管理员角色**,因为它允许**重置**全局管理员的密码。
|
||||
一个有趣的角色是 **特权身份验证管理员角色**,因为它允许 **重置** 全局管理员的密码。
|
||||
|
||||
此技术还允许**绕过 MFA**。
|
||||
此技术还允许 **绕过 MFA**。
|
||||
```bash
|
||||
$passwd = ConvertTo-SecureString "J~Q~QMt_qe4uDzg53MDD_jrj_Q3P.changed" -AsPlainText -Force
|
||||
$creds = New-Object System.Management.Automation.PSCredential("311bf843-cc8b-459c-be24-6ed908458623", $passwd)
|
||||
@@ -28,9 +28,9 @@ Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <T
|
||||
```
|
||||
### Federation - Token Signing Certificate
|
||||
|
||||
拥有 **DA 权限** 的本地 AD,可以创建和导入 **新的 Token 签名** 和 **Token 解密证书**,这些证书的有效期非常长。这将允许我们 **以任何用户身份登录**,只要我们知道他们的 ImuutableID。
|
||||
拥有 **DA 权限** 的本地 AD,可以创建和导入 **新的 Token 签名** 和 **Token 解密证书**,这些证书具有很长的有效期。这将允许我们 **以任何用户身份登录**,前提是我们知道其 ImuutableID。
|
||||
|
||||
**在 ADFS 服务器上以 **DA 身份运行** 以下命令以创建新证书(默认密码 'AADInternals'),将其添加到 ADFS,禁用自动滚动并重启服务:
|
||||
**在 ADFS 服务器上以 **DA** 身份运行以下命令** 来创建新证书(默认密码 'AADInternals'),将其添加到 ADFS,禁用自动滚动并重启服务:
|
||||
```bash
|
||||
New-AADIntADFSSelfSignedCertificates
|
||||
```
|
||||
@@ -38,7 +38,7 @@ New-AADIntADFSSelfSignedCertificates
|
||||
```bash
|
||||
Update-AADIntADFSFederationSettings -Domain cyberranges.io
|
||||
```
|
||||
### 联邦 - 受信任的域
|
||||
### Federation - Trusted Domain
|
||||
|
||||
拥有租户的 GA 权限,可以**添加一个新域**(必须经过验证),将其身份验证类型配置为联邦,并将域配置为**信任特定证书**(以下命令中的 any.sts)和颁发者:
|
||||
```bash
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## 基本信息
|
||||
|
||||
Azure Active Directory (Azure AD) 是微软基于云的身份和访问管理服务。它在使员工能够登录并访问资源方面发挥着重要作用,这些资源包括组织内部和外部的 Microsoft 365、Azure 门户以及众多其他 SaaS 应用程序。Azure AD 的设计重点在于提供基本的身份服务,尤其包括 **身份验证、授权和用户管理**。
|
||||
Azure Active Directory (Azure AD) 是微软的基于云的身份和访问管理服务。它在使员工能够登录并访问资源方面发挥着重要作用,这些资源包括组织内部和外部的 Microsoft 365、Azure 门户以及众多其他 SaaS 应用程序。Azure AD 的设计重点在于提供基本的身份服务,尤其包括 **身份验证、授权和用户管理**。
|
||||
|
||||
Azure AD 的关键特性包括 **多因素身份验证** 和 **条件访问**,以及与其他 Microsoft 安全服务的无缝集成。这些特性显著提升了用户身份的安全性,并使组织能够有效实施和执行其访问政策。作为微软云服务生态系统的基本组成部分,Azure AD 对于基于云的用户身份管理至关重要。
|
||||
|
||||
@@ -156,7 +156,7 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
当您通过 **CLI** 登录 Azure 时,您使用的是属于 **Microsoft** 的 **租户** 中的 **Azure 应用程序**。这些应用程序,如您可以在您的帐户中创建的应用程序,**具有客户端 ID**。您 **无法看到所有这些应用程序** 在控制台中可见的 **允许的应用程序列表** 中,**但它们默认是被允许的**。
|
||||
当您通过 **CLI** 登录 Azure 时,您使用的是属于 **Microsoft** 的 **租户** 中的 **Azure 应用程序**。这些应用程序,如您可以在您的帐户中创建的应用程序,**具有客户端 ID**。您 **无法看到所有的应用程序** 在控制台中可见的 **允许的应用程序列表** 中,**但它们默认是被允许的**。
|
||||
|
||||
例如,一个 **powershell 脚本** 通过客户端 ID **`1950a258-227b-4e31-a9cf-717495945fc2`** 进行 **身份验证** 的应用程序。即使该应用程序未出现在控制台中,系统管理员仍然可以 **阻止该应用程序**,以便用户无法使用通过该应用程序连接的工具访问。
|
||||
|
||||
@@ -309,7 +309,7 @@ $password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText
|
||||
```
|
||||
### MFA & Conditional Access Policies
|
||||
|
||||
强烈建议为每个用户添加 MFA,然而,一些公司可能不会设置它,或者可能会通过条件访问进行设置:用户在特定位置、浏览器或 **某些条件** 下登录时将 **需要 MFA**。如果这些策略配置不正确,可能会容易受到 **绕过**。检查:
|
||||
强烈建议为每个用户添加 MFA,然而,一些公司可能不会设置它,或者可能会通过条件访问进行设置:用户在特定位置、浏览器或 **某些条件** 下登录时将 **被要求 MFA**。如果这些策略配置不正确,可能会容易受到 **绕过**。请检查:
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
|
||||
@@ -490,12 +490,7 @@ Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalMembersh
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
> [!WARNING]
|
||||
> 服务主体的所有者可以更改其密码。
|
||||
|
||||
<details>
|
||||
|
||||
<summary>列出并尝试在每个企业应用上添加客户端密钥</summary>
|
||||
> [!WARNING
|
||||
```bash
|
||||
# Just call Add-AzADAppSecret
|
||||
Function Add-AzADAppSecret
|
||||
@@ -667,7 +662,7 @@ Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
|
||||
> 应用在请求令牌时用来证明其身份的秘密字符串是应用密码。\
|
||||
> 因此,如果找到这个 **密码**,你可以作为 **服务主体** **访问** **租户**。\
|
||||
> 请注意,这个密码仅在生成时可见(你可以更改它,但无法再次获取)。\
|
||||
> **应用程序** 的 **所有者** 可以 **添加密码**(以便他可以冒充它)。\
|
||||
> **应用** 的 **所有者** 可以 **添加密码**(以便他可以冒充它)。\
|
||||
> 作为这些服务主体的登录 **不会被标记为风险**,并且 **不会有 MFA**。
|
||||
|
||||
可以在 [https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications](https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications) 找到属于 Microsoft 的常用应用 ID 列表。
|
||||
@@ -913,10 +908,10 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
|
||||
|
||||
### 特权身份管理 (PIM)
|
||||
|
||||
特权身份管理 (PIM) 在 Azure 中帮助**防止不必要地将过多特权**分配给用户。
|
||||
Azure 中的特权身份管理 (PIM) 有助于 **防止不必要地将过多的权限** 分配给用户。
|
||||
|
||||
PIM 提供的主要功能之一是,它允许不将角色分配给持续活跃的主体,而是使其**在一段时间内(例如 6 个月)有资格**。然后,每当用户想要激活该角色时,他需要请求并指明他需要特权的时间(例如 3 小时)。然后**管理员需要批准**该请求。\
|
||||
请注意,用户还可以请求**延长**时间。
|
||||
PIM 提供的主要功能之一是,它允许不将角色分配给持续活跃的主体,而是使其 **在一段时间内有资格(例如 6 个月)**。然后,每当用户想要激活该角色时,他需要请求并指明他需要该权限的时间(例如 3 小时)。然后 **管理员需要批准** 该请求。\
|
||||
请注意,用户还可以请求 **延长** 时间。
|
||||
|
||||
此外,**PIM 会在特权角色被分配给某人时发送电子邮件**。
|
||||
|
||||
@@ -931,9 +926,9 @@ PIM 提供的主要功能之一是,它允许不将角色分配给持续活跃
|
||||
- 激活时需要票据信息
|
||||
- 激活时需要批准
|
||||
- 过期的合格分配的最大时间
|
||||
- 还有更多关于何时以及谁在某些操作发生时发送通知的配置
|
||||
- 还有更多关于何时以及向谁发送通知的配置,当该角色发生某些操作时
|
||||
|
||||
### 条件访问策略 <a href="#title-text" id="title-text"></a>
|
||||
### 条件访问策略
|
||||
|
||||
检查:
|
||||
|
||||
@@ -941,11 +936,11 @@ PIM 提供的主要功能之一是,它允许不将角色分配给持续活跃
|
||||
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
|
||||
{{#endref}}
|
||||
|
||||
### Entra 身份保护 <a href="#title-text" id="title-text"></a>
|
||||
### Entra 身份保护
|
||||
|
||||
Entra 身份保护是一项安全服务,允许**检测用户或登录尝试是否过于风险**以被接受,从而**阻止**用户或登录尝试。
|
||||
Entra 身份保护是一项安全服务,允许 **检测用户或登录尝试的风险过高**,从而 **阻止** 用户或登录尝试。
|
||||
|
||||
它允许管理员配置在风险为“低及以上”、“中等及以上”或“高”时**阻止**尝试。尽管默认情况下它是完全**禁用**的:
|
||||
它允许管理员配置在风险为“低及以上”、“中等及以上”或“高”时 **阻止** 尝试。尽管默认情况下它是完全 **禁用** 的:
|
||||
|
||||
<figure><img src="../../../images/image (356).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -955,11 +950,11 @@ Entra 身份保护是一项安全服务,允许**检测用户或登录尝试是
|
||||
### Entra 密码保护
|
||||
|
||||
Entra 密码保护 ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) 是一项安全功能,**通过在多次登录尝试失败时锁定帐户来帮助防止弱密码的滥用**。\
|
||||
它还允许**禁止自定义密码列表**,该列表需要您提供。
|
||||
它还允许 **禁止自定义密码列表**,该列表需要您提供。
|
||||
|
||||
它可以**同时应用于**云级别和本地 Active Directory。
|
||||
它可以 **同时应用于** 云级别和本地 Active Directory。
|
||||
|
||||
默认模式是**审计**:
|
||||
默认模式是 **审核**:
|
||||
|
||||
<figure><img src="../../../images/image (355).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user