AWS - S3 Unauthenticated Enum
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 javni bucketovi
A bucket se smatra „javan“ ako bilo koji korisnik može da navede sadržaj bucket-a, i „privatan“ ako se sadržaj bucket-a može navesti ili upisati samo od strane određenih korisnika.
Kompanije mogu imati pogrešno konfigurisane permisije za buckete koje daju pristup ili svemu ili svim korisnicima koji su autentifikovani u AWS u bilo kom nalogu (dakle svima). Imajte na umu da čak i sa takvim nepravilnim konfiguracijama neke akcije možda neće moći da se izvedu jer bucketi mogu imati sopstvene liste kontrole pristupa (ACLs).
Saznajte o AWS-S3 pogrešnim konfiguracijama ovde: http://flaws.cloud i http://flaws2.cloud/
Pronalaženje AWS bucketa
Različite metode za otkrivanje kada veb-stranica koristi AWS za skladištenje nekih resursa:
Enumeracija & OSINT:
- Korišćenje wappalyzer ekstenzije za pregledač
- Korišćenjem burp-a (spidering the web) ili ručnim navigiranjem kroz stranicu svi učitani resursi biće sačuvani u History.
- Proverite resurse na domenima kao:
http://s3.amazonaws.com/[bucket_name]/
http://[bucket_name].s3.amazonaws.com/
- Proverite CNAMES jer
resources.domain.commože imati CNAMEbucket.s3.amazonaws.com - s3dns – Lagani DNS server koji pasivno identifikuje cloud storage buckete (S3, GCP, Azure) analizom DNS saobraćaja. Detektuje CNAMEs, prati chain-ove rezolucije i poklapa obrasce naziva bucketa, nudeći tihu alternativu brute-force ili API-based otkrivanju. Savršen za recon i OSINT tokove rada.
- Proverite https://buckets.grayhatwarfare.com, veb sa već otkrivenim otvorenim bucketima.
- Naziv bucketa i domen bucketa moraju biti isti.
- flaws.cloud se nalazi 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.107dajes3-website-us-west-2.amazonaws.com. - Da proverite da li je u pitanju bucket možete takođe posetiti https://flaws.cloud.s3.amazonaws.com/.
Brute-Force
Možete pronaći buckete brute-forcing imena povezanih sa kompanijom koju pentestirate:
- https://github.com/sa7mon/S3Scanner
- https://github.com/clario-tech/s3-inspector
- https://github.com/jordanpotti/AWSBucketDump (Sadrži listu potencijalnih imena bucketa)
- 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
# 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
# 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
# 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
## The previous tool is specialized increating permutations for subdomains, lets filter that list
### Remove lines ending with "."
cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2
### Create list without TLD
cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3
### Create list without dots
cat /tmp/final-words-s3.txt.temp3 | tr -d "." > /tmp/final-words-s3.txt.temp4http://phantom.s3.amazonaws.com/
### Create list without hyphens
cat /tmp/final-words-s3.txt.temp3 | tr "." "-" > /tmp/final-words-s3.txt.temp5
## 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
## Call s3scanner
s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt | grep bucket_exists
Loot S3 Buckets
Ako su S3 bucketi otvoreni, BucketLoot može automatski potražiti zanimljive informacije.
Pronalaženje regiona
Možete pronaći sve regione koje AWS podržava na https://docs.aws.amazon.com/general/latest/gr/s3.html
Preko DNS-a
Region bucketa možete dobiti pomoću dig i nslookup vršenjem DNS zahteva za otkriveni IP:
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šeni domen sadrži reč “website”.
Možete pristupiti statičkom website-u 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šajem
Ako pokušate da pristupite bucket-u, ali u nazivu domena navedete drugu regiju (na primer bucket je u bucket.s3.amazonaws.com, ali pokušate da pristupite bucket.s3-website-us-west-2.amazonaws.com), bićete usmereni na tačnu lokaciju:
.png)
Enumerisanje bucket-a
Da biste testirali otvorenost bucket-a, korisnik može jednostavno uneti URL u svoj web pregledač. Privatni bucket će odgovoriti sa “Access Denied”. Javni bucket će izlistati prvih 1,000 objekata koji su skladišteni.
Otvoreno za sve:
.png)
Privatno:
.png)
Ovo možete proveriti i 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 bucket nema ime domena, pri pokušaju da ga enumerate, stavite samo ime bucket-a i ne ceo AWSs3 domain. Primer: s3://<BUCKETNAME>
Javni URL šablon
https://{user_provided}.s3.amazonaws.com
Dobijanje Account ID-a iz javnog Bucket-a
Moguće je utvrditi AWS account iskorišćavanjem novog S3:ResourceAccount Policy Condition Key. Ovaj uslov ograničava pristup na osnovu S3 bucket-a u kojem se nalaze account-i (drugi account-based policies ograničavaju na osnovu account-a u kojem se nalazi requesting principal).
I pošto policy može sadržati wildcards, moguće je pronaći broj account-a samo po jednu cifru odjednom.
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 radi sa API Gateway URLs, Lambda URLs, Data Exchange data sets i čak za dobijanje vrednosti tags (ako znate tag key). Više informacija možete pronaći u original research i alatu conditional-love za automatizaciju ove exploitation.
Potvrđivanje da bucket pripada AWS nalogu
Kao što je objašnjeno u this blog post, if you have permissions to list a bucket moguće je potvrditi accountID kojem bucket pripada slanjem zahteva kao:
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 “Access Denied”, to znači da je ID naloga pogrešan.
Korišćene e-mail adrese za enumeraciju root naloga
Kako je objašnjeno u this blog post, moguće je proveriti da li je e-mail adresa povezana sa nekim AWS nalogom tako što ćete pokušati dodeliti e-mail adresi dozvole nad S3 bucket-om preko ACLs. Ako ovo ne izazove grešku, to znači da je ta e-mail adresa 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'
}
}
)
Izvori
- 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.
HackTricks Cloud

