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

This commit is contained in:
Translator
2025-04-30 15:36:12 +00:00
parent 97d110aa79
commit 70275477b5
@@ -2,19 +2,19 @@
{{#include ../../../banners/hacktricks-training.md}}
## Publiczne Buckety S3
## S3 Public Buckets
Bucket jest uważany za **„publiczny”**, jeśli **każdy użytkownik może wylistować zawartość** bucketa, a **„prywatny”**, jeśli zawartość bucketa może być **wylistowana lub zapisana tylko przez określonych użytkowników**.
Bucket jest uważany za **„publiczny”**, jeśli **każdy użytkownik może wylistować zawartość** bucketa, a za **„prywatny”**, jeśli zawartość bucketa może być **wylistowana lub zapisana tylko przez określonych użytkowników**.
Firmy mogą mieć **błędnie skonfigurowane uprawnienia bucketów**, co daje dostęp albo do wszystkiego, albo do wszystkich uwierzytelnionych w AWS w dowolnym koncie (czyli do każdego). Należy pamiętać, że nawet przy takich błędnych konfiguracjach niektóre działania mogą nie być możliwe do wykonania, ponieważ buckety mogą mieć własne listy kontroli dostępu (ACL).
Firmy mogą mieć **błędy w konfiguracji uprawnień bucketów**, dając dostęp albo do wszystkiego, albo do wszystkich uwierzytelnionych w AWS w dowolnym koncie (czyli do każdego). Należy pamiętać, że nawet przy takich błędach niektóre działania mogą nie być możliwe do wykonania, ponieważ buckety mogą mieć własne listy kontroli dostępu (ACL).
**Dowiedz się o błędach konfiguracji AWS-S3 tutaj:** [**http://flaws.cloud**](http://flaws.cloud/) **i** [**http://flaws2.cloud/**](http://flaws2.cloud)
### Znajdowanie Bucketów AWS
### Finding AWS Buckets
Różne metody, aby znaleźć, kiedy strona internetowa korzysta z AWS do przechowywania niektórych zasobów:
#### Enumeracja i OSINT:
#### Enumeration & OSINT:
- Używając wtyczki przeglądarki **wappalyzer**
- Używając burp (**spidering** sieci) lub ręcznie nawigując po stronie, wszystkie **zasoby** **załadowane** będą zapisane w Historii.
@@ -26,14 +26,15 @@ http://[bucket_name].s3.amazonaws.com/
```
- Sprawdź **CNAMES**, ponieważ `resources.domain.com` może mieć CNAME `bucket.s3.amazonaws.com`
- **[s3dns](https://github.com/olizimmermann/s3dns)** Lekki serwer DNS, który pasywnie identyfikuje buckety przechowywania w chmurze (S3, GCP, Azure) analizując ruch DNS. Wykrywa CNAME, śledzi łańcuchy rozwiązań i dopasowuje wzorce bucketów, oferując cichą alternatywę dla odkrywania metodą brute-force lub opartych na API. Idealny do recon i OSINT.
- Sprawdź [https://buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/), stronę z już **odkrytymi otwartymi bucketami**.
- **Nazwa bucketa** i **nazwa domeny bucketa** muszą być **takie same.**
- **flaws.cloud** jest w **IP** 52.92.181.107 i jeśli tam pójdziesz, przekierowuje cię do [https://aws.amazon.com/s3/](https://aws.amazon.com/s3/). Również `dig -x 52.92.181.107` daje `s3-website-us-west-2.amazonaws.com`.
- **flaws.cloud** znajduje się pod **IP** 52.92.181.107, a jeśli tam pójdziesz, przekierowuje cię do [https://aws.amazon.com/s3/](https://aws.amazon.com/s3/). Ponadto, `dig -x 52.92.181.107` zwraca `s3-website-us-west-2.amazonaws.com`.
- Aby sprawdzić, czy to jest bucket, możesz również **odwiedzić** [https://flaws.cloud.s3.amazonaws.com/](https://flaws.cloud.s3.amazonaws.com/).
#### Brute-Force
Możesz znaleźć buckety, **brute-forcing** nazwy związane z firmą, którą testujesz:
Możesz znaleźć buckety, **brute-forcując nazwy** związane z firmą, którą testujesz:
- [https://github.com/sa7mon/S3Scanner](https://github.com/sa7mon/S3Scanner)
- [https://github.com/clario-tech/s3-inspector](https://github.com/clario-tech/s3-inspector)
@@ -45,47 +46,47 @@ Możesz znaleźć buckety, **brute-forcing** nazwy związane z firmą, którą t
- [https://github.com/Eilonh/s3crets_scanner](https://github.com/Eilonh/s3crets_scanner)
- [https://github.com/belane/CloudHunter](https://github.com/belane/CloudHunter)
<pre class="language-bash"><code class="lang-bash"># Generuj listę słów do tworzenia permutacji
<pre class="language-bash"><code class="lang-bash"># Generate a wordlist to create permutations
curl -s https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt > /tmp/words-s3.txt.temp
curl -s https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt >>/tmp/words-s3.txt.temp
cat /tmp/words-s3.txt.temp | sort -u > /tmp/words-s3.txt
# Generuj listę słów na podstawie domen i subdomen do testowania
## Zapisz te domeny i subdomeny w subdomains.txt
# Generate a wordlist based on the domains and subdomains to test
## Write those domains and subdomains in subdomains.txt
cat subdomains.txt > /tmp/words-hosts-s3.txt
cat subdomains.txt | tr "." "-" >> /tmp/words-hosts-s3.txt
cat subdomains.txt | tr "." "\n" | sort -u >> /tmp/words-hosts-s3.txt
# Twórz permutacje na podstawie listy z domenami i subdomenami do ataku
# Create permutations based in a list with the domains and subdomains to attack
goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp
## Poprzednie narzędzie jest specjalizowane w tworzeniu permutacji dla subdomen, przefiltrujmy tę listę
<strong>### Usuń linie kończące się na "."
## The previous tool is specialized increating permutations for subdomains, lets filter that list
<strong>### Remove lines ending with "."
</strong>cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2
### Stwórz listę bez TLD
### Create list without TLD
cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3
### Stwórz listę bez kropek
### Create list without dots
cat /tmp/final-words-s3.txt.temp3 | tr -d "." > /tmp/final-words-s3.txt.temp4http://phantom.s3.amazonaws.com/
### Stwórz listę bez myślników
### Create list without hyphens
cat /tmp/final-words-s3.txt.temp3 | tr "." "-" > /tmp/final-words-s3.txt.temp5
## Generuj ostateczną listę słów
## Generate the final wordlist
cat /tmp/final-words-s3.txt.temp2 /tmp/final-words-s3.txt.temp3 /tmp/final-words-s3.txt.temp4 /tmp/final-words-s3.txt.temp5 | grep -v -- "-\." | awk '{print tolower($0)}' | sort -u > /tmp/final-words-s3.txt
## Wywołaj s3scanner
## Call s3scanner
s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt | grep bucket_exists
</code></pre>
#### Zasoby Buckety S3
#### Loot S3 Buckets
Dzięki otwartym bucketom S3, [**BucketLoot**](https://github.com/redhuntlabs/BucketLoot) może automatycznie **szukać interesujących informacji**.
Dla otwartych bucketów S3, [**BucketLoot**](https://github.com/redhuntlabs/BucketLoot) może automatycznie **szukać interesujących informacji**.
### Znajdź Region
### Find the Region
Możesz znaleźć wszystkie obsługiwane regiony przez AWS w [**https://docs.aws.amazon.com/general/latest/gr/s3.html**](https://docs.aws.amazon.com/general/latest/gr/s3.html)
#### Przez DNS
#### By DNS
Możesz uzyskać region bucketa za pomocą **`dig`** i **`nslookup`**, wykonując **zapytanie DNS odkrytego IP**:
Możesz uzyskać region bucketa za pomocą **`dig`** i **`nslookup`**, wykonując **żądanie DNS odkrytego IP**:
```bash
dig flaws.cloud
;; ANSWER SECTION:
@@ -99,9 +100,11 @@ Sprawdź, czy rozwiązana domena zawiera słowo "website".\
Możesz uzyskać dostęp do statycznej strony internetowej, przechodząc do: `flaws.cloud.s3-website-us-west-2.amazonaws.com`\
lub możesz uzyskać dostęp do koszyka, odwiedzając: `flaws.cloud.s3-us-west-2.amazonaws.com`
#### Próbując
Jeśli spróbujesz uzyskać dostęp do koszyka, ale w **nazwie domeny określisz inny region** (na przykład koszyk znajduje się w `bucket.s3.amazonaws.com`, ale próbujesz uzyskać dostęp do `bucket.s3-website-us-west-2.amazonaws.com`, wtedy zostaniesz **skierowany do poprawnej lokalizacji**:
Jeśli spróbujesz uzyskać dostęp do koszyka, ale w **nazwie domeny wskażesz inny region** (na przykład koszyk znajduje się w `bucket.s3.amazonaws.com`, ale próbujesz uzyskać dostęp do `bucket.s3-website-us-west-2.amazonaws.com`, wtedy zostaniesz **skierowany do poprawnej lokalizacji**:
![](<../../../images/image (106).png>)
@@ -125,9 +128,9 @@ Możesz to również sprawdzić za pomocą cli:
#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]
```
Jeśli koszyk nie ma nazwy domeny, próbując go wyenumerować, **wprowadź tylko nazwę koszyka** i nie całą domenę AWSs3. Przykład: `s3://<BUCKETNAME>`
Jeśli koszyk nie ma nazwy domeny, próbując go enumerować, **wprowadź tylko nazwę koszyka** i nie całą domenę AWSs3. Przykład: `s3://<BUCKETNAME>`
### Szablon publicznego URL
### Szablon publicznego URL-a
```
https://{user_provided}.s3.amazonaws.com
```
@@ -148,7 +151,7 @@ s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket/path/to/
```
Ta technika działa również z adresami URL API Gateway, adresami URL Lambda, zestawami danych Data Exchange, a nawet do uzyskania wartości tagów (jeśli znasz klucz tagu). Więcej informacji można znaleźć w [**oryginalnych badaniach**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) oraz w narzędziu [**conditional-love**](https://github.com/plerionhq/conditional-love/), aby zautomatyzować tę eksploatację.
### Potwierdzenie, że koszyk należy do konta AWS
### Potwierdzanie, że koszyk należy do konta AWS
Jak wyjaśniono w [**tym wpisie na blogu**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/)**, jeśli masz uprawnienia do wylistowania koszyka** możliwe jest potwierdzenie accountID, do którego należy koszyk, wysyłając żądanie takie jak:
```bash