AWS - S3 Unauthenticated Enum

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Javni S3 Bucketi

Bucket se smatra "javni" ako bilo koji korisnik može da vidi sadržaj bucket-a, i "privatni" ako sadržaj bucket-a može videti ili pisati samo određeni korisnici.

Kompanije mogu imati nespravno konfigurisane dozvole za bucket-e dajući pristup ili svemu ili svakome ko je autentifikovan u AWS-u u bilo kojem nalogu (tako da svako može pristupiti). Imajte na umu da čak i sa takvim nespravnim konfiguracijama neke radnje možda neće moći da se obave jer bucket-i mogu imati svoje liste kontrola pristupa (ACL).

Saznajte više o AWS-S3 nespravnoj konfiguraciji ovde: http://flaws.cloud i http://flaws2.cloud/

Pronalaženje AWS Bucket-a

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

Enumeracija & OSINT:

  • Korišćenjem wappalyzer dodatka za pregledač

  • Korišćenjem burp-a (spidering web stranice) ili ručnim navigiranjem kroz stranicu svi resursi učitani će biti sačuvani u Istoriji.

  • Proverite resurse na domenima kao:

http://s3.amazonaws.com/[ime_bucket-a]/
http://[ime_bucket-a].s3.amazonaws.com/
  • Proverite CNAMES jer resursi.domen.com može imati CNAME bucket.s3.amazonaws.com

  • Proverite https://buckets.grayhatwarfare.com, veb sa već otkrivenim otvorenim bucket-ima.

  • Ime bucket-a i domen bucket-a moraju biti isti.

  • 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 u pitanju bucket možete takođe posetiti https://flaws.cloud.s3.amazonaws.com/.

Brute-Force

Možete pronaći bucket-e brute-forcing imena povezana sa kompanijom koju pentestirate:

# 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
## Upisujte 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 konačnu 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
## Pozovi 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 automatski može tražiti zanimljive informacije.

Pronalaženje regiona

Sve podržane regione od strane AWS-a možete pronaći na https://docs.aws.amazon.com/general/latest/gr/s3.html

Preko DNS-a

Možete dobiti region kante pomoću dig i nslookup izvršavajući DNS zahtev otkrivenoj IP adresi:

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šena domena sadrži reč "website". Možete pristupiti statičkom veb sajtu 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šaj

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

Enumerisanje kante

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

Otvoreno za sve:

Privatno:

Takođe možete proveriti ovo pomoću komandne linije:

#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 kanta nema ime domena, prilikom pokušaja enumeracije, samo stavite ime kante a ne ceo AWSs3 domen. Primer: s3://<IMEKANTE>

Šablon javnog URL-a

https://{user_provided}.s3.amazonaws.com

Dobijanje ID naloga sa javnog Bucket-a

Moguće je odrediti AWS nalog iskorišćavanjem nove S3:ResourceAccount Policy Condition Key. Ova uslov ograničava pristup na osnovu S3 bucket-a u kojem se nalazi nalog (ostale politike zasnovane na nalozima ograničavaju se na osnovu naloga u kojem se nalazi zahtevajući princip). I pošto politika može sadržati zvezdice, moguće je pronaći broj naloga samo po 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 URL-ovima API Gateway-a, Lambda URL-ovima, Data Exchange data setovima čak i za dobijanje vrednosti oznaka (ako znate ključ oznake). Više informacija možete pronaći u originalnom istraživanju i alatu conditional-love za automatizaciju ovog iskorišćavanja.

Potvrđivanje da li je kanta povezana sa AWS nalogom

Kao što je objašnjeno u ovom blog postu, ako imate dozvole da navedete kantu, moguće je potvrditi accountID kojem kanta 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 netačan.

Korišćeni e-mailovi za enumeraciju root naloga

Kao što je objašnjeno u ovom blog postu, moguće je proveriti da li je e-mail adresa povezana sa nekim AWS nalogom pokušavajući da dodelite dozvole za e-mail nad S3 bucket-om putem ACL-ova. Ako ovo ne izazove grešku, to znači da je e-mail 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

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated