
Scansiona i bucket S3 malconfigurati su API S3-compatibili!
Caratteristiche - Utilizzo - Avvio Rapido - Installazione - Discussioni
INPUT: (1 richiesto)
-bucket string Nome del bucket da controllare.
-bucket-file string File con i nomi dei bucket da controllare.
-mq Connetti a RabbitMQ per ottenere bucket. Richiede la chiave "mq" nel file di configurazione. Default: "false"
OUTPUT:
-db Salva i risultati in un database Postgres. Richiede la chiave "db.uri" nel file di configurazione. Default: "false"
-json Stampa i log su stdout in formato JSON anziché leggibile. Default: "false"
OPZIONI:
-enumerate Enumera gli oggetti del bucket (può richiedere tempo). Default: "false"
-provider string Provider di archiviazione oggetti: aws, custom, digitalocean, dreamhost, gcp, linode, scaleway - custom richiede file di configurazione. Default: "aws"
-threads int Numero di thread per la scansione. Default: "4"
DEBUG:
-verbose Abilita log dettagliati. Default: "false"
-version Stampa la versione. Default: "false"
Se è richiesto un file di configurazione, verranno cercati questi percorsi per config.yml: "." "/etc/s3scanner/" "$HOME/.s3scanner/"
Se hai trovato utile questo strumento, considera di fare una donazione per supportarne lo sviluppo. Puoi trovare le opzioni di sponsorizzazione a lato di questa pagina del repository o in FUNDING.yml
Un enorme ringraziamento a tines per essere uno sponsor continuo di questo progetto.
Scansiona AWS per nomi di bucket elencati in un file, enumera tutti gli oggetti
$ s3scanner -bucket-file nomi.txt -enumerate
Scansiona un bucket su GCP, enumera tutti gli oggetti e salva i risultati nel database
$ s3scanner -provider gcp -db -bucket my-bucket -enumerate
s3scanner richiede esattamente un tipo di input: -bucket, -bucket-file o -mq.
INPUT: (1 richiesto)
-bucket string Nome del bucket da controllare.
-bucket-file string File con i nomi dei bucket da controllare.
-mq Connetti a RabbitMQ per ottenere bucket. Richiede la chiave "mq" nel file di configurazione. Default: "false"
-bucketScansiona un singolo bucket
s3scanner -bucket upload_segreti
-bucket-fileScansiona ogni nome di bucket elencato nel file
s3scanner -bucket-file nomi.txt
dove nomi.txt contiene un nome di bucket per riga
$ cat nomi.txt
bucket123
assets
image-uploads
I nomi di bucket elencati più volte verranno scansionati una sola volta.
-mqSi connette a un server RabbitMQ e consuma messaggi contenenti nomi di bucket da scansionare.
s3scanner -mq
I messaggi devono essere oggetti Bucket codificati in JSON - fare riferimento a mqingest per un esempio di pubblicazione in Golang.
-mq richiede le chiavi mq.uri e mq.queue_name nel file di configurazione. Vedere la sezione File di Configurazione per un esempio.
OUTPUT:
-db Salva i risultati in un database Postgres. Richiede la chiave "db.uri" nel file di configurazione. Default: "false"
-json Stampa i log su stdout in formato JSON anziché leggibile. Default: "false"
-dbSalva tutti i risultati della scansione in un database PostgreSQL
s3scanner -bucket immagini -db
db.uri nel file di configurazione. Vedere la sezione File di Configurazione per un esempio.-db, i risultati verranno anche stampati sulla console se si utilizza -json o la modalità di output leggibile predefinita.s3scanner esegue la funzione di Migrazione Automatica di Gorm ogni volta che si connette al database. Se lo schema ha già tabelle con nomi che Gorm si aspetta, potrebbe modificare la struttura di queste tabelle. Si consiglia di creare uno schema Postgres dedicato ai risultati di s3scanner.-jsonInvece di stampare i risultati della scansione sulla console in formato leggibile, output in JSON machine-readable.
s3scanner -bucket immagini -json
Questo stamperà un oggetto JSON per riga sulla console, che può quindi essere passato a jq o altri strumenti che accettano input JSON.
Esempio: Stampa il nome del bucket e la regione per tutti i bucket esistenti
$ s3scanner -bucket-file nomi.txt -json | jq -r '. | select(.bucket.exists==1) | [.bucket.name, .bucket.region] | join(" - ")'
10000 - eu-west-1
10000.pizza - ap-southeast-1
images_staging - us-west-2
OPZIONI:
-enumerate Enumera gli oggetti del bucket (può richiedere tempo). Default: "false"
-provider string Provider di archiviazione oggetti: aws, custom, digitalocean, dreamhost, gcp, linode, scaleway - custom richiede file di configurazione. Default: "aws"
-threads int Numero di thread per la scansione. Default: "4"
-enumerateEnumera tutti gli oggetti memorizzati nel bucket. Per impostazione predefinita, s3scanner controlla solo i permessi dei bucket.
s3scanner -bucket allegati -enumerate
s3scanner richiederà "pagine" di 1.000 oggetti. Se ci sono più di 5.000 pagine di oggetti, salterà le successive.-providerNome del provider di archiviazione da utilizzare durante il controllo dei bucket.
s3scanner -bucket assets -provider gcp
providers.custom elencate nella sezione File di Configurazione.-threadsNumero di thread per la scansione.
s3scanner -bucket documenti_segreti -threads 8
DEBUG:
-verbose Abilita log dettagliati. Default: "false"
-version Stampa la versione. Default: "false"
-verboseAbilita la registrazione dettagliata dei messaggi di debug. Questa opzione produrrà molti log e non è consigliata a meno che non si stia segnalando un bug.
s3scanner -bucket fogli_di_calcolo -verbose
-versionStampa le informazioni sulla versione ed esce.
s3scanner -version
dev se compilato da sorgente.Un file docker compose è incluso che crea 4 contenitori:
Sono configurati 2 profili:
dev - Ambiente di sviluppo standarddev-mitm - Ambiente configurato con mitmproxy per una più facile osservazione del traffico HTTP durante il debug o l'aggiunta di nuovi provider.Per avviare l'ambiente di sviluppo esegui make dev o make dev-mitm. Entra nel contenitore app con docker exec -it -w /app app_dev sh, poi go run .
Se si utilizza il profilo dev-mitm, apri http://127.0.0.1:8081 in un browser per visualizzare e manipolare le chiamate HTTP effettuate dal contenitore app.
Se si utilizzano flag che richiedono opzioni di configurazione, s3scanner cercherà config.yml in:
/etc/s3scanner/$HOME/.s3scanner/# Richiesto da -db
db:
uri: "postgresql://utente:[email protected]:5432/nome_schema"
# Richiesto da -mq
mq:
queue_name: "aws"
uri: "amqp://utente:password@localhost:5672"
# providers.custom richiesto da `-provider custom`
# address_style - Stile di indirizzamento utilizzato dagli endpoint.
# tipo: stringa
# valori: "path" o "vhost"
# endpoint_format - Formato degli URL degli endpoint. Dovrebbe contenere '$REGION' come segnaposto per il nome della regione
# tipo: stringa
# insecure - Ignora errori SSL
# tipo: booleano
# regions deve contenere almeno un'opzione
providers:
custom:
address_style: "path"
endpoint_format: "https://$REGION.vultrobjects.com"
insecure: false
regions:
- "ewr1"
Quando s3scanner analizza il file di configurazione, prenderà endpoint_format e sostituirà $REGION per tutte le regions elencate per creare un elenco di URL endpoint.
Nota: S3Scanner attualmente supporta solo la scansione per permessi utente anonimi di servizi non AWS
📚 Ulteriori informazioni sulle API non AWS sono disponibili nel wiki del progetto.
Questo strumento tenterà di ottenere tutte le informazioni disponibili su un bucket, ma spetta a te interpretare i risultati.
Possibili permessi per i bucket:
Qualsiasi o tutti questi permessi possono essere impostati per i 2 principali gruppi di utenti:
Cosa significa: Solo perché un bucket non consente la lettura/scrittura delle ACL non significa che non puoi leggere/scrivere file nel bucket. Al contrario, potresti essere in grado di elencare le ACL ma non leggere/scrivere nel bucket.
MIT
nix-shell -p s3scanner |
| NixOS unstable | nix-shell -p s3scanner |
| Altro - Compila da sorgente | git clone [email protected]:sa7mon/S3Scanner.git && cd S3Scanner && go build -o s3scanner . |