AWS - S3 Unauthenticated Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Un bucket è considerato “pubblico” se qualunque 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 mal configurati che danno accesso sia a tutto che a chiunque sia autenticato in AWS in qualsiasi account (quindi a chiunque). Nota che, anche con tali mal configurazioni, alcune azioni potrebbero non essere eseguibili poiché i bucket potrebbero avere le proprie liste di controllo degli accessi (ACL).
Scopri di più sulla mal configurazione di AWS-S3 qui: http://flaws.cloud e http://flaws2.cloud/
Metodi diversi per trovare quando una pagina web utilizza AWS per memorizzare alcune risorse:
Utilizzando il plugin per browser wappalyzer
Utilizzando burp (spidering il web) o navigando manualmente attraverso la pagina, tutte le risorse caricate verranno salvate nella Cronologia.
Controlla le risorse in domini come:
Controlla i CNAMES poiché resources.domain.com
potrebbe avere il CNAME bucket.s3.amazonaws.com
Controlla https://buckets.grayhatwarfare.com, un sito 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 ci vai ti reindirizza a https://aws.amazon.com/s3/. Inoltre, dig -x 52.92.181.107
restituisce s3-website-us-west-2.amazonaws.com
.
Per controllare se è un bucket puoi anche visitare https://flaws.cloud.s3.amazonaws.com/.
Puoi trovare bucket forzando i nomi relativi all'azienda che stai testando:
https://github.com/jordanpotti/AWSBucketDump (Contiene un elenco con potenziali nomi di bucket)
Date le S3 bucket aperti, BucketLoot può automaticamente cercare informazioni interessanti.
Puoi trovare tutte le regioni supportate da AWS in https://docs.aws.amazon.com/general/latest/gr/s3.html
Puoi ottenere la regione di un bucket con un dig
e nslookup
facendo una richiesta DNS dell'IP scoperto:
Controlla che il dominio risolto contenga la parola "website".
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
Se provi ad accedere a un bucket, ma nel nome del dominio specifichi 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
, allora ti verrà indicato il luogo corretto:
Per testare l'apertura del bucket, un utente può semplicemente inserire l'URL nel proprio browser web. Un bucket privato risponderà con "Access Denied". Un bucket pubblico elencherà i primi 1.000 oggetti che sono stati memorizzati.
Aperto a tutti:
Privato:
Puoi anche controllare questo con il cli:
Se il bucket non ha un nome di dominio, quando si tenta di enumerarlo, inserire solo il nome del bucket e non l'intero dominio AWSs3. Esempio: s3://<BUCKETNAME>
È 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 (altre politiche basate su account limitano in base all'account in cui si trova il principale richiedente).
E poiché la politica può contenere caratteri jolly, è possibile trovare il numero dell'account solo un numero alla volta.
Questo strumento automatizza il processo:
Questa tecnica funziona anche con gli URL di API Gateway, gli URL di Lambda, i set di dati di Data Exchange e persino per ottenere il valore dei tag (se conosci la chiave del tag). Puoi trovare ulteriori informazioni nella ricerca originale e nello strumento conditional-love per automatizzare questa sfruttamento.
Come spiegato in questo post del blog, se hai i permessi per elencare un bucket è possibile confermare un accountID a cui appartiene il bucket inviando una richiesta come:
Se l'errore è un “Access Denied” significa che l'ID dell'account era errato.
Come spiegato in questo post del blog, è possibile verificare se un indirizzo email è associato a un qualsiasi account AWS cercando di concedere a un'email permessi su un bucket S3 tramite ACL. Se questo non genera un errore, significa che l'email è un utente root di qualche account AWS:
Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)