AWS - S3 Unauthenticated Enum
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ein Bucket wird als „öffentlich“ betrachtet, wenn jeder Benutzer den Inhalt des Buckets auflisten kann, und als „privat“, wenn der Inhalt des Buckets nur von bestimmten Benutzern aufgelistet oder geschrieben werden kann.
Unternehmen könnten Berechtigungen für Buckets falsch konfiguriert haben, was entweder den Zugriff auf alles oder auf alle authentifizierten Benutzer in AWS in jedem Konto (also auf jeden) gewährt. Beachte, dass selbst bei solchen Fehlkonfigurationen einige Aktionen möglicherweise nicht ausgeführt werden können, da Buckets ihre eigenen Zugriffskontrolllisten (ACLs) haben können.
Erfahre hier mehr über AWS-S3 Fehlkonfigurationen: http://flaws.cloud und http://flaws2.cloud/
Verschiedene Methoden, um herauszufinden, ob eine Webseite AWS zur Speicherung von Ressourcen verwendet:
Verwendung des wappalyzer Browser-Plugins
Verwendung von Burp (Spidering des Webs) oder durch manuelles Navigieren durch die Seite, alle geladenen Ressourcen werden im Verlauf gespeichert.
Überprüfe Ressourcen in Domains wie:
Überprüfe auf CNAMES, da resources.domain.com
den CNAME bucket.s3.amazonaws.com
haben könnte
Überprüfe https://buckets.grayhatwarfare.com, eine Webseite mit bereits entdeckten offenen Buckets.
Der Bucket-Name und der Bucket-Domain-Name müssen gleich sein.
flaws.cloud hat die IP 52.92.181.107 und wenn du dorthin gehst, wirst du zu https://aws.amazon.com/s3/ weitergeleitet. Auch dig -x 52.92.181.107
gibt s3-website-us-west-2.amazonaws.com
zurück.
Um zu überprüfen, ob es sich um einen Bucket handelt, kannst du auch besuchen https://flaws.cloud.s3.amazonaws.com/.
Du kannst Buckets finden, indem du Namen im Zusammenhang mit dem Unternehmen, das du pentestest, brute-forcest:
https://github.com/jordanpotti/AWSBucketDump (enthält eine Liste mit potenziellen Bucket-Namen)
Gegebene S3 offene Buckets, BucketLoot kann automatisch nach interessanten Informationen suchen.
Du kannst alle von AWS unterstützten Regionen in https://docs.aws.amazon.com/general/latest/gr/s3.html finden.
Du kannst die Region eines Buckets mit einem dig
und nslookup
erhalten, indem du eine DNS-Anfrage der entdeckten IP machst:
Überprüfen Sie, ob die aufgelöste Domain das Wort "website" enthält.
Sie können auf die statische Website zugreifen, indem Sie zu: flaws.cloud.s3-website-us-west-2.amazonaws.com
gehen
oder Sie können auf den Bucket zugreifen, indem Sie flaws.cloud.s3-us-west-2.amazonaws.com
besuchen.
Wenn Sie versuchen, auf einen Bucket zuzugreifen, aber im Domainnamen eine andere Region angeben (zum Beispiel der Bucket ist in bucket.s3.amazonaws.com
, aber Sie versuchen, auf bucket.s3-website-us-west-2.amazonaws.com
zuzugreifen, dann werden Sie auf den richtigen Standort hingewiesen:
Um die Offenheit des Buckets zu testen, kann ein Benutzer einfach die URL in seinen Webbrowser eingeben. Ein privater Bucket antwortet mit "Zugriff verweigert". Ein öffentlicher Bucket listet die ersten 1.000 Objekte auf, die gespeichert wurden.
Für alle zugänglich:
Privat:
Sie können dies auch mit der CLI überprüfen:
Wenn der Bucket keinen Domainnamen hat, geben Sie beim Versuch, ihn aufzulisten, nur den Bucket-Namen und nicht die gesamte AWSs3-Domain an. Beispiel: s3://<BUCKETNAME>
Es ist möglich, ein AWS-Konto zu bestimmen, indem man den neuen 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 den Zugriff basierend auf dem Konto, in dem sich der anfordernde Principal befindet).
Und da die Richtlinie Wildcard-Zeichen enthalten kann, ist es möglich, die Kontonummer nur eine Zahl nach der anderen zu finden.
Dieses Tool automatisiert den Prozess:
Diese Technik funktioniert auch mit API Gateway-URLs, Lambda-URLs, Data Exchange-Datensätzen und sogar um den Wert von Tags zu erhalten (wenn Sie den Tag-Schlüssel kennen). Weitere Informationen finden Sie in der originalen Forschung und dem Tool conditional-love, um diese Ausnutzung zu automatisieren.
Wie in diesem Blogbeitrag** erklärt, wenn Sie Berechtigungen zum Auflisten eines Buckets haben** ist es möglich, eine accountID zu bestätigen, zu der der Bucket gehört, indem Sie eine Anfrage wie folgt senden:
Wenn der Fehler "Zugriff verweigert" lautet, bedeutet das, dass die Kontonummer falsch war.
Wie in diesem Blogbeitrag erklärt, ist es möglich zu überprüfen, ob eine E-Mail-Adresse mit einem AWS-Konto verbunden ist, indem man versucht, einer E-Mail Berechtigungen über einen S3-Bucket über ACLs zu gewähren. Wenn dies keinen Fehler auslöst, bedeutet das, dass die E-Mail ein Root-Benutzer eines AWS-Kontos ist:
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)