AWS - S3 Unauthenticated Enum

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Öffentliche S3-Buckets

Ein Bucket gilt als "öffentlich", wenn jeder Benutzer den Inhalt des Buckets auflisten kann, und "privat", wenn der Inhalt des Buckets nur von bestimmten Benutzern aufgelistet oder geschrieben werden kann.

Unternehmen könnten Bucket-Berechtigungen falsch konfiguriert haben, sodass entweder auf alles oder auf jeden authentifizierten Benutzer in AWS in jedem Konto zugegriffen werden kann (also auf jeden). Beachten Sie, dass selbst bei solchen Fehlkonfigurationen einige Aktionen möglicherweise nicht ausgeführt werden können, da Buckets ihre eigenen Zugriffssteuerungslisten (ACLs) haben können.

Erfahren Sie hier mehr über AWS-S3-Fehlkonfigurationen: http://flaws.cloud und http://flaws2.cloud/

Auffinden von AWS-Buckets

Verschiedene Methoden, um festzustellen, ob eine Webseite AWS verwendet, um einige Ressourcen zu speichern:

Enumeration & OSINT:

  • Verwendung des Browser-Plugins wappalyzer

  • Durchsuchen mit burp (das Web spidering) oder durch manuelles Navigieren auf der Seite werden alle geladenen Ressourcen im Verlauf gespeichert.

  • Überprüfen Sie Ressourcen auf Domains wie:

http://s3.amazonaws.com/[bucket_name]/
http://[bucket_name].s3.amazonaws.com/
  • Überprüfen Sie CNAMES, da resources.domain.com den CNAME bucket.s3.amazonaws.com haben könnte.

  • Überprüfen Sie https://buckets.grayhatwarfare.com, eine Website mit bereits entdeckten offenen Buckets.

  • Der Bucket-Name und der Bucket-Domänenname müssen übereinstimmen.

  • flaws.cloud hat die IP 52.92.181.107 und wenn Sie dorthin gehen, leitet es Sie zu https://aws.amazon.com/s3/ weiter. Außerdem gibt dig -x 52.92.181.107 s3-website-us-west-2.amazonaws.com zurück.

  • Um zu überprüfen, ob es sich um einen Bucket handelt, können Sie auch https://flaws.cloud.s3.amazonaws.com/ besuchen.

Brute-Force

Sie können Buckets finden, indem Sie Namens-Brute-Force im Zusammenhang mit dem Unternehmen durchführen, das Sie pentesten:

# Generieren einer Wortliste zur Erstellung von Permutationen
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

# Generieren einer Wortliste basierend auf den Domains und Subdomains zum Testen
## Schreiben Sie diese Domains und Subdomains in 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

# Erstellen von Permutationen basierend auf einer Liste mit den Domains und Subdomains zum Angriff
goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp
## Das vorherige Tool ist spezialisiert auf die Erstellung von Permutationen für Subdomains, lassen Sie uns diese Liste filtern
### Entfernen von Zeilen, die mit "." enden
cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2
### Liste ohne TLD erstellen
cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3
### Liste ohne Punkte erstellen
cat /tmp/final-words-s3.txt.temp3 | tr -d "." > /tmp/final-words-s3.txt.temp4http://phantom.s3.amazonaws.com/
### Liste ohne Bindestriche erstellen
cat /tmp/final-words-s3.txt.temp3 | tr "." "-" > /tmp/final-words-s3.txt.temp5

## Endgültige Wortliste generieren
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
## Rufen Sie s3scanner auf
s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt  | grep bucket_exists

Beute S3-Buckets

Bei offenen S3-Buckets kann BucketLoot automatisch nach interessanten Informationen suchen.

Region finden

Sie können alle unterstützten Regionen von AWS unter https://docs.aws.amazon.com/general/latest/gr/s3.html finden

Über DNS

Sie können die Region eines Buckets mit einem dig und nslookup erhalten, indem Sie eine DNS-Anfrage an die entdeckte IP durchführen:

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.

Überprüfen Sie, ob die aufgelöste Domain das Wort "Website" enthält. Sie können auf die statische Website zugreifen, indem Sie zu gehen: flaws.cloud.s3-website-us-west-2.amazonaws.com oder Sie können auf den Bucket zugreifen, indem Sie flaws.cloud.s3-us-west-2.amazonaws.com besuchen

Durch Ausprobieren

Wenn Sie versuchen, auf einen Bucket zuzugreifen, aber in der Domain einen anderen Region angeben (zum Beispiel ist der Bucket in bucket.s3.amazonaws.com, aber Sie versuchen auf bucket.s3-website-us-west-2.amazonaws.com zuzugreifen), werden Sie zum richtigen Ort geleitet:

Auflisten des Buckets

Um die Offenheit des Buckets zu testen, kann ein Benutzer einfach die URL in seinem Webbrowser eingeben. Ein privater Bucket antwortet mit "Zugriff verweigert". Ein öffentlicher Bucket listet die ersten 1.000 gespeicherten Objekte auf.

Für jeden zugänglich:

Privat:

Sie können dies auch mit der Befehlszeile überprüfen:

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

Öffentliche URL-Vorlage

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

Account-ID aus öffentlichem Bucket erhalten

Es ist möglich, ein AWS-Konto zu bestimmen, indem man die neue S3:ResourceAccount Policy Condition Key ausnutzt. Diese Bedingung beschränkt den Zugriff basierend auf dem S3-Bucket, in dem sich ein Konto befindet (andere kontobasierte Richtlinien beschränken sich auf das Konto, in dem sich der anfordernde Hauptbenutzer befindet). Und da die Richtlinie Platzhalter enthalten kann, ist es möglich, die Kontonummer nur eine Nummer nach der anderen zu finden.

Dieses Tool automatisiert den Prozess:

# 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

Diese Technik funktioniert auch mit API Gateway-URLs, Lambda-URLs, Datenaustausch-Datensätzen und sogar, um den Wert von Tags zu erhalten (wenn Sie den Tag-Schlüssel kennen). Weitere Informationen finden Sie in der Originalforschung und im Tool conditional-love, um diese Ausnutzung zu automatisieren.

Referenzen

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated