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)
Бакет вважається “публічним”, якщо будь-який користувач може переглядати вміст бакета, і “приватним”, якщо вміст бакета може переглядатися або записуватися лише певними користувачами.
Компанії можуть мати неправильно налаштовані дозволи бакетів, що надає доступ або до всього, або до всіх, хто автентифікований в AWS в будь-якому обліковому записі (тобто до будь-кого). Зверніть увагу, що навіть з такими неправильними налаштуваннями деякі дії можуть не бути виконані, оскільки бакети можуть мати свої власні списки контролю доступу (ACL).
Дізнайтеся про неправильні налаштування AWS-S3 тут: http://flaws.cloud і http://flaws2.cloud/
Різні методи для виявлення, коли веб-сторінка використовує AWS для зберігання деяких ресурсів:
Використання плагіна браузера wappalyzer
Використання burp (спайдеринг вебу) або ручна навігація по сторінці, всі ресурси, завантажені будуть збережені в Історії.
Перевірте ресурси в доменах, таких як:
Перевірте CNAMES, оскільки resources.domain.com
може мати CNAME bucket.s3.amazonaws.com
Перевірте https://buckets.grayhatwarfare.com, веб-сайт з уже виявленими відкритими бакетами.
Ім'я бакета та доменне ім'я бакета повинні бути однаковими.
flaws.cloud знаходиться в IP 52.92.181.107, і якщо ви туди перейдете, вас перенаправить на https://aws.amazon.com/s3/. Також, dig -x 52.92.181.107
дає s3-website-us-west-2.amazonaws.com
.
Щоб перевірити, чи це бакет, ви також можете відвідати https://flaws.cloud.s3.amazonaws.com/.
Ви можете знайти бакети, використовуючи брутфорс імена, пов'язані з компанією, яку ви тестуєте:
https://github.com/jordanpotti/AWSBucketDump (містить список потенційних імен бакетів)
Даючи відкриті S3 бакети, BucketLoot може автоматично шукати цікаву інформацію.
Ви можете знайти всі підтримувані регіони AWS на https://docs.aws.amazon.com/general/latest/gr/s3.html
Ви можете отримати регіон бакета за допомогою dig
та nslookup
, зробивши DNS запит виявленої 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 у своєму веб-браузері. Приватний бакет відповість "Доступ заборонено". Публічний бакет відобразить перші 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)