AWS - S3 Neautentifikovana Enum

Reading time: 8 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

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 i 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 – 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, 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/. 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/.

Brute-Force

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

# 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
### Uklonite linije koje se završavaju sa "."
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

Pljačka S3 Kanti

Dajući otvorene S3 kante, 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

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:

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:

Privatno:

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 i alatu conditional-love za automatizaciju ove eksploatacije.

Potvrđivanje da je bucket deo AWS naloga

Kao što je objašnjeno u ovom blog postu, 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, 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

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks