AWS - S3 Unauthenticated Enum

Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

S3 Openbare Emmers

'n Emmertjie word as "openbaar" beskou as enige gebruiker die inhoud kan lys van die emmer, en "privaat" as die inhoud van die emmer slegs deur sekere gebruikers gelis of geskryf kan word.

Maatskappye mag emmer-toestemmings verkeerd konfigureer wat toegang gee tot alles of tot almal wat geïdentifiseer is in AWS in enige rekening (dus aan enigiemand). Let wel, selfs met sulke verkeerde konfigurasies mag sekere aksies nie uitgevoer kan word nie, aangesien emmers hul eie toegangsbeheerlyste (ACL's) mag hê.

Leer meer oor AWS-S3 verkeerde konfigurasie hier: http://flaws.cloud en http://flaws2.cloud/

Vind AWS Emmers

Verskillende metodes om te vind wanneer 'n webbladsy AWS gebruik om sekere hulpbronne te stoor:

Enumerasie & OSINT:

  • Gebruik wappalyzer-blaaierinprop

  • Deur burp te gebruik (spinnekop die web) of deur handmatig deur die bladsy te navigeer, sal alle hulpbronne gelaai in die Geskiedenis gestoor word.

  • Kyk vir hulpbronne in domeine soos:

http://s3.amazonaws.com/[emmer_naam]/
http://[emmer_naam].s3.amazonaws.com/
  • Kyk vir CNAMES aangesien hulpbronne.domein.com die CNAME emmer.s3.amazonaws.com kan hê

  • Kyk na https://buckets.grayhatwarfare.com, 'n webwerf met reeds ontdekte oop emmers.

  • Die emmer-naam en die emmer-domeinnaam moet dieselfde wees.

  • flaws.cloud is op IP 52.92.181.107 en as jy daarheen gaan, stuur dit jou na https://aws.amazon.com/s3/. Ook, dig -x 52.92.181.107 gee s3-website-us-west-2.amazonaws.com.

  • Om te bevestig dat dit 'n emmer is, kan jy ook besoek https://flaws.cloud.s3.amazonaws.com/.

Brute-Krag

Jy kan emmers vind deur name te brute-krag wat verband hou met die maatskappy wat jy pentest:

# Genereer 'n woordelys om permutasies te skep
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

# Genereer 'n woordelys gebaseer op die domeine en subdomeine om te toets
## Skryf daardie domeine en subdomeine 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

# Skep permutasies gebaseer op 'n lys met die domeine en subdomeine om aan te val
goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp
## Die vorige instrument is gespesialiseerd in die skep van permutasies vir subdomeine, laat ons daardie lys filter
### Verwyder lyne wat eindig met "."
cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2
### Skep lys sonder TLD
cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3
### Skep lys sonder kolletjies
cat /tmp/final-words-s3.txt.temp3 | tr -d "." > /tmp/final-words-s3.txt.temp4http://phantom.s3.amazonaws.com/
### Skep lys sonder koppeltekens
cat /tmp/final-words-s3.txt.temp3 | tr "." "-" > /tmp/final-words-s3.txt.temp5

## Genereer die finale woordelys
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
## Roep s3scanner aan
s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt  | grep bucket_exists

Plunder S3 Emmers

Met S3 oop emmers, BucketLoot kan outomaties soek na interessante inligting.

Vind die Streek

Jy kan al die ondersteunde streke deur AWS vind in https://docs.aws.amazon.com/general/latest/gr/s3.html

Deur DNS

Jy kan die streek van 'n emmer kry met 'n dig en nslookup deur 'n DNS versoek van die ontdekte IP te doen:

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.

Kontroleer dat die opgeloste domein die woord "webwerf" bevat. Jy kan die statiese webwerf besoek deur te gaan na: flaws.cloud.s3-website-us-west-2.amazonaws.com of jy kan die emmer besoek deur te gaan na: flaws.cloud.s3-us-west-2.amazonaws.com

Deur te probeer

As jy probeer om 'n emmer te besoek, maar in die domeinnaam spesifiseer jy 'n ander streek (byvoorbeeld die emmer is in emmer.s3.amazonaws.com maar jy probeer om toegang te verkry tot emmer.s3-website-us-west-2.amazonaws.com), dan sal jy aangedui word na die regte plek:

Enumerating die emmer

Om die oopheid van die emmer te toets, kan 'n gebruiker net die URL in hul webblaaier invoer. 'n Privaat emmer sal reageer met "Toegang Geweier". 'n Publieke emmer sal die eerste 1,000 voorwerpe lys wat gestoor is.

Oop vir almal:

Privaat:

Jy kan dit ook nagaan met die opdraggereël:

#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]

Openbare URL-sjabloon

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

Kry Rekening ID van openbare Emmert

Dit is moontlik om 'n AWS-rekening te bepaal deur voordeel te trek uit die nuwe S3:ResourceAccount Beleidsvoorwaarde Sleutel. Hierdie voorwaarde beperk toegang gebaseer op die S3-emmer waarin 'n rekening is (ander rekening-gebaseerde beleide beperk gebaseer op die rekening waarin die versoekende hoof is). En omdat die beleid wildcards kan bevat, is dit moontlik om die rekeningnommer net een nommer op 'n slag te vind.

Hierdie instrument outomatiseer die proses:

# 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

Hierdie tegniek werk ook met API Gateway URL's, Lambda URL's, Data Exchange datastelle en selfs om die waarde van tabelle te kry (as jy die tabelle sleutel ken). Jy kan meer inligting vind in die oorspronklike navorsing en die instrument conditional-love om hierdie uitbuiting te outomatiseer.

Bevestiging dat 'n emmer aan 'n AWS-rekening behoort

Soos verduidelik in hierdie blogpos, as jy toestemmings het om 'n emmer te lys is dit moontlik om 'n rekeningID te bevestig waaraan die emmer behoort deur 'n versoek soos die volgende te stuur:

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>

Indien die fout 'n "Toegang Geweier" is, beteken dit dat die rekening-ID verkeerd was.

Gebruikte E-posse as wortelrekening opsomming

Soos verduidelik in hierdie blogpos, is dit moontlik om te kontroleer of 'n e-posadres verband hou met enige AWS-rekening deur te probeer om 'n e-pos toestemmings te gee oor 'n S3-emmer via ACL's. As dit nie 'n fout veroorsaak nie, beteken dit dat die e-pos 'n hoofgebruiker is van 'n AWS-rekening:

s3_client.put_bucket_acl(
Bucket=bucket_name,
AccessControlPolicy={
'Grants': [
{
'Grantee': {
'EmailAddress': 'some@emailtotest.com',
'Type': 'AmazonCustomerByEmail',
},
'Permission': 'READ'
},
],
'Owner': {
'DisplayName': 'Whatever',
'ID': 'c3d78ab5093a9ab8a5184de715d409c2ab5a0e2da66f08c2f6cc5c0bdeadbeef'
}
}
)

Verwysings

Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated