AWS - S3 Unauthenticated Enum
S3 Public Buckets
Бакет вважається “публічним”, якщо будь-який користувач може переглядати вміст бакета, і “приватним”, якщо вміст бакета може переглядатися або записуватися лише певними користувачами.
Компанії можуть мати неправильно налаштовані дозволи бакетів, що надає доступ або до всього, або до всіх, хто автентифікований в AWS в будь-якому обліковому записі (тобто до будь-кого). Зверніть увагу, що навіть з такими неправильними налаштуваннями деякі дії можуть не бути виконані, оскільки бакети можуть мати свої власні списки контролю доступу (ACL).
Дізнайтеся про неправильні налаштування AWS-S3 тут: http://flaws.cloud і http://flaws2.cloud/
Finding AWS Buckets
Різні методи для виявлення, коли веб-сторінка використовує AWS для зберігання деяких ресурсів:
Enumeration & OSINT:
Використання плагіна браузера wappalyzer
Використання burp (спайдеринг вебу) або ручна навігація по сторінці, всі ресурси, завантажені будуть збережені в Історії.
Перевірте ресурси в доменах, таких як:
Перевірте CNAMES, оскільки
resources.domain.com
може мати CNAMEbucket.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/.
Brute-Force
Ви можете знайти бакети, використовуючи брутфорс імена, пов'язані з компанією, яку ви тестуєте:
https://github.com/jordanpotti/AWSBucketDump (містить список потенційних імен бакетів)
Loot S3 Buckets
Даючи відкриті бакети S3, BucketLoot може автоматично шукати цікаву інформацію.
Find the Region
Ви можете знайти всі підтримувані регіони AWS на https://docs.aws.amazon.com/general/latest/gr/s3.html
By DNS
Ви можете отримати регіон бакета за допомогою 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 у своєму веб-браузері. Приватний бакет відповість "Access Denied". Публічний бакет відобразить перші 1,000 об'єктів, які були збережені.
Відкрито для всіх:
Приватний:
Ви також можете перевірити це за допомогою cli:
Якщо у бакета немає доменного імені, при спробі його перерахувати, вкажіть лише ім'я бакета і не вводьте ціле доменне ім'я AWSs3. Приклад: s3://<BUCKETNAME>
Шаблон публічного URL
Отримання ID облікового запису з публічного бакету
Можливо визначити обліковий запис AWS, скориставшись новим S3:ResourceAccount
ключем умови політики. Ця умова обмежує доступ на основі S3 бакету, в якому знаходиться обліковий запис (інші політики, що базуються на обліковому записі, обмежують доступ на основі облікового запису, в якому знаходиться запитуючий суб'єкт).
І оскільки політика може містити шаблони, можливо знайти номер облікового запису лише по одному числу за раз.
Цей інструмент автоматизує процес:
Ця техніка також працює з URL-адресами API Gateway, URL-адресами Lambda, наборами даних Data Exchange і навіть для отримання значення тегів (якщо ви знаєте ключ тегу). Ви можете знайти більше інформації в оригінальному дослідженні та інструменті conditional-love для автоматизації цього експлуатації.
Підтвердження, що бакет належить обліковому запису AWS
Як пояснено в цьому блозі, якщо у вас є дозволи на перегляд бакету можливо підтвердити accountID, до якого належить бакет, надіславши запит, як:
Якщо помилка є "Доступ заборонено", це означає, що ідентифікатор облікового запису був неправильним.
Використані електронні адреси для перерахунку кореневих облікових записів
Як пояснено в цьому блозі, можливо перевірити, чи пов'язана електронна адреса з будь-яким обліковим записом AWS, спробувавши надати електронній адресі дозволи на S3 бакет через ACL. Якщо це не викликає помилки, це означає, що електронна адреса є кореневим користувачем деякого облікового запису AWS:
References
Last updated