Organized notes for cloud penetration testing. Last Updated: 2026-03-27
Cloud pentesting focuses on identifying misconfigurations, excessive permissions, exposed services, and insecure storage in cloud environments. The attack surface differs significantly from traditional on-premise testing.
# Check IP ranges
# AWS: https://ip-ranges.amazonaws.com/ip-ranges.json
# Azure: https://www.microsoft.com/en-us/download/details.aspx?id=56519
# GCP: https://www.gstatic.com/ipranges/cloud.json
# DNS CNAME analysis
dig CNAME target.com
# Look for: *.amazonaws.com, *.azurewebsites.net, *.cloudfront.net, *.googleapis.com
# Check if bucket exists
aws s3 ls s3://<bucket-name> --no-sign-request
# List bucket contents (no auth)
aws s3 ls s3://<bucket-name> --no-sign-request --recursive
# Download all bucket contents
aws s3 sync s3://<bucket-name> ./loot --no-sign-request
# Brute-force bucket names
# Tools: cloud_enum, S3Scanner, bucket-finder
python3 cloud_enum.py -k company_name
# IMDSv1 — no authentication required
curl http://169.254.169.254/latest/meta-data/
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<ROLE_NAME>
# IMDSv2 — requires token
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/
⚠️ CPTS Exam Tip: If you find SSRF in a web application hosted on AWS, always try the metadata endpoint at
169.254.169.254.
# Configure CLI
aws configure
# Enter: Access Key ID, Secret Access Key, Region, Output format
# Enumerate identity
aws sts get-caller-identity
# List S3 buckets
aws s3 ls
# List EC2 instances
aws ec2 describe-instances
# List IAM users
aws iam list-users
# List IAM policies
aws iam list-policies --only-attached
# Get current user's policies
aws iam list-attached-user-policies --user-name <USERNAME>
| Tool | Purpose | Basic Command |
|---|---|---|
| aws-cli | AWS command-line interface | aws sts get-caller-identity |
| Pacu | AWS exploitation framework | python3 pacu.py |
| ScoutSuite | Multi-cloud security auditing | scout aws |
| Prowler | AWS security assessment | prowler aws |
| cloud_enum | Cloud resource enumeration | python3 cloud_enum.py -k target |
| S3Scanner | S3 bucket scanning | s3scanner scan --bucket <name> |
| enumerate-iam | IAM permission enumeration | python3 enumerate-iam.py |
# Check for public blob containers
# URL format: https://<account>.blob.core.windows.net/<container>
curl https://<account>.blob.core.windows.net/<container>?restype=container&comp=list
# MicroBurst enumeration
Invoke-EnumerateAzureBlobs -Base <company_name>
# Azure IMDS
curl -H "Metadata: true" "http://169.254.169.254/metadata/instance?api-version=2021-02-01"
# Get access token
curl -H "Metadata: true" "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"
# AADInternals (PowerShell)
Install-Module AADInternals
Import-Module AADInternals
# Check tenant information
Invoke-AADIntReconAsOutsider -DomainName target.com
# ROADtools
roadrecon auth -u user@target.com -p 'Password'
roadrecon gather
roadrecon gui
| Tool | Purpose |
|---|---|
| Az CLI | Azure command-line interface |
| AzureHound | BloodHound data collection for Azure AD |
| ROADtools | Azure AD exploration |
| MicroBurst | Azure security assessment |
| AADInternals | Azure AD internal operations |
| ScoutSuite | Multi-cloud auditing |
# GCP metadata endpoint
curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/
curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
# Check for public bucket
curl https://storage.googleapis.com/<bucket-name>
# List bucket contents
gsutil ls gs://<bucket-name>
| Misconfiguration | Risk | Cloud Providers |
|---|---|---|
| Public storage buckets | Data exposure | AWS, Azure, GCP |
| Overly permissive IAM roles | Privilege escalation | All |
| IMDSv1 enabled (no token) | Credential theft via SSRF | AWS |
| Public snapshots/AMIs | Data exposure | AWS |
| Unencrypted storage | Data at rest exposure | All |
| Exposed management consoles | Unauthorized access | All |
| Weak/default credentials | Account compromise | All |
| Missing MFA | Account takeover | All |