mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-05 11:26:11 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/
This commit is contained in:
@@ -418,6 +418,7 @@
|
||||
- [Az - Queue Storage](pentesting-cloud/azure-security/az-services/az-queue-enum.md)
|
||||
- [Az - Service Bus](pentesting-cloud/azure-security/az-services/az-servicebus-enum.md)
|
||||
- [Az - SQL](pentesting-cloud/azure-security/az-services/az-sql.md)
|
||||
- [Az - Static Web Applications](pentesting-cloud/azure-security/az-services/az-static-web-apps.md)
|
||||
- [Az - Storage Accounts & Blobs](pentesting-cloud/azure-security/az-services/az-storage.md)
|
||||
- [Az - Table Storage](pentesting-cloud/azure-security/az-services/az-table-storage.md)
|
||||
- [Az - Virtual Machines & Network](pentesting-cloud/azure-security/az-services/vms/README.md)
|
||||
@@ -461,6 +462,7 @@
|
||||
- [Az - Queue Storage Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-queue-privesc.md)
|
||||
- [Az - Service Bus Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-servicebus-privesc.md)
|
||||
- [Az - Virtual Machines & Network Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md)
|
||||
- [Az - Static Web App Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md)
|
||||
- [Az - Storage Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-storage-privesc.md)
|
||||
- [Az - SQL Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-sql-privesc.md)
|
||||
- [Az - Persistence](pentesting-cloud/azure-security/az-persistence/README.md)
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
]
|
||||
}
|
||||
```
|
||||
劫持是可能的,因为从**模板上传**到存储桶的那一刻到**模板部署**的那一刻之间有一个**小的时间窗口**。攻击者可能只需在他的账户中创建一个**lambda function**,当发送存储桶通知时将**触发**,并**劫持**该**存储桶**的**内容**。
|
||||
劫持是可能的,因为从**模板上传**到存储桶的那一刻到**模板部署**的那一刻之间有一个**小的时间窗口**。攻击者可能只需在他的账户中创建一个**lambda function**,当**存储桶通知被发送**时触发,并**劫持**该**存储桶**的**内容**。
|
||||
|
||||
.png>)
|
||||
|
||||
@@ -50,10 +50,10 @@ Pacu模块 [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/
|
||||
|
||||
- 如果 EC2 实例将**用户数据存储在 S3 存储桶**中,攻击者可以修改它以**在 EC2 实例内执行任意代码**。
|
||||
|
||||
### `s3:PutObject`, `s3:GetObject`(可选)通过 terraform 状态文件
|
||||
### `s3:PutObject`, `s3:GetObject`(可选)在 terraform 状态文件上
|
||||
|
||||
很常见的是,[terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) 状态文件被保存到云提供商的 blob 存储中,例如 AWS S3。状态文件的文件后缀为 `.tfstate`,而存储桶名称通常也会透露它们包含 terraform 状态文件。通常,每个 AWS 账户都有一个这样的存储桶来存储显示账户状态的状态文件。\
|
||||
此外,通常在现实世界的账户中,几乎所有开发人员都有 `s3:*`,有时甚至商业用户也有 `s3:Put*`。
|
||||
此外,通常在现实世界的账户中,几乎所有开发人员都有 `s3:*`,有时甚至业务用户也有 `s3:Put*`。
|
||||
|
||||
因此,如果您对这些文件具有列出的权限,则存在一个攻击向量,允许您以 `terraform` 的权限获得 RCE - 大多数情况下是 `AdministratorAccess`,使您成为云账户的管理员。此外,您可以利用该向量通过使 `terraform` 删除合法资源来进行拒绝服务攻击。
|
||||
|
||||
@@ -65,7 +65,7 @@ pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files
|
||||
|
||||
### `s3:PutBucketPolicy`
|
||||
|
||||
攻击者需要**来自同一账户**,否则将触发错误`The specified method is not allowed`,具有此权限将能够授予自己对存储桶的更多权限,允许他读取、写入、修改、删除和暴露存储桶。
|
||||
攻击者需要**来自同一账户**,否则会触发错误`The specified method is not allowed`,具有此权限将能够授予自己对存储桶的更多权限,使其能够读取、写入、修改、删除和暴露存储桶。
|
||||
```bash
|
||||
# Update Bucket policy
|
||||
aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-name>
|
||||
@@ -123,7 +123,7 @@ aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-n
|
||||
```
|
||||
### `s3:GetBucketAcl`, `s3:PutBucketAcl`
|
||||
|
||||
攻击者可以利用这些权限来**授予自己对特定桶的更多访问权限**。\
|
||||
攻击者可以利用这些权限来**授予自己更多的访问权限**,以便对特定的桶进行操作。\
|
||||
请注意,攻击者不需要来自同一账户。此外,写入访问权限
|
||||
```bash
|
||||
# Update bucket ACL
|
||||
|
||||
@@ -94,7 +94,7 @@ az webapp deployment list-publishing-profiles --name <app-name> --resource-group
|
||||
}
|
||||
]
|
||||
```
|
||||
注意**用户名始终相同**(除了FTP,它在开头添加了应用程序的名称),但**密码对所有人都是相同的**。
|
||||
注意 **用户名始终相同**(除了 FTP,它在开头添加了应用程序的名称),但 **密码对所有人都是相同的**。
|
||||
|
||||
此外,**SCM URL 是 `<app-name>.scm.azurewebsites.net`**。
|
||||
|
||||
@@ -126,7 +126,7 @@ az webapp deployment user set \
|
||||
```
|
||||
然后,您可以使用这些凭据来**访问SCM和FTP平台**。这也是保持持久性的好方法。
|
||||
|
||||
请记住,要从**网络访问SCM平台,您需要访问`<SCM-URL>/BasicAuth`**。
|
||||
请记住,要从**网页访问SCM平台,您需要访问`<SCM-URL>/BasicAuth`**。
|
||||
|
||||
> [!WARNING]
|
||||
> 请注意,每个用户都可以通过调用之前的命令来配置自己的凭据,但如果用户没有足够的权限访问SCM或FTP,则凭据将无效。
|
||||
@@ -155,7 +155,7 @@ az rest --method PUT \
|
||||
|
||||
仅凭有效的 SCM 凭据,就可以 **发布代码** 到应用服务。这可以通过以下命令完成。
|
||||
|
||||
对于这个 Python 示例,您可以从 https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart 下载仓库,进行您希望的 **更改**,然后 **运行:`zip -r app.zip .`** 进行压缩。
|
||||
对于这个 Python 示例,您可以从 https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart 下载仓库,进行您想要的 **更改**,然后 **运行:`zip -r app.zip .`** 进行压缩。
|
||||
|
||||
然后,您可以使用以下命令在 Web 应用中 **发布代码**:
|
||||
```bash
|
||||
@@ -175,7 +175,7 @@ az rest --method GET --url "https://lol-b5fyaeceh4e9dce0.scm.canadacentral-01.az
|
||||
curl "<SCM-URL>/vfs/data/jobs/continuous/job_name/job_log.txt" \
|
||||
--user '<username>:<password>' -v
|
||||
```
|
||||
- 阅读 **Webjobs** 源代码:
|
||||
- 阅读 **Webjobs** 源代码:
|
||||
```bash
|
||||
# Using SCM username and password:
|
||||
# Find all the webjobs inside:
|
||||
@@ -225,7 +225,7 @@ az rest --method GET \
|
||||
```
|
||||
此命令返回 Github、Bitbucket、Dropbox 和 OneDrive 的令牌。
|
||||
|
||||
在这里有一些命令示例来检查令牌:
|
||||
以下是一些检查令牌的命令示例:
|
||||
```bash
|
||||
# GitHub – List Repositories
|
||||
curl -H "Authorization: token <token>" \
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
|
||||
## 基本信息
|
||||
|
||||
**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`)创建的应用程序使用。
|
||||
> 请注意,**Functions 是 App Services 的一个子集**,因此,这里讨论的许多功能也将被作为 Azure Apps 创建的应用程序使用(在 cli 中为 `webapp`)。
|
||||
|
||||
### 不同计划
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
|
||||
### **存储桶**
|
||||
|
||||
在创建一个未容器化的新 Function App 时(但提供要运行的代码),**代码和其他与函数相关的数据将存储在存储帐户中**。默认情况下,Web 控制台将为每个函数创建一个新的存储桶以存储代码。
|
||||
在创建一个新的非容器化的 Function App 时(但提供要运行的代码),**代码和其他与函数相关的数据将存储在存储帐户中**。默认情况下,Web 控制台将为每个函数创建一个新的存储桶以存储代码。
|
||||
|
||||
此外,修改存储桶中的代码(以不同格式存储时),**应用的代码将被修改为新的代码,并在下次调用函数时执行**。
|
||||
此外,修改存储桶中的代码(以不同格式存储),**应用的代码将被修改为新的代码,并在下次调用函数时执行**。
|
||||
|
||||
> [!CAUTION]
|
||||
> 从攻击者的角度来看,这非常有趣,因为 **对该存储桶的写入访问** 将允许攻击者 **破坏代码并提升权限** 到 Function App 内的托管身份。
|
||||
@@ -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 沙箱**
|
||||
|
||||
@@ -61,9 +61,9 @@
|
||||
**系统分配** 的身份将是一个托管身份,**只有分配了该身份的函数** 可以使用,而 **用户分配** 的托管身份是 **任何其他 Azure 服务都可以使用的托管身份**。
|
||||
|
||||
> [!NOTE]
|
||||
> 与 [**VMs**](vms/index.html) 一样,Functions 可以具有 **1 个系统分配** 的托管身份和 **多个用户分配** 的托管身份,因此如果您破坏了该函数,始终重要的是尝试找到所有托管身份,因为您可能能够从一个函数提升到多个托管身份。
|
||||
> 与 [**VMs**](vms/index.html) 一样,Functions 可以具有 **1 个系统分配** 的托管身份和 **多个用户分配** 的托管身份,因此,如果您破坏了该函数,始终重要的是尝试找到所有托管身份,因为您可能能够从一个函数提升到多个托管身份。
|
||||
>
|
||||
> 如果未使用系统托管身份,但一个或多个用户托管身份附加到函数,则默认情况下您将无法获取任何令牌。
|
||||
> 如果未使用系统托管身份,但一个或多个用户托管身份附加到函数,默认情况下您将无法获取任何令牌。
|
||||
|
||||
可以使用 [**PEASS 脚本**](https://github.com/peass-ng/PEASS-ng) 从元数据端点获取默认托管身份的令牌。或者您可以 **手动** 获取,如下所述:
|
||||
|
||||
@@ -74,9 +74,9 @@
|
||||
## 访问密钥
|
||||
|
||||
> [!NOTE]
|
||||
> 请注意,没有 RBAC 权限可以授予用户调用函数的访问权限。**函数调用取决于创建时选择的触发器**,如果选择了 HTTP 触发器,则可能需要使用 **访问密钥**。
|
||||
> 请注意,没有 RBAC 权限可以授予用户调用函数的访问权限。**函数调用取决于创建时选择的触发器**,如果选择了 HTTP 触发器,可能需要使用 **访问密钥**。
|
||||
|
||||
在使用 **HTTP 触发器** 创建函数内部的端点时,可以指明触发函数所需的 **访问密钥授权级别**。提供三种选项:
|
||||
在使用 **HTTP 触发器** 的函数内部创建端点时,可以指明触发函数所需的 **访问密钥授权级别**。提供三种选项:
|
||||
|
||||
- **ANONYMOUS**:**每个人**都可以通过 URL 访问该函数。
|
||||
- **FUNCTION**:端点仅对使用 **函数、主机或主密钥** 的用户可访问。
|
||||
@@ -86,8 +86,8 @@
|
||||
|
||||
- **函数密钥**:函数密钥可以是默认的或用户定义的,旨在仅授予对 Function App 中 **特定函数端点** 的访问权限,从而允许对端点进行更细粒度的访问。
|
||||
- **主机密钥**:主机密钥也可以是默认的或用户定义的,提供对 Function App 中 **所有函数端点的访问,具有 FUNCTION 访问级别**。
|
||||
- **主密钥**:主密钥 (`_master`) 作为管理密钥,提供提升的权限,包括访问所有函数端点(包括 ADMIN 访问级别)。此 **密钥无法被撤销**。
|
||||
- **系统密钥**:系统密钥由 **特定扩展管理**,并且在访问内部组件使用的 webhook 端点时是必需的。示例包括事件网格触发器和可持久化函数,它们利用系统密钥与各自的 API 安全交互。
|
||||
- **主密钥**:主密钥(`_master`)作为管理密钥,提供提升的权限,包括访问所有函数端点(包括 ADMIN 访问级别)。此 **密钥无法被撤销**。
|
||||
- **系统密钥**:系统密钥由 **特定扩展管理**,并且在访问内部组件使用的 webhook 端点时是必需的。示例包括事件网格触发器和可耐久函数,它们利用系统密钥与各自的 API 安全交互。
|
||||
|
||||
> [!TIP]
|
||||
> 使用密钥访问函数 API 端点的示例:
|
||||
@@ -96,7 +96,7 @@
|
||||
|
||||
### 基本身份验证
|
||||
|
||||
与应用服务一样,Functions 也支持基本身份验证,以通过 **用户名和密码在 URL 中** 连接到 **SCM** 和 **FTP** 部署代码。有关更多信息,请参见:
|
||||
与应用服务一样,Functions 也支持基本身份验证,以通过 **SCM** 和 **FTP** 连接以使用 **Azure 提供的 URL 中的用户名和密码** 部署代码。有关更多信息,请参见:
|
||||
|
||||
{{#ref}}
|
||||
az-app-services.md
|
||||
@@ -104,7 +104,7 @@ az-app-services.md
|
||||
|
||||
### 基于 Github 的部署
|
||||
|
||||
当函数从 Github 仓库生成时,Azure Web 控制台允许在特定仓库中 **自动创建 Github 工作流**,因此每当该仓库更新时,函数的代码也会更新。实际上,Python 函数的 Github Action yaml 如下所示:
|
||||
当函数从 Github 仓库生成时,Azure Web 控制台允许 **在特定仓库中自动创建 Github 工作流**,因此每当该仓库更新时,函数的代码也会更新。实际上,Python 函数的 Github Action yaml 看起来是这样的:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -192,16 +192,16 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
|
||||
```
|
||||
</details>
|
||||
|
||||
此外,**托管身份**也会被创建,以便来自仓库的Github Action能够使用它登录到Azure。这是通过在**托管身份**上生成一个联邦凭证来完成的,允许**发行者** `https://token.actions.githubusercontent.com` 和**主题标识符** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>`。
|
||||
此外,**托管身份**也会被创建,以便来自仓库的Github Action能够使用它登录到Azure。这是通过在**托管身份**上生成一个联合凭证来完成的,允许**发行者** `https://token.actions.githubusercontent.com` 和**主题标识符** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>`。
|
||||
|
||||
> [!CAUTION]
|
||||
> 因此,任何妥协该仓库的人都将能够妥协该功能及其附加的托管身份。
|
||||
> 因此,任何妥协该仓库的人都将能够妥协该函数及其附加的托管身份。
|
||||
|
||||
### 基于容器的部署
|
||||
|
||||
并非所有计划都允许部署容器,但对于允许的计划,配置将包含容器的URL。在API中,**`linuxFxVersion`** 设置将类似于: `DOCKER|mcr.microsoft.com/...`,而在Web控制台中,配置将显示**镜像设置**。
|
||||
|
||||
此外,**不会在与该功能相关的存储**帐户中存储源代码,因为这不是必需的。
|
||||
此外,**不会在与该函数相关的存储**帐户中存储源代码,因为这不是必需的。
|
||||
|
||||
## 枚举
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user