AWS - S3 Unauthenticated Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Bucket jest uważany za „publiczny”, jeśli każdy użytkownik może wylistować zawartość bucketa, a za „prywatny”, jeśli zawartość bucketa może być wylistowana lub zapisana tylko przez określonych użytkowników.
Firmy mogą mieć błędnie skonfigurowane uprawnienia bucketów, co daje dostęp albo do wszystkiego, albo do wszystkich uwierzytelnionych w AWS w dowolnym koncie (czyli do każdego). Należy pamiętać, że nawet przy takich błędnych konfiguracjach niektóre działania mogą nie być możliwe do wykonania, ponieważ buckety mogą mieć własne listy kontroli dostępu (ACL).
Dowiedz się o błędach konfiguracji AWS-S3 tutaj: http://flaws.cloud i http://flaws2.cloud/
Różne metody, aby znaleźć, kiedy strona internetowa korzysta z AWS do przechowywania niektórych zasobów:
Używając wtyczki przeglądarki wappalyzer
Używając burp (spidering sieci) lub ręcznie nawigując po stronie, wszystkie zasoby załadowane będą zapisane w Historii.
Sprawdź zasoby w domenach takich jak:
Sprawdź CNAMES, ponieważ resources.domain.com
może mieć CNAME bucket.s3.amazonaws.com
Sprawdź https://buckets.grayhatwarfare.com, stronę z już odkrytymi otwartymi bucketami.
Nazwa bucketa i nazwa domeny bucketa muszą być takie same.
flaws.cloud jest w IP 52.92.181.107 i jeśli tam pójdziesz, przekierowuje cię do https://aws.amazon.com/s3/. Również dig -x 52.92.181.107
daje s3-website-us-west-2.amazonaws.com
.
Aby sprawdzić, czy to jest bucket, możesz również odwiedzić https://flaws.cloud.s3.amazonaws.com/.
Możesz znaleźć buckety, brute-forcing nazwy związane z firmą, którą testujesz:
https://github.com/jordanpotti/AWSBucketDump (Zawiera listę potencjalnych nazw bucketów)
Dla otwartych bucketów S3, BucketLoot może automatycznie szukać interesujących informacji.
Możesz znaleźć wszystkie obsługiwane regiony przez AWS w https://docs.aws.amazon.com/general/latest/gr/s3.html
Możesz uzyskać region bucketa za pomocą dig
i nslookup
, wykonując zapytanie DNS odkrytego IP:
Sprawdź, czy rozwiązana domena zawiera słowo "website".
Możesz uzyskać dostęp do statycznej strony internetowej, przechodząc do: flaws.cloud.s3-website-us-west-2.amazonaws.com
lub możesz uzyskać dostęp do koszyka, odwiedzając: flaws.cloud.s3-us-west-2.amazonaws.com
Jeśli spróbujesz uzyskać dostęp do koszyka, ale w nazwie domeny określisz inny region (na przykład koszyk znajduje się w bucket.s3.amazonaws.com
, ale próbujesz uzyskać dostęp do bucket.s3-website-us-west-2.amazonaws.com
, wtedy zostaniesz wskazany na poprawną lokalizację:
Aby przetestować otwartość koszyka, użytkownik może po prostu wpisać adres URL w swojej przeglądarce internetowej. Prywatny koszyk odpowie "Access Denied". Publiczny koszyk wyświetli pierwsze 1,000 obiektów, które zostały zapisane.
Otwarty dla wszystkich:
Prywatny:
Możesz to również sprawdzić za pomocą cli:
Jeśli koszyk nie ma nazwy domeny, próbując go enumerować, wprowadź tylko nazwę koszyka i nie całą domenę AWSs3. Przykład: s3://<BUCKETNAME>
Możliwe jest określenie konta AWS, korzystając z nowego S3:ResourceAccount
klucza warunkowego polityki. Ten warunek ogranicza dostęp na podstawie koszyka S3, w którym znajduje się konto (inne polityki oparte na koncie ograniczają dostęp na podstawie konta, w którym znajduje się żądający podmiot).
A ponieważ polityka może zawierać znaki wieloznaczne, możliwe jest znalezienie numeru konta tylko jeden numer na raz.
To narzędzie automatyzuje ten proces:
Ta technika działa również z adresami URL API Gateway, adresami URL Lambda, zestawami danych Data Exchange, a nawet do uzyskania wartości tagów (jeśli znasz klucz tagu). Więcej informacji można znaleźć w oryginalnych badaniach oraz w narzędziu conditional-love, aby zautomatyzować tę eksploitację.
Jak wyjaśniono w tym wpisie na blogu, jeśli masz uprawnienia do wylistowania koszyka możliwe jest potwierdzenie accountID, do którego należy koszyk, wysyłając żądanie takie jak:
Jeśli błąd to „Access Denied”, oznacza to, że identyfikator konta był błędny.
Jak wyjaśniono w tym wpisie na blogu, możliwe jest sprawdzenie, czy adres e-mail jest powiązany z jakimkolwiek kontem AWS, próbując przyznać e-mailowi uprawnienia do koszyka S3 za pomocą ACL. Jeśli to nie wywoła błędu, oznacza to, że e-mail jest użytkownikiem root jakiegoś konta AWS:
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)