Files
hacktricks-cloud/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md

9.8 KiB

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 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
  • Proverite https://buckets.grayhatwarfare.com, veb sa već otkrivenim otvorenim kantama.
  • Ime kante i ime domena kante moraju biti ista.
  • flaws.cloud je na 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

S obzirom na 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 otkrivenog IP-a:

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 bucket-u posetom: flaws.cloud.s3-us-west-2.amazonaws.com

Pokušavajući

Ako pokušate da pristupite bucket-u, ali u domen imenu navedete drugu regiju (na primer, bucket 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 bucket-a

Da biste testirali otvorenost bucket-a, korisnik može jednostavno uneti URL u svoj veb pregledač. Privatni bucket će odgovoriti sa "Access Denied". Javni bucket će navesti prvih 1,000 objekata koji su sačuvani.

Otvoreno za sve:

Privatno:

Takođe možete proveriti ovo sa cli:

#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 Policy Condition Key. Ova uslovna ključa ograničava pristup na osnovu S3 bucket-a u kojem se nalog nalazi (druge politike zasnovane na nalogu ograničavaju na osnovu naloga u kojem se nalazi traženi princip).
I pošto politika može sadržati wildcards, moguće je pronaći broj naloga samo jedan broj u isto vreme.

Ovaj alat automatizuje proces:

# 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 kofa deo AWS naloga

Kao što je objašnjeno u ovom blog postu, ako imate dozvole za listanje kofa moguće je potvrditi accountID kojem kofa pripada slanjem zahteva poput:

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 nad S3 bucket-om putem ACL-ova. Ako ovo ne izazove grešku, to znači da je email root korisnik nekog AWS naloga:

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

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