AWS - S3 Unauthenticated Enum

Sıfırdan kahraman olana kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'ı desteklemenin diğer yolları:

S3 Genel Kovaları

Bir kova "genel" olarak kabul edilir eğer kovanın içeriğini herhangi bir kullanıcı listeleyebilir, ve "özel" olarak kabul edilir eğer kova içeriği yalnızca belirli kullanıcılar tarafından listelenebilir veya yazılabilir.

Şirketler, kova izinlerini yanlış yapılandırarak her şeye veya AWS'de herhangi bir hesapta kimlik doğrulanan herkese erişim sağlayabilirler. Unutmayın, bu tür yanlış yapılandırmalarla bazı işlemlerin gerçekleştirilemeyebileceği, çünkü kovaların kendi erişim kontrol listelerine (ACL'ler) sahip olabileceği unutulmamalıdır.

AWS-S3 yanlış yapılandırma hakkında bilgi edinin burada: http://flaws.cloud ve http://flaws2.cloud/

AWS Kovalarını Bulma

Bir web sayfasının AWS'yi kullanıp kullanmadığını bulmanın farklı yöntemleri:

Numaralandırma ve OSINT:

  • wappalyzer tarayıcı eklentisini kullanarak

  • Burp'u kullanarak (web tarayarak) veya sayfa içinde manuel olarak gezinerek tüm yüklenen kaynaklar Geçmiş'te kaydedilecektir.

  • Alanlarda kaynakları kontrol edin:

http://s3.amazonaws.com/[bucket_name]/
http://[bucket_name].s3.amazonaws.com/
  • resources.domain.com gibi CNAMES için kontrol edin, bucket.s3.amazonaws.com CNAME'ye sahip olabilir

  • https://buckets.grayhatwarfare.com adresine bakın, zaten açık kovalar keşfedilmiş bir web sitesi.

  • Kova adı ve kova alan adının aynı olması gerekir.

  • flaws.cloud IP 52.92.181.107'de ve oraya gittiğinizde sizi https://aws.amazon.com/s3/ adresine yönlendirir. Ayrıca, dig -x 52.92.181.107 s3-website-us-west-2.amazonaws.com verir.

  • Bir kovanın olup olmadığını kontrol etmek için ayrıca https://flaws.cloud.s3.amazonaws.com/ adresini ziyaret edebilirsiniz.

Kaba Kuvvet

Şirketi pentest ettiğinizde ilişkili isimleri kaba kuvvet uygulayarak kovaları bulabilirsiniz:

# Permütasyon oluşturmak için bir kelime listesi oluşturun
curl -s https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt > /tmp/words-s3.txt.temp
curl -s https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt >>/tmp/words-s3.txt.temp
cat /tmp/words-s3.txt.temp | sort -u > /tmp/words-s3.txt

# Test etmek için alan adları ve alt alan adlarına dayalı bir kelime listesi oluşturun
## Bu alan adlarını ve alt alan adlarını subdomains.txt dosyasına yazın
cat subdomains.txt > /tmp/words-hosts-s3.txt
cat subdomains.txt | tr "." "-" >> /tmp/words-hosts-s3.txt
cat subdomains.txt | tr "." "\n" | sort -u >> /tmp/words-hosts-s3.txt

# Saldırılacak alan adları ve alt alan adları listesiyle permütasyonlar oluşturun
goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp
## Önceki araç alt alan adları için permütasyonlar oluşturmaya özeldir, bu listeyi filtreleyelim
### ". ile biten satırları kaldır
cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2
### TLD olmadan liste oluştur
cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3
### Noktalı olmayan liste oluştur
cat /tmp/final-words-s3.txt.temp3 | tr -d "." > /tmp/final-words-s3.txt.temp4http://phantom.s3.amazonaws.com/
### Tire olmayan liste oluştur
cat /tmp/final-words-s3.txt.temp3 | tr "." "-" > /tmp/final-words-s3.txt.temp5

## Son kelime listesini oluştur
cat /tmp/final-words-s3.txt.temp2 /tmp/final-words-s3.txt.temp3 /tmp/final-words-s3.txt.temp4 /tmp/final-words-s3.txt.temp5 | grep -v -- "-\." | awk '{print tolower($0)}' | sort -u > /tmp/final-words-s3.txt
## s3scanner'i Çağırın
s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt  | grep bucket_exists

S3 Kovalarını Yağma

Açık S3 kovaları verildiğinde, BucketLoot otomatik olarak ilginç bilgileri arayabilir.

Bölgeyi Bulma

AWS tarafından desteklenen tüm bölgeleri https://docs.aws.amazon.com/general/latest/gr/s3.html adresinde bulabilirsiniz.

DNS ile

