Translated ['src/pentesting-cloud/aws-security/aws-unauthenticated-enum-

This commit is contained in:
Translator
2025-04-30 15:36:13 +00:00
parent f6c666ec89
commit feddf5325d

View File

@@ -12,12 +12,12 @@
### Пошук AWS Бакетів
Різні методи для виявлення, коли веб-сторінка використовує AWS для зберігання деяких ресурсів:
Різні методи для визначення, коли веб-сторінка використовує AWS для зберігання деяких ресурсів:
#### Перерахування та OSINT:
- Використання плагіна браузера **wappalyzer**
- Використання burp (**спайдеринг** вебу) або ручна навігація по сторінці, всі **ресурси**, **завантажені** будуть збережені в Історії.
- Використання burp (**спайдеринг** вебу) або ручного навігації по сторінці, всі **ресурси**, **завантажені** будуть збережені в Історії.
- **Перевірте ресурси** в доменах, таких як:
```
@@ -26,18 +26,19 @@ http://[bucket_name].s3.amazonaws.com/
```
- Перевірте **CNAMES**, оскільки `resources.domain.com` може мати CNAME `bucket.s3.amazonaws.com`
- **[s3dns](https://github.com/olizimmermann/s3dns)** легкий DNS-сервер, який пасивно ідентифікує бакети хмарного зберігання (S3, GCP, Azure), аналізуючи DNS-трафік. Він виявляє CNAME, слідкує за ланцюгами розв'язання та співвідносить шаблони бакетів, пропонуючи тиху альтернативу брутфорсу або відкриттю через API. Ідеально підходить для розвідки та OSINT-робочих процесів.
- Перевірте [https://buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/), веб-сайт з уже **виявленими відкритими бакетами**.
- **Ім'я бакета** та **доменне ім'я бакета** повинні бути **однаковими.**
- **flaws.cloud** знаходиться за **IP** 52.92.181.107, і якщо ви туди перейдете, вас перенаправить на [https://aws.amazon.com/s3/](https://aws.amazon.com/s3/). Також, `dig -x 52.92.181.107` дає `s3-website-us-west-2.amazonaws.com`.
- **Назва бакета** та **доменна назва бакета** повинні бути **однаковими.**
- **flaws.cloud** знаходиться в **IP** 52.92.181.107, і якщо ви туди перейдете, він перенаправить вас на [https://aws.amazon.com/s3/](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://flaws.cloud.s3.amazonaws.com/).
#### Брутфорс
Ви можете знайти бакети, **брутфорсуючи імена**, пов'язані з компанією, яку ви тестуєте:
Ви можете знайти бакети, **брутфорсуючи назви**, пов'язані з компанією, яку ви тестуєте:
- [https://github.com/sa7mon/S3Scanner](https://github.com/sa7mon/S3Scanner)
- [https://github.com/clario-tech/s3-inspector](https://github.com/clario-tech/s3-inspector)
- [https://github.com/jordanpotti/AWSBucketDump](https://github.com/jordanpotti/AWSBucketDump) (містить список потенційних імен бакетів)
- [https://github.com/jordanpotti/AWSBucketDump](https://github.com/jordanpotti/AWSBucketDump) (містить список потенційних назв бакетів)
- [https://github.com/fellchase/flumberboozle/tree/master/flumberbuckets](https://github.com/fellchase/flumberboozle/tree/master/flumberbuckets)
- [https://github.com/smaranchand/bucky](https://github.com/smaranchand/bucky)
- [https://github.com/tomdev/teh_s3_bucketeers](https://github.com/tomdev/teh_s3_bucketeers)
@@ -75,7 +76,7 @@ cat /tmp/final-words-s3.txt.temp2 /tmp/final-words-s3.txt.temp3 /tmp/final-words
s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt | grep bucket_exists
</code></pre>
#### Лут S3 Бакети
#### Здобуття S3 Бакетів
Даючи відкриті S3 бакети, [**BucketLoot**](https://github.com/redhuntlabs/BucketLoot) може автоматично **шукати цікаву інформацію**.
@@ -85,7 +86,7 @@ s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt | grep buck
#### За DNS
Ви можете отримати регіон бакета за допомогою **`dig`** та **`nslookup`**, зробивши **DNS запит виявленої IP**:
Ви можете отримати регіон бакета за допомогою **`dig`** та **`nslookup`**, зробивши **DNS-запит на виявлену IP-адресу**:
```bash
dig flaws.cloud
;; ANSWER SECTION:
@@ -95,19 +96,21 @@ nslookup 52.218.192.11
Non-authoritative answer:
11.192.218.52.in-addr.arpa name = s3-website-us-west-2.amazonaws.com.
```
Перевірте, чи має розв'язане доменне ім'я слово "website".\
Перевірте, що в розв'язаному домені є слово "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`, тоді вам буде **вказано на правильне місце**:
Якщо ви намагаєтеся отримати доступ до бакету, але в **імені домену вказуєте інший регіон** (наприклад, бакет знаходиться в `bucket.s3.amazonaws.com`, але ви намагаєтеся отримати доступ до `bucket.s3-website-us-west-2.amazonaws.com`, тоді вам буде **вказано на правильне місце**:
![](<../../../images/image (106).png>)
### Перерахування бакету
Щоб перевірити відкритість бакету, користувач може просто ввести URL у своєму веб-браузері. Приватний бакет відповість "Access Denied". Публічний бакет відобразить перші 1,000 об'єктів, які були збережені.
Щоб перевірити відкритість бакету, користувач може просто ввести URL у своєму веб-браузері. Приватний бакет відповість "Доступ заборонено". Публічний бакет відобразить перші 1,000 об'єктів, які були збережені.
Відкрито для всіх:
@@ -125,16 +128,16 @@ Non-authoritative answer:
#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]
```
Якщо у бакета немає доменного імені, при спробі його перерахувати, **вкажіть лише ім'я бакета** і не вводьте ціле доменне ім'я AWSs3. Приклад: `s3://<BUCKETNAME>`
Якщо бакет не має доменного імені, при спробі його перерахувати, **вкажіть лише ім'я бакета** і не вводьте ціле доменне ім'я AWSs3. Приклад: `s3://<BUCKETNAME>`
### Шаблон публічного URL
```
https://{user_provided}.s3.amazonaws.com
```
### Отримання ідентифікатора облікового запису з публічного бакету
### Отримання ID облікового запису з публічного бакету
Можливо визначити обліковий запис AWS, скориставшись новим **`S3:ResourceAccount`** **ключем умови політики**. Ця умова **обмежує доступ на основі S3 бакету**, в якому знаходиться обліковий запис (інші політики, що базуються на облікових записах, обмежують доступ на основі облікового запису, в якому знаходиться запитуючий суб'єкт).\
І оскільки політика може містити **символи підстановки**, можливо знайти номер облікового запису **лише по одному числу за раз**.
І оскільки політика може містити **шаблони**, можливо знайти номер облікового запису **лише по одному числу за раз**.
Цей інструмент автоматизує процес:
```bash
@@ -160,9 +163,9 @@ curl -X GET "[bucketname].amazonaws.com/" \
```
Якщо помилка є "Доступ заборонено", це означає, що ідентифікатор облікового запису був неправильним.
### Використані електронні адреси для перерахунку облікових записів root
### Використані електронні адреси для перерахунку кореневих облікових записів
Як пояснено в [**цьому блозі**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/), можливо перевірити, чи пов'язана електронна адреса з будь-яким обліковим записом AWS, **спробувавши надати електронній адресі дозволи** на S3 бакет через ACL. Якщо це не викликає помилки, це означає, що електронна адреса є користувачем root деякого облікового запису AWS:
Як пояснено в [**цьому блозі**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/), можливо перевірити, чи пов'язана електронна адреса з будь-яким обліковим записом AWS, **спробувавши надати електронній адресі дозволи** на S3 бакет через ACL. Якщо це не викликає помилки, це означає, що електронна адреса є кореневим користувачем якогось облікового запису AWS:
```python
s3_client.put_bucket_acl(
Bucket=bucket_name,