Cloud Bucket Kontrolleri (yaygın adıyla Bucket Hunting), hedef organizasyonun AWS S3, Azure Blob Storage, Google Cloud Storage gibi bulut depolama servislerinde yanlış yapılandırılmış, kamuya açık veya hassas veri içeren bucket'ları tespit etme sürecidir. Bug bounty ve pentest'lerde en yüksek kritiklikteki bulgulardan biridir.
Cloud Bucket Nedir?
Servis Ürün Adı URL Formatı
AWS S3 Bucket bucket-name.s3.amazonaws.com veya s3.amazonaws.com/bucket-name
AWS S3 Bucket (bölgesel) bucket-name.s3-{region}.amazonaws.com
Azure Blob Storage account-name.blob.core.windows.net/container-name
GCP Cloud Storage bucket-name.storage.googleapis.com
DigitalOcean Spaces bucket-name.nyc3.digitaloceanspaces.com
Alibaba OSS bucket-name.oss-{region}.aliyuncs.com
Bucket Vulnerability Türleri (Güncel):
1. Public Read (Kamuya Açık Okuma) 🔴 Kritik
Durum: Herkes bucket içeriğini listeleyebilir ve dosyaları indirebilir.
http
GET /bucket-name/ HTTP/1.1
Host: bucket-name.s3.amazonaws.com
HTTP/1.1 200 OK
<ListBucketResult>
<Contents>
<Key>database_backup.sql</Key>
<Key>config.json</Key>
<Key>users.csv</Key>
</Contents>
</ListBucketResult>
Tespit:
bash
# AWS CLI ile
aws s3 ls s3://bucket-name --no-sign-request
# curl ile
curl -s "https://bucket-name.s3.amazonaws.com/" | grep -Eo '<Key>[^<]+</Key>'
2. Public Write (Kamuya Açık Yazma) 🔴 Kritik
Durum: Herkes bucket'a dosya yükleyebilir, silebilir veya değiştirebilir.
bash
aws s3 cp malicious.php s3://bucket-name/ --no-sign-request
3. Public Read + Write 🔴 Kritik
Durum: Tam kontrollü bucket. Saldırgan shell upload, malware dağıtımı, veri sızdırma yapabilir.
4. Public List (Kamuya Açık Listeleme) 🟡 Orta
Durum: Bucket içeriği listelenebilir ancak dosyalar indirilemez.
5. Authenticated Users Access 🟡 Orta
Durum: AWS Authenticated Users grubuna açık. AWS hesabı olan herkes erişebilir.
6. Misconfigured Bucket Policies 🟡 Orta
Durum: Policy'de Principal: "*" veya yanlış Condition kullanımı.
7. Insecure CORS Configuration 🟢 Düşük
Durum: Access-Control-Allow-Origin: * ve credential'lar ile.
8. No Encryption (Server-Side) 🟢 Düşük
Durum: Bucket'ta veri şifrelemesi yok.
9. Versioning Enabled with Old Versions 🟡 Orta
Durum: Silinen veya güncellenen dosyaların eski versiyonları erişilebilir.
bash
aws s3api list-object-versions --bucket bucket-name --no-sign-request
Cloud Bucket Keşif Yöntemleri (Güncel):
1. Naming Convention (Adlandırma Tahmini)
En etkili yöntem. Bucket isimleri genellikle pattern'ler içerir.
bash
# Yaygın pattern'ler
hedef-{env}-{service}
hedef-{env}-{service}-{region}
{service}-hedef-{env}
hedef-{project}-{env}
Örnekler:
text
hedef-prod-backup
hedef-dev-static
hedef-staging-assets
hedef-media-uploads
hedef-logs-eu-west-1
hedef-cdn-assets
assets-hedef-prod
uploads.hedef.com
static.hedef.com
media.hedef.com
2. Subdomain/URL Keşfi
bash
# Subdomain'leri bucket olarak dene
subfinder -d hedef.com -silent | while read sub; do
curl -s -o /dev/null -w "%{http_code}" "https://${sub}.s3.amazonaws.com"
done
# Common bucket URL'leri dene
cat bucket_names.txt | while read bucket; do
curl -s -o /dev/null -w "%{http_code}" "https://${bucket}.s3.amazonaws.com"
done
3. Wayback Machine
bash
# Geçmişte referans verilen bucket URL'leri
waybackurls hedef.com | grep -E 's3\.amazonaws\.com|storage\.googleapis\.com|blob\.core\.windows\.net'
4. JavaScript Dosyaları
bash
# JavaScript'ten bucket URL'leri
cat js_files.txt | grep -E 's3\.amazonaws\.com|storage\.googleapis\.com|blob\.core\.windows\.net'
5. Certificate Transparency
bash
# Bucket subdomain'leri
curl -s "https://crt.sh/?q=%.s3.amazonaws.com&output=json" | jq -r '.[].name_value' | grep hedef
6. Shodan / Censys
bash
# S3 bucket arama
shodan search "http.title:'Index of' s3.amazonaws.com hedef"
7. GitHub Dorking
text
org:"hedef" s3
org:"hedef" bucket_name
org:"hedef" AWS_ACCESS_KEY
org:"hedef" aws_access_key_id
Cloud Bucket Test Araçları:
1. AWS CLI (Resmi)
bash
# List bucket contents
aws s3 ls s3://bucket-name --no-sign-request
# List all buckets (requires credentials)
aws s3 ls
# Download file
aws s3 cp s3://bucket-name/file.txt .
# Upload file (test write)
aws s3 cp test.txt s3://bucket-name/test.txt --no-sign-request
# Check bucket permissions
aws s3api get-bucket-acl --bucket bucket-name --no-sign-request
aws s3api get-bucket-policy --bucket bucket-name --no-sign-request
2. Cloud_Enum (Python)
bash
git clone https://github.com/initstring/cloud_enum
cd cloud_enum
pip install -r requirements.txt
python cloud_enum.py -k hedef
python cloud_enum.py -k hedef -s -b -a # Storage, buckets, azure
3. S3Scanner
bash
git clone https://github.com/sa7mon/S3Scanner
cd S3Scanner
pip install -r requirements.txt
python s3scanner.py --bucket hedef
python s3scanner.py --bucket-list buckets.txt --dump
4. DumpsterDiver
bash
git clone https://github.com/securing/DumpsterDiver
cd DumpsterDiver
pip install -r requirements.txt
python DumpsterDiver.py -b bucket-name --no-sign-request
5. BucketLooter
bash
go install github.com/belane/bucketlooter@latest
bucketlooter list -bucket bucket-name -no-sign
bucketlooter download -bucket bucket-name -no-sign -output /tmp/
6. Azure Blob Storage Tools
bash
# AzCopy
azcopy list https://account-name.blob.core.windows.net/container-name
# Azure Storage Explorer (GUI)
7. GCP Storage Tools
bash
# gsutil
gsutil ls gs://bucket-name
gsutil ls gs://bucket-name/**
Cloud Bucket Test Pipeline:
bash
#!/bin/bash
# Cloud Bucket Discovery Pipeline
DOMAIN=$1
OUTPUT_DIR="bucket_discovery_$DOMAIN"
mkdir -p $OUTPUT_DIR
echo "[1] Passive Bucket Discovery"
# Subdomain'leri bucket olarak dene
subfinder -d $DOMAIN -silent > $OUTPUT_DIR/subdomains.txt
while read sub; do
for provider in "s3.amazonaws.com" "storage.googleapis.com" "blob.core.windows.net"; do
curl -s -o /dev/null -w "%{http_code} $sub.$provider\n" "https://$sub.$provider"
done
done < $OUTPUT_DIR/subdomains.txt > $OUTPUT_DIR/bucket_status.txt
echo "[2] Wayback Machine Bucket URLs"
waybackurls $DOMAIN | grep -E 's3\.amazonaws\.com|storage\.googleapis\.com|blob\.core\.windows\.net' > $OUTPUT_DIR/wayback_buckets.txt
echo "[3] JavaScript Bucket URLs"
katana -u https://$DOMAIN -jc -silent | grep -E 's3\.amazonaws\.com|storage\.googleapis\.com|blob\.core\.windows\.net' > $OUTPUT_DIR/js_buckets.txt
echo "[4] Common Bucket Names"
cat common_bucket_names.txt | while read bucket; do
echo $bucket
curl -s -o /dev/null -w "%{http_code} $bucket.s3.amazonaws.com\n" "https://$bucket.s3.amazonaws.com"
done > $OUTPUT_DIR/bucket_fuzzing.txt
echo "[5] Cloud Enumeration"
cloud_enum -k $DOMAIN -o $OUTPUT_DIR/cloud_enum.txt
echo "[6] Check Public Buckets"
grep "200" $OUTPUT_DIR/bucket_status.txt | awk '{print $2}' > $OUTPUT_DIR/public_buckets.txt
echo "[7] Dump Public Buckets"
while read bucket; do
aws s3 ls s3://$bucket --no-sign-request > $OUTPUT_DIR/dump_$bucket.txt
done < $OUTPUT_DIR/public_buckets.txt
echo "[8] Result"
echo "Public Buckets Found: $(cat $OUTPUT_DIR/public_buckets.txt | wc -l)"
Cloud Bucket Kontrol Listesi:
A. Keşif:
Subdomain enumeration yapıldı mı?
Common bucket names fuzzing yapıldı mı?
Wayback Machine kontrolü yapıldı mı?
JavaScript dosyaları kontrolü yapıldı mı?
GitHub dorking yapıldı mı?
Certificate transparency kontrolü yapıldı mı?
B. Test:
Public read kontrolü yapıldı mı?
Public write kontrolü yapıld mı?
Public list kontrolü yapıldı mı?
Bucket policy kontrolü yapıldı mı?
CORS yapılandırması kontrolü yapıldı mı?
Versioning kontrolü yapıldı mı?
C. Hassas Veri:
Hassas dosyalar tespit edildi mi?
API keys bulundu mu?
Credential'lar bulundu mu?
Backup dosyaları bulundu mu?
Log dosyaları bulundu mu?
Güncel İpuçları (2026):
AWS Bucket Policy Scanner: Bucket policy'lerini otomatik kontrol edin
Azure Storage Explorer: Azure blob'ları için en iyi araç
GCP gsutil: GCP bucket'ları için
GitHub Actions: CI/CD'den sızan credential'lar
TruffleHog: GitHub'dan secret sızıntısı tespiti
Bucket-Project-Discovery: Yeni bucket isimleri keşfi
AI-Powered Bucket Naming: Yapay zeka ile olası bucket isimleri tahmini
Cloud Bucket Nedir?
Servis Ürün Adı URL Formatı
AWS S3 Bucket bucket-name.s3.amazonaws.com veya s3.amazonaws.com/bucket-name
AWS S3 Bucket (bölgesel) bucket-name.s3-{region}.amazonaws.com
Azure Blob Storage account-name.blob.core.windows.net/container-name
GCP Cloud Storage bucket-name.storage.googleapis.com
DigitalOcean Spaces bucket-name.nyc3.digitaloceanspaces.com
Alibaba OSS bucket-name.oss-{region}.aliyuncs.com
Bucket Vulnerability Türleri (Güncel):
1. Public Read (Kamuya Açık Okuma) 🔴 Kritik
Durum: Herkes bucket içeriğini listeleyebilir ve dosyaları indirebilir.
http
GET /bucket-name/ HTTP/1.1
Host: bucket-name.s3.amazonaws.com
HTTP/1.1 200 OK
<ListBucketResult>
<Contents>
<Key>database_backup.sql</Key>
<Key>config.json</Key>
<Key>users.csv</Key>
</Contents>
</ListBucketResult>
Tespit:
bash
# AWS CLI ile
aws s3 ls s3://bucket-name --no-sign-request
# curl ile
curl -s "https://bucket-name.s3.amazonaws.com/" | grep -Eo '<Key>[^<]+</Key>'
2. Public Write (Kamuya Açık Yazma) 🔴 Kritik
Durum: Herkes bucket'a dosya yükleyebilir, silebilir veya değiştirebilir.
bash
aws s3 cp malicious.php s3://bucket-name/ --no-sign-request
3. Public Read + Write 🔴 Kritik
Durum: Tam kontrollü bucket. Saldırgan shell upload, malware dağıtımı, veri sızdırma yapabilir.
4. Public List (Kamuya Açık Listeleme) 🟡 Orta
Durum: Bucket içeriği listelenebilir ancak dosyalar indirilemez.
5. Authenticated Users Access 🟡 Orta
Durum: AWS Authenticated Users grubuna açık. AWS hesabı olan herkes erişebilir.
6. Misconfigured Bucket Policies 🟡 Orta
Durum: Policy'de Principal: "*" veya yanlış Condition kullanımı.
7. Insecure CORS Configuration 🟢 Düşük
Durum: Access-Control-Allow-Origin: * ve credential'lar ile.
8. No Encryption (Server-Side) 🟢 Düşük
Durum: Bucket'ta veri şifrelemesi yok.
9. Versioning Enabled with Old Versions 🟡 Orta
Durum: Silinen veya güncellenen dosyaların eski versiyonları erişilebilir.
bash
aws s3api list-object-versions --bucket bucket-name --no-sign-request
Cloud Bucket Keşif Yöntemleri (Güncel):
1. Naming Convention (Adlandırma Tahmini)
En etkili yöntem. Bucket isimleri genellikle pattern'ler içerir.
bash
# Yaygın pattern'ler
hedef-{env}-{service}
hedef-{env}-{service}-{region}
{service}-hedef-{env}
hedef-{project}-{env}
Örnekler:
text
hedef-prod-backup
hedef-dev-static
hedef-staging-assets
hedef-media-uploads
hedef-logs-eu-west-1
hedef-cdn-assets
assets-hedef-prod
uploads.hedef.com
static.hedef.com
media.hedef.com
2. Subdomain/URL Keşfi
bash
# Subdomain'leri bucket olarak dene
subfinder -d hedef.com -silent | while read sub; do
curl -s -o /dev/null -w "%{http_code}" "https://${sub}.s3.amazonaws.com"
done
# Common bucket URL'leri dene
cat bucket_names.txt | while read bucket; do
curl -s -o /dev/null -w "%{http_code}" "https://${bucket}.s3.amazonaws.com"
done
3. Wayback Machine
bash
# Geçmişte referans verilen bucket URL'leri
waybackurls hedef.com | grep -E 's3\.amazonaws\.com|storage\.googleapis\.com|blob\.core\.windows\.net'
4. JavaScript Dosyaları
bash
# JavaScript'ten bucket URL'leri
cat js_files.txt | grep -E 's3\.amazonaws\.com|storage\.googleapis\.com|blob\.core\.windows\.net'
5. Certificate Transparency
bash
# Bucket subdomain'leri
curl -s "https://crt.sh/?q=%.s3.amazonaws.com&output=json" | jq -r '.[].name_value' | grep hedef
6. Shodan / Censys
bash
# S3 bucket arama
shodan search "http.title:'Index of' s3.amazonaws.com hedef"
7. GitHub Dorking
text
org:"hedef" s3
org:"hedef" bucket_name
org:"hedef" AWS_ACCESS_KEY
org:"hedef" aws_access_key_id
Cloud Bucket Test Araçları:
1. AWS CLI (Resmi)
bash
# List bucket contents
aws s3 ls s3://bucket-name --no-sign-request
# List all buckets (requires credentials)
aws s3 ls
# Download file
aws s3 cp s3://bucket-name/file.txt .
# Upload file (test write)
aws s3 cp test.txt s3://bucket-name/test.txt --no-sign-request
# Check bucket permissions
aws s3api get-bucket-acl --bucket bucket-name --no-sign-request
aws s3api get-bucket-policy --bucket bucket-name --no-sign-request
2. Cloud_Enum (Python)
bash
git clone https://github.com/initstring/cloud_enum
cd cloud_enum
pip install -r requirements.txt
python cloud_enum.py -k hedef
python cloud_enum.py -k hedef -s -b -a # Storage, buckets, azure
3. S3Scanner
bash
git clone https://github.com/sa7mon/S3Scanner
cd S3Scanner
pip install -r requirements.txt
python s3scanner.py --bucket hedef
python s3scanner.py --bucket-list buckets.txt --dump
4. DumpsterDiver
bash
git clone https://github.com/securing/DumpsterDiver
cd DumpsterDiver
pip install -r requirements.txt
python DumpsterDiver.py -b bucket-name --no-sign-request
5. BucketLooter
bash
go install github.com/belane/bucketlooter@latest
bucketlooter list -bucket bucket-name -no-sign
bucketlooter download -bucket bucket-name -no-sign -output /tmp/
6. Azure Blob Storage Tools
bash
# AzCopy
azcopy list https://account-name.blob.core.windows.net/container-name
# Azure Storage Explorer (GUI)
7. GCP Storage Tools
bash
# gsutil
gsutil ls gs://bucket-name
gsutil ls gs://bucket-name/**
Cloud Bucket Test Pipeline:
bash
#!/bin/bash
# Cloud Bucket Discovery Pipeline
DOMAIN=$1
OUTPUT_DIR="bucket_discovery_$DOMAIN"
mkdir -p $OUTPUT_DIR
echo "[1] Passive Bucket Discovery"
# Subdomain'leri bucket olarak dene
subfinder -d $DOMAIN -silent > $OUTPUT_DIR/subdomains.txt
while read sub; do
for provider in "s3.amazonaws.com" "storage.googleapis.com" "blob.core.windows.net"; do
curl -s -o /dev/null -w "%{http_code} $sub.$provider\n" "https://$sub.$provider"
done
done < $OUTPUT_DIR/subdomains.txt > $OUTPUT_DIR/bucket_status.txt
echo "[2] Wayback Machine Bucket URLs"
waybackurls $DOMAIN | grep -E 's3\.amazonaws\.com|storage\.googleapis\.com|blob\.core\.windows\.net' > $OUTPUT_DIR/wayback_buckets.txt
echo "[3] JavaScript Bucket URLs"
katana -u https://$DOMAIN -jc -silent | grep -E 's3\.amazonaws\.com|storage\.googleapis\.com|blob\.core\.windows\.net' > $OUTPUT_DIR/js_buckets.txt
echo "[4] Common Bucket Names"
cat common_bucket_names.txt | while read bucket; do
echo $bucket
curl -s -o /dev/null -w "%{http_code} $bucket.s3.amazonaws.com\n" "https://$bucket.s3.amazonaws.com"
done > $OUTPUT_DIR/bucket_fuzzing.txt
echo "[5] Cloud Enumeration"
cloud_enum -k $DOMAIN -o $OUTPUT_DIR/cloud_enum.txt
echo "[6] Check Public Buckets"
grep "200" $OUTPUT_DIR/bucket_status.txt | awk '{print $2}' > $OUTPUT_DIR/public_buckets.txt
echo "[7] Dump Public Buckets"
while read bucket; do
aws s3 ls s3://$bucket --no-sign-request > $OUTPUT_DIR/dump_$bucket.txt
done < $OUTPUT_DIR/public_buckets.txt
echo "[8] Result"
echo "Public Buckets Found: $(cat $OUTPUT_DIR/public_buckets.txt | wc -l)"
Cloud Bucket Kontrol Listesi:
A. Keşif:
Subdomain enumeration yapıldı mı?
Common bucket names fuzzing yapıldı mı?
Wayback Machine kontrolü yapıldı mı?
JavaScript dosyaları kontrolü yapıldı mı?
GitHub dorking yapıldı mı?
Certificate transparency kontrolü yapıldı mı?
B. Test:
Public read kontrolü yapıldı mı?
Public write kontrolü yapıld mı?
Public list kontrolü yapıldı mı?
Bucket policy kontrolü yapıldı mı?
CORS yapılandırması kontrolü yapıldı mı?
Versioning kontrolü yapıldı mı?
C. Hassas Veri:
Hassas dosyalar tespit edildi mi?
API keys bulundu mu?
Credential'lar bulundu mu?
Backup dosyaları bulundu mu?
Log dosyaları bulundu mu?
Güncel İpuçları (2026):
AWS Bucket Policy Scanner: Bucket policy'lerini otomatik kontrol edin
Azure Storage Explorer: Azure blob'ları için en iyi araç
GCP gsutil: GCP bucket'ları için
GitHub Actions: CI/CD'den sızan credential'lar
TruffleHog: GitHub'dan secret sızıntısı tespiti
Bucket-Project-Discovery: Yeni bucket isimleri keşfi
AI-Powered Bucket Naming: Yapay zeka ile olası bucket isimleri tahmini
🔒 Bu içeriği görmek için giriş yapın