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)
A bucket is considered “public” if будь-який користувач може переглядати вміст кошика, and “private” if the bucket's contents can only be listed or written by certain users.
Companies might have buckets permissions miss-configured giving access either to everything or to everyone authenticated in AWS in any account (so to anyone). Note, that even with such misconfigurations some actions might not be able to be performed as buckets might have their own access control lists (ACLs).
Learn about AWS-S3 misconfiguration here: http://flaws.cloud and http://flaws2.cloud/
Different methods to find when a webpage is using AWS to storage some resources:
Using wappalyzer browser plugin
Using burp (spidering the web) or by manually navigating through the page all resources loaded will be save in the History.
Check for resources in domains like:
Check for CNAMES as resources.domain.com
might have the CNAME bucket.s3.amazonaws.com
Check https://buckets.grayhatwarfare.com, a web with already discovered open buckets.
The bucket name and the bucket domain name needs to be the same.
flaws.cloud is in IP 52.92.181.107 and if you go there it redirects you to https://aws.amazon.com/s3/. Also, dig -x 52.92.181.107
gives s3-website-us-west-2.amazonaws.com
.
To check it's a bucket you can also visit https://flaws.cloud.s3.amazonaws.com/.
You can find buckets by brute-forcing names related to the company you are pentesting:
https://github.com/jordanpotti/AWSBucketDump (Contains a list with potential bucket names)
Given S3 open buckets, BucketLoot can automatically search for interesting information.
You can find all the supported regions by AWS in https://docs.aws.amazon.com/general/latest/gr/s3.html
You can get the region of a bucket with a dig
and nslookup
by doing a DNS request of the discovered IP:
Перевірте, що в розв'язаному домені є слово "website".
Ви можете отримати доступ до статичного веб-сайту, перейшовши за адресою: flaws.cloud.s3-website-us-west-2.amazonaws.com
або ви можете отримати доступ до бакету, відвідавши: flaws.cloud.s3-us-west-2.amazonaws.com
Якщо ви намагаєтеся отримати доступ до бакету, але в імені домену вказуєте інший регіон (наприклад, бакет знаходиться в bucket.s3.amazonaws.com
, але ви намагаєтеся отримати доступ до bucket.s3-website-us-west-2.amazonaws.com
, тоді вам буде вказано на правильне місце:
Щоб перевірити відкритість бакету, користувач може просто ввести URL у своєму веб-браузері. Приватний бакет відповість "Access Denied". Публічний бакет відобразить перші 1,000 об'єктів, які були збережені.
Відкрито для всіх:
Приватний:
Ви також можете перевірити це за допомогою cli:
Якщо у бакета немає доменного імені, при спробі його перерахувати, вкажіть лише ім'я бакета і не вводьте ціле доменне ім'я AWSs3. Приклад: s3://<BUCKETNAME>
Можливо визначити обліковий запис AWS, скориставшись новим S3:ResourceAccount
ключем умови політики. Ця умова обмежує доступ на основі S3 бакету, в якому знаходиться обліковий запис (інші політики, що базуються на облікових записах, обмежують доступ на основі облікового запису, в якому знаходиться запитуючий суб'єкт).
І оскільки політика може містити шаблони, можливо знайти номер облікового запису лише по одному числу за раз.
Цей інструмент автоматизує процес:
Ця техніка також працює з URL-адресами API Gateway, URL-адресами Lambda, наборами даних Data Exchange і навіть для отримання значення тегів (якщо ви знаєте ключ тегу). Ви можете знайти більше інформації в оригінальному дослідженні та інструменті conditional-love для автоматизації цього експлуатації.
Як пояснено в цьому блозі, якщо у вас є дозволи на перегляд бакету можливо підтвердити accountID, до якого належить бакет, надіславши запит, як:
Якщо помилка є “Access Denied”, це означає, що ідентифікатор облікового запису був неправильним.
Як пояснено в цьому блозі, можливо перевірити, чи пов'язана електронна адреса з будь-яким обліковим записом AWS, спробувавши надати електронній пошті дозволи на S3 бакет через ACL. Якщо це не викликає помилки, це означає, що електронна адреса є кореневим користувачем деякого облікового запису AWS:
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)