AWS - S3 Unauthenticated Enum

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Publiczne Wiadra S3

Wiadro jest uważane za "publiczne" jeśli każdy użytkownik może wyświetlić zawartość wiadra, a "prywatne" jeśli zawartość wiadra może być wyświetlana lub zapisywana tylko przez określonych użytkowników.

Firmy mogą mieć źle skonfigurowane uprawnienia wiader, umożliwiając dostęp do wszystkiego lub do wszystkich uwierzytelnionych w AWS w dowolnym koncie (czyli do każdego). Należy zauważyć, że nawet przy takich błędach niektóre czynności mogą być niemożliwe do wykonania, ponieważ wiadra mogą mieć własne listy kontroli dostępu (ACL).

Dowiedz się więcej o błędach konfiguracji AWS-S3 tutaj: http://flaws.cloud i http://flaws2.cloud/

Znajdowanie Wiader AWS

Różne metody znajdowania, gdy strona internetowa używa AWS do przechowywania pewnych zasobów:

Wyliczanie & OSINT:

  • Korzystając z wtyczki przeglądarki wappalyzer

  • Korzystając z burp (przeglądanie stron internetowych) lub ręcznego nawigowania po stronie, wszystkie załadowane zasoby zostaną zapisane w Historii.

  • Sprawdź zasoby w domenach takich jak:

http://s3.amazonaws.com/[bucket_name]/
http://[bucket_name].s3.amazonaws.com/
  • Sprawdź CNAMES, ponieważ resources.domain.com może mieć CNAME bucket.s3.amazonaws.com

  • Sprawdź https://buckets.grayhatwarfare.com, stronę z już odkrytymi otwartymi wiadrami.

  • Nazwa wiadra i nazwa domeny wiadra muszą być takie same.

  • flaws.cloud ma IP 52.92.181.107, a jeśli tam przejdziesz, zostaniesz przekierowany do https://aws.amazon.com/s3/. Ponadto, dig -x 52.92.181.107 daje s3-website-us-west-2.amazonaws.com.

  • Aby sprawdzić, czy to wiadro, możesz również odwiedzić https://flaws.cloud.s3.amazonaws.com/.

Siłowe

Możesz znaleźć wiadra, siłowo przeszukując nazwy związane z firmą, którą testujesz pod kątem penetracji:

# Generuj listę słów do tworzenia permutacji
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

# Generuj listę słów na podstawie domen i subdomen do testowania
## Zapisz te domeny i subdomeny w pliku subdomains.txt
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

# Twórz permutacje na podstawie listy domen i subdomen do ataku
goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp
## Poprzednie narzędzie jest specjalizowane w tworzeniu permutacji dla subdomen, filtrowanie tej listy
### Usuń linie kończące się na "."
cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2
### Utwórz listę bez TLD
cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3
### Utwórz listę bez kropek
cat /tmp/final-words-s3.txt.temp3 | tr -d "." > /tmp/final-words-s3.txt.temp4http://phantom.s3.amazonaws.com/
### Utwórz listę bez myślników
cat /tmp/final-words-s3.txt.temp3 | tr "." "-" > /tmp/final-words-s3.txt.temp5

## Wygeneruj ostateczną listę słów
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
## Wywołaj s3scanner
s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt  | grep bucket_exists

Zdobywanie danych z kubełków S3

Dla otwartych kubełków S3, BucketLoot może automatycznie szukać interesujących informacji.

Znajdź region

Możesz znaleźć wszystkie obsługiwane regiony przez AWS na stronie https://docs.aws.amazon.com/general/latest/gr/s3.html

Poprzez DNS

Możesz uzyskać region kubełka za pomocą dig i nslookup wykonując żądanie DNS dla odkrytego adresu IP:

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.

Sprawdź, czy rozwiązana domena zawiera słowo "website". Możesz uzyskać dostęp do statycznej strony internetowej przechodząc pod adres: flaws.cloud.s3-website-us-west-2.amazonaws.com lub możesz uzyskać dostęp do kubełka odwiedzając: flaws.cloud.s3-us-west-2.amazonaws.com

Próbując

Jeśli spróbujesz uzyskać dostęp do kubełka, ale w nazwie domeny podasz inny region (na przykład kubełek znajduje się w bucket.s3.amazonaws.com, ale próbujesz uzyskać dostęp do bucket.s3-website-us-west-2.amazonaws.com), zostaniesz skierowany na właściwe miejsce:

Wyliczanie kubełka

Aby przetestować dostępność kubełka, użytkownik może po prostu wpisać adres URL w przeglądarce internetowej. Prywatny kubełek zwróci komunikat "Odmowa dostępu". Publiczny kubełek wyświetli pierwsze 1 000 przechowywanych obiektów.

Dostępny dla wszystkich:

Prywatny:

Możesz także sprawdzić to za pomocą wiersza poleceń:

#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]

Szablon publicznego adresu URL

Jeśli kubeł nie ma nazwy domeny, podczas próby wyliczenia go, wstaw tylko nazwę kubełka a nie całą domenę AWSs3. Przykład: s3://<NAZWAKUBEŁKA>

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

Uzyskaj identyfikator konta z publicznego kubełka

Możliwe jest określenie konta AWS, wykorzystując nowy S3:ResourceAccount Klucz warunku polityki. Ten warunek ogranicza dostęp na podstawie kubełka 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 po jednej cyfrze.

To narzędzie automatyzuje ten proces:

# 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

Ta technika działa również z adresami URL bramy API, adresami URL funkcji 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 oryginalnym badaniu oraz w narzędziu conditional-love do zautomatyzowania tego wykorzystania.

Referencje

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated