# AWS - S3 Neautentifikovana Enum

{{#include ../../../banners/hacktricks-training.md}}

## S3 Javne Kante

Kanta se smatra **“javnom”** ako **bilo koji korisnik može da pregleda sadržaj** kante, i **“privatnom”** ako se sadržaj kante može **pregledati ili pisati samo od strane određenih korisnika**.

Kompanije mogu imati **pogrešno konfigurisane dozvole za kante** koje daju pristup ili svemu ili svima koji su autentifikovani u AWS-u u bilo kojem nalogu (dakle, bilo kome). Imajte na umu da čak i sa takvim pogrešnim konfiguracijama neke radnje možda neće moći da se izvrše jer kante mogu imati svoje vlastite liste kontrole pristupa (ACL).

**Saznajte više o AWS-S3 pogrešnoj konfiguraciji ovde:** [**http://flaws.cloud**](http://flaws.cloud/) **i** [**http://flaws2.cloud/**](http://flaws2.cloud)

### Pronalaženje AWS Kanti

Različite metode za pronalaženje kada veb stranica koristi AWS za skladištenje nekih resursa:

#### Enumeracija & OSINT:

- Korišćenje **wappalyzer** dodatka za pregledač
- Korišćenje burp-a (**spidering** veba) ili ručnim navigiranjem kroz stranicu, svi **resursi** **učitani** će biti sačuvani u Istoriji.
- **Proverite resurse** na domenima kao što su:

```
http://s3.amazonaws.com/[bucket_name]/
http://[bucket_name].s3.amazonaws.com/
```

- Proverite za **CNAMES** jer `resources.domain.com` može imati CNAME `bucket.s3.amazonaws.com`
- **[s3dns](https://github.com/olizimmermann/s3dns)** – Lagan DNS server koji pasivno identifikuje kante za skladištenje u oblaku (S3, GCP, Azure) analizom DNS saobraćaja. Otkriva CNAME-ove, prati lance razrešenja i usklađuje obrasce kanti, nudeći tiho rešenje za otkrivanje putem brute-force ili API-ja. Savršeno za recon i OSINT radne tokove.
- Proverite [https://buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/), veb sa već **otkrivenim otvorenim kantama**.
- **Ime kante** i **ime domena kante** moraju biti **ista.**
- **flaws.cloud** je u **IP** 52.92.181.107 i ako odete tamo, preusmerava vas na [https://aws.amazon.com/s3/](https://aws.amazon.com/s3/). Takođe, `dig -x 52.92.181.107` daje `s3-website-us-west-2.amazonaws.com`.
- Da biste proverili da li je to kanta, možete takođe **posetiti** [https://flaws.cloud.s3.amazonaws.com/](https://flaws.cloud.s3.amazonaws.com/).

#### Brute-Force

Možete pronaći kante **brute-forcing** imena povezanih sa kompanijom koju testirate:

- [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) (Sadrži listu sa potencijalnim imenima kanti)
- [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)
- [https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/s3](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/s3)
- [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"># Generišite listu reči za kreiranje permutacija
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

# Generišite listu reči na osnovu domena i poddomena za testiranje
## Zapišite te domene i poddomene u 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

# Kreirajte permutacije na osnovu liste sa domenima i poddomenima za napad
goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp
## Prethodni alat je specijalizovan za kreiranje permutacija za poddomene, filtrirajmo tu listu
<strong>### Uklonite linije koje se završavaju sa "."
</strong>cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2
### Kreirajte listu bez TLD
cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3
### Kreirajte listu bez tačaka
cat /tmp/final-words-s3.txt.temp3 | tr -d "." > /tmp/final-words-s3.txt.temp4http://phantom.s3.amazonaws.com/
### Kreirajte listu bez crtica
cat /tmp/final-words-s3.txt.temp3 | tr "." "-" > /tmp/final-words-s3.txt.temp5

## Generišite finalnu listu reči
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

## Pozovite s3scanner
s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt  | grep bucket_exists
</code></pre>

#### Pljačka S3 Kanti

Dajući otvorene S3 kante, [**BucketLoot**](https://github.com/redhuntlabs/BucketLoot) može automatski **tražiti zanimljive informacije**.

### Pronađite Region

Možete pronaći sve podržane regione od strane AWS-a na [**https://docs.aws.amazon.com/general/latest/gr/s3.html**](https://docs.aws.amazon.com/general/latest/gr/s3.html)

#### Preko DNS-a

Možete dobiti region kante sa **`dig`** i **`nslookup`** tako što ćete uraditi **DNS zahtev otkrivene IP adrese**:
```bash
dig flaws.cloud
;; ANSWER SECTION:
flaws.cloud.    5    IN    A    52.218.192.11

nslookup 52.218.192.11
Non-authoritative answer:
11.192.218.52.in-addr.arpa name = s3-website-us-west-2.amazonaws.com.
```
Proverite da li rešen domen sadrži reč "website".\
Možete pristupiti statičkom vebsajtu odlaskom na: `flaws.cloud.s3-website-us-west-2.amazonaws.com`\
ili možete pristupiti kanti posetom: `flaws.cloud.s3-us-west-2.amazonaws.com`



#### Pokušavajući

Ako pokušate da pristupite kanti, ali u **nazivu domena navedete drugu regiju** (na primer, kanta je u `bucket.s3.amazonaws.com`, ali pokušavate da pristupite `bucket.s3-website-us-west-2.amazonaws.com`, tada ćete biti **upučeni na ispravnu lokaciju**:

![](<../../../images/image (106).png>)

### Enumeracija kante

Da biste testirali otvorenost kante, korisnik može jednostavno uneti URL u svoj veb pregledač. Privatna kanta će odgovoriti sa "Pristup odbijen". Javna kanta će navesti prvih 1.000 objekata koji su sačuvani.

Otvoreno za sve:

![](<../../../images/image (201).png>)

Privatno:

![](<../../../images/image (83).png>)

Takođe možete proveriti ovo pomoću cli:
```bash
#Use --no-sign-request for check Everyones permissions
#Use --profile <PROFILE_NAME> to indicate the AWS profile(keys) that youwant to use: Check for "Any Authenticated AWS User" permissions
#--recursive if you want list recursivelyls
#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]
```
Ako korpa nema ime domena, prilikom pokušaja da je enumerišete, **samo stavite ime korpe** i ne celu AWSs3 domenu. Primer: `s3://<BUCKETNAME>`

### Javni URL šablon
```
https://{user_provided}.s3.amazonaws.com
```
### Dobijanje ID-a naloga iz javnog Bucket-a

Moguće je odrediti AWS nalog koristeći novu **`S3:ResourceAccount`** **Ključ uslova politike**. Ovaj uslov **ograničava pristup na osnovu S3 bucket-a** u kojem se nalog nalazi (druge politike zasnovane na nalogu ograničavaju pristup na osnovu naloga u kojem se nalazi traženi princip).\
I pošto politika može sadržati **zvezdice**, moguće je pronaći broj naloga **samo jedan broj u isto vreme**.

Ovaj alat automatizuje proces:
```bash
# Installation
pipx install s3-account-search
pip install s3-account-search
# With a bucket
s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket
# With an object
s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket/path/to/object.ext
```
Ova tehnika takođe funkcioniše sa API Gateway URL-ovima, Lambda URL-ovima, Data Exchange skupovima podataka, pa čak i za dobijanje vrednosti oznaka (ako znate ključ oznake). Možete pronaći više informacija u [**originalnom istraživanju**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) i alatu [**conditional-love**](https://github.com/plerionhq/conditional-love/) za automatizaciju ove eksploatacije.

### Potvrđivanje da je bucket deo AWS naloga

Kao što je objašnjeno u [**ovom blog postu**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/)**, ako imate dozvole za listanje bucketa** moguće je potvrditi accountID kojem bucket pripada slanjem zahteva kao što je:
```bash
curl -X GET "[bucketname].amazonaws.com/" \
-H "x-amz-expected-bucket-owner: [correct-account-id]"

<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">...</ListBucketResult>
```
Ako je greška "Pristup odbijen", to znači da je ID naloga bio pogrešan.

### Korišćeni emailovi kao enumeracija root naloga

Kao što je objašnjeno u [**ovom blog postu**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/), moguće je proveriti da li je email adresa povezana sa nekim AWS nalogom tako što se **pokušava dodeliti email dozvole** preko S3 bucket-a putem ACL-ova. Ako ovo ne izazove grešku, to znači da je email root korisnik nekog AWS naloga:
```python
s3_client.put_bucket_acl(
Bucket=bucket_name,
AccessControlPolicy={
'Grants': [
{
'Grantee': {
'EmailAddress': 'some@emailtotest.com',
'Type': 'AmazonCustomerByEmail',
},
'Permission': 'READ'
},
],
'Owner': {
'DisplayName': 'Whatever',
'ID': 'c3d78ab5093a9ab8a5184de715d409c2ab5a0e2da66f08c2f6cc5c0bdeadbeef'
}
}
)
```
## Reference

- [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ)
- [https://cloudar.be/awsblog/finding-the-account-id-of-any-public-s3-bucket/](https://cloudar.be/awsblog/finding-the-account-id-of-any-public-s3-bucket/)

{{#include ../../../banners/hacktricks-training.md}}