Bir kova bölgesini keşfedilen IP'nin DNS isteği yaparak dig ve nslookup ile alabilirsiniz:

dig flaws.cloud
;; ANSWER SECTION:
flaws.cloud.    5    IN    A    52.218.192.11

nslookup 52.218.192.11
Non-authoritative answer:
11.192.218.52.in-addr.arpa name = s3-website-us-west-2.amazonaws.com.

Kontrol Etme

Çözümlenen alan adında "website" kelimesinin bulunduğundan emin olun. Statik web sitesine şu adresten erişebilirsiniz: flaws.cloud.s3-website-us-west-2.amazonaws.com veya kovaya şu adresten erişebilirsiniz: flaws.cloud.s3-us-west-2.amazonaws.com

Deneyerek

Bir kovaya erişmeyi denerseniz, ancak alan adında başka bir bölge belirtirseniz (örneğin kova bucket.s3.amazonaws.com içindeyken bucket.s3-website-us-west-2.amazonaws.com'a erişmeye çalışırsanız, o zaman doğru konuma yönlendirileceksiniz:

Kovayı Numaralandırma

Bir kullanıcının kovanın açıklığını test etmek için sadece URL'yi web tarayıcısına girmesi yeterlidir. Özel bir kova "Erişim Reddedildi" yanıtı verecektir. Genel bir kova ise depolanan ilk 1.000 nesneyi listeleyecektir.

Herkese açık:

Özel:

Ayrıca bunu cli ile de kontrol edebilirsiniz:

#Use --no-sign-request for check Everyones permissions
#Use --profile <PROFILE_NAME> to indicate the AWS profile(keys) that youwant to use: Check for "Any Authenticated AWS User" permissions
#--recursive if you want list recursivelyls
#Opcionally you can select the region if you now it
aws s3 ls s3://flaws.cloud/ [--no-sign-request] [--profile <PROFILE_NAME>] [ --recursive] [--region us-west-2]

Eğer kovada bir alan adı yoksa, numaralandırmaya çalışırken yalnızca kova adını ve tüm AWSs3 alan adını değil. Örnek: s3://<BUCKETNAME>

Genel URL şablonu

https://{user_provided}.s3.amazonaws.com

Genel Kova'dan Hesap Kimliği Alın

Yeni S3:ResourceAccount Politika Koşulu Anahtarı'ndan faydalanarak bir AWS hesabını belirlemek mümkündür. Bu koşul, erişimi S3 kovasına göre kısıtlar (diğer hesap tabanlı politikalar, istekte bulunan ana prensibin bulunduğu hesaba göre kısıtlar). Ve çünkü politika yer tutucuları içerebilir, hesap numarasını sadece bir numara ile birlikte bulmak mümkündür.

Bu araç süreci otomatikleştirir:

# Installation
pipx install s3-account-search
pip install s3-account-search
# With a bucket
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

Bu teknik aynı zamanda API Gateway URL'leri, Lambda URL'leri, Veri Değişim veri setleri ve hatta etiket değerlerini almak için de çalışır (eğer etiket anahtarını biliyorsanız). Daha fazla bilgiyi orijinal araştırmada bulabilirsiniz ve bu sömürüyü otomatikleştirmek için conditional-love aracını kullanabilirsiniz.

Bir kovaya bir AWS hesabının ait olup olmadığını doğrulama

Bu blog yazısında açıklandığı gibi, bir kovayı listeleme izniniz varsa, kovaya ait bir accountID'yi doğrulamak için şu şekilde bir istek göndermek mümkündür:

curl -X GET "[bucketname].amazonaws.com/" \
-H "x-amz-expected-bucket-owner: [correct-account-id]"

<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">...</ListBucketResult>

Kullanılan E-postaların kök hesap numaralandırması

Bu blog gönderisinde açıklandığı gibi, bir e-postanın herhangi bir AWS hesabıyla ilişkili olup olmadığını kontrol etmek mümkündür. Bunun için ACL'ler aracılığıyla bir S3 kovasına bir e-postaya izin vermeyi deneyerek. Bu bir hata tetiklemezse, bu e-postanın bir AWS hesabının kök kullanıcısı olduğu anlamına gelir:

s3_client.put_bucket_acl(
Bucket=bucket_name,
AccessControlPolicy={
'Grants': [
{
'Grantee': {
'EmailAddress': 'some@emailtotest.com',
'Type': 'AmazonCustomerByEmail',
},
'Permission': 'READ'
},
],
'Owner': {
'DisplayName': 'Whatever',
'ID': 'c3d78ab5093a9ab8a5184de715d409c2ab5a0e2da66f08c2f6cc5c0bdeadbeef'
}
}
)

Referanslar

A'dan Z'ye AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert) ile!

HackTricks'ı desteklemenin diğer yolları:

Last updated