AWS - S3 Unauthenticated Enum

Impara l'hacking di AWS da zero a eroe con htARTE (Esperto Red Team di HackTricks AWS)!

Altri modi per supportare HackTricks:

Bucket Pubblici di S3

Un bucket è considerato "pubblico" se qualsiasi utente può elencare i contenuti del bucket, e "privato" se i contenuti del bucket possono essere elencati o scritti solo da determinati utenti.

Le aziende potrebbero avere permessi dei bucket configurati in modo errato dando accesso a tutto o a tutti gli utenti autenticati in AWS in qualsiasi account (quindi a chiunque). Nota che anche con tali configurazioni errate alcune azioni potrebbero non essere eseguibili poiché i bucket potrebbero avere le proprie liste di controllo degli accessi (ACL).

Scopri di più sulle errate configurazioni di AWS-S3 qui: http://flaws.cloud e http://flaws2.cloud/

Trovare i Bucket AWS

Metodi diversi per trovare quando una pagina web sta utilizzando AWS per memorizzare alcune risorse:

Enumerazione & OSINT:

  • Utilizzando il plugin del browser wappalyzer

  • Utilizzando burp (spidering del web) o navigando manualmente attraverso la pagina tutti i risorse caricati verranno salvati nella Cronologia.

  • Controlla le risorse nei domini come:

http://s3.amazonaws.com/[nome_bucket]/
http://[nome_bucket].s3.amazonaws.com/
  • Controlla i CNAMES poiché resources.domain.com potrebbe avere il CNAME bucket.s3.amazonaws.com

  • Controlla https://buckets.grayhatwarfare.com, un sito web con già bucket aperti scoperti.

  • Il nome del bucket e il nome di dominio del bucket devono essere gli stessi.

  • flaws.cloud è in IP 52.92.181.107 e se vai lì ti reindirizza a https://aws.amazon.com/s3/. Inoltre, dig -x 52.92.181.107 restituisce s3-website-us-west-2.amazonaws.com.

  • Per verificare che sia un bucket puoi anche visitare https://flaws.cloud.s3.amazonaws.com/.

Brute-Force

Puoi trovare i bucket forzando il nome relativo all'azienda che stai testando:

# Genera un elenco di parole per creare permutazioni
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

# Genera un elenco di parole basato sui domini e subdomini da testare
## Scrivi quei domini e subdomini 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

# Crea permutazioni basate su un elenco con i domini e subdomini da attaccare
goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp
## Lo strumento precedente è specializzato nella creazione di permutazioni per i subdomini, filtriamo quell'elenco
### Rimuovi le righe che terminano con "."
cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2
### Crea un elenco senza TLD
cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3
### Crea un elenco senza punti
cat /tmp/final-words-s3.txt.temp3 | tr -d "." > /tmp/final-words-s3.txt.temp4http://phantom.s3.amazonaws.com/
### Crea un elenco senza trattini
cat /tmp/final-words-s3.txt.temp3 | tr "." "-" > /tmp/final-words-s3.txt.temp5

## Genera l'elenco finale delle parole
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
## Esegui s3scanner
s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt  | grep bucket_exists

Saccheggia i Bucket S3

Dati i bucket S3 aperti, BucketLoot può automaticamente cercare informazioni interessanti.

Trova la Regione

Puoi trovare tutte le regioni supportate da AWS su https://docs.aws.amazon.com/general/latest/gr/s3.html

Tramite DNS

Puoi ottenere la regione di un bucket con un dig e nslookup facendo una richiesta DNS dell'IP scoperto:

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.

Verifica che il dominio risolto contenga la parola "sito web". Puoi accedere al sito web statico andando su: flaws.cloud.s3-website-us-west-2.amazonaws.com oppure puoi accedere al bucket visitando: flaws.cloud.s3-us-west-2.amazonaws.com

Provando

Se provi ad accedere a un bucket, ma nel nome di dominio specificato indichi un'altra regione (ad esempio il bucket è in bucket.s3.amazonaws.com ma provi ad accedere a bucket.s3-website-us-west-2.amazonaws.com), verrai indirizzato alla posizione corretta:

Enumerazione del bucket

Per testare l'apertura del bucket, un utente può semplicemente inserire l'URL nel proprio browser web. Un bucket privato risponderà con "Accesso negato". Un bucket pubblico elencherà i primi 1.000 oggetti memorizzati.

Aperto a tutti:

Privato:

Puoi anche verificare ciò con la 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]

Se il bucket non ha un nome di dominio, quando si cerca di enumerarlo, inserire solo il nome del bucket e non l'intero dominio AWSs3. Esempio: s3://<NOME_BUCKET>

Modello di URL pubblico

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

Ottenere l'ID dell'account da Bucket pubblici

È possibile determinare un account AWS sfruttando il nuovo S3:ResourceAccount Policy Condition Key. Questa condizione limita l'accesso in base al bucket S3 in cui si trova un account (altri criteri basati sull'account del principale richiedente limitano in base all'account in cui si trova). E poiché la policy può contenere caratteri jolly, è possibile trovare il numero dell'account solo un numero alla volta.

Questo strumento automatizza il processo:

# 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

Questo metodo funziona anche con gli URL del Gateway API, gli URL delle Lambda, i set di dati di Data Exchange e persino per ottenere il valore dei tag (se si conosce la chiave del tag). Puoi trovare ulteriori informazioni nella ricerca originale e nello strumento conditional-love per automatizzare questa vulnerabilità.

Riferimenti

Impara l'hacking AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated