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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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 CNAMEbucket.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
dajes3-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:
- https://github.com/sa7mon/S3Scanner
- https://github.com/clario-tech/s3-inspector
- https://github.com/jordanpotti/AWSBucketDump (Sadrži listu sa potencijalnim imenima kanti)
- https://github.com/fellchase/flumberboozle/tree/master/flumberbuckets
- https://github.com/smaranchand/bucky
- https://github.com/tomdev/teh_s3_bucketeers
- https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/s3
- https://github.com/Eilonh/s3crets_scanner
- https://github.com/belane/CloudHunter
# 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:
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:
#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:
# 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:
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:
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://cloudar.be/awsblog/finding-the-account-id-of-any-public-s3-bucket/
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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.