
Scannez les buckets S3 mal configurés à travers les API compatibles S3 !
Fonctionnalités - Utilisation - Démarrage rapide - Installation - Discuter
INPUT: (1 required)
-bucket string Name of bucket to check.
-bucket-file string File of bucket names to check.
-mq Connect to RabbitMQ to get buckets. Requires config file key "mq". Default: "false"
OUTPUT:
-db Save results to a Postgres database. Requires config file key "db.uri". Default: "false"
-json Print logs to stdout in JSON format instead of human-readable. Default: "false"
OPTIONS:
-enumerate Enumerate bucket objects (can be time-consuming). Default: "false"
-provider string Object storage provider: aws, custom, digitalocean, dreamhost, gcp, linode, scaleway - custom requires config file. Default: "aws"
-threads int Number of threads to scan with. Default: "4"
DEBUG:
-verbose Enable verbose logging. Default: "false"
-version Print version Default: "false"
If config file is required these locations will be searched for config.yml: "." "/etc/s3scanner/" "$HOME/.s3scanner/"
Si vous avez trouvé cet outil utile, veuillez envisager de faire un don pour soutenir son développement. Vous trouverez les options de sponsoring sur le côté de cette page de dépôt ou dans FUNDING.yml
Un immense merci à tines pour être un sponsor continu de ce projet.
Analyser les noms de buckets AWS listés dans un fichier, énumérer tous les objets
$ s3scanner -bucket-file names.txt -enumerate
Analyser un bucket dans GCP, énumérer tous les objets et sauvegarder les résultats dans la base de données
$ s3scanner -provider gcp -db -bucket my-bucket -enumerate
s3scanner nécessite exactement un type d'entrée : -bucket, -bucket-file ou -mq.
INPUT: (1 required)
-bucket string Name of bucket to check.
-bucket-file string File of bucket names to check.
-mq Connect to RabbitMQ to get buckets. Requires config file key "mq". Default: "false"
-bucketAnalyser un seul bucket
s3scanner -bucket secret_uploads
-bucket-fileAnalyse chaque nom de bucket listé dans le fichier
s3scanner -bucket-file names.txt
où names.txt contient un nom de bucket par ligne
$ cat names.txt
bucket123
assets
image-uploads
Les noms de buckets apparaissant plusieurs fois ne seront analysés qu'une seule fois.
-mqSe connecte à un serveur RabbitMQ et consomme des messages contenant des noms de buckets à analyser.
s3scanner -mq
Les messages doivent être des objets Bucket encodés en JSON - reportez-vous à mqingest pour un exemple de publication en Golang.
-mq nécessite les clés de fichier de configuration mq.uri et mq.queue_name. Voir la section Fichier de configuration pour un exemple.
OUTPUT:
-db Save results to a Postgres database. Requires config file key "db.uri". Default: "false"
-json Print logs to stdout in JSON format instead of human-readable. Default: "false"
-dbSauvegarde tous les résultats d'analyse dans une base de données PostgreSQL
s3scanner -bucket images -db
db.uri. Voir la section Fichier de configuration pour un exemple.-db, les résultats seront également affichés dans la console si vous utilisez -json ou le mode de sortie lisible par défaut.s3scanner exécute la fonctionnalité Auto Migration de Gorm à chaque connexion à la base de données. Si le schéma contient déjà des tables avec les noms attendus par Gorm, ces tables peuvent voir leur structure modifiée. Il est recommandé de créer un schéma Postgres dédié aux résultats de s3scanner.-jsonAu lieu d'afficher les résultats d'analyse dans la console au format lisible par l'humain, affiche du JSON lisible par la machine.
s3scanner -bucket images -json
Cela affichera un objet JSON par ligne dans la console, qui peut ensuite être redirigé vers jq ou d'autres outils acceptant une entrée JSON.
Exemple : Afficher le nom et la région du bucket pour tous les buckets qui existent
$ s3scanner -bucket-file names.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
OPTIONS:
-enumerate Enumerate bucket objects (can be time-consuming). Default: "false"
-provider string Object storage provider: aws, custom, digitalocean, dreamhost, gcp, linode, scaleway - custom requires config file. Default: "aws"
-threads int Number of threads to scan with. Default: "4"
-enumerateÉnumère tous les objets stockés dans le bucket. Par défaut, s3scanner vérifie uniquement les permissions des buckets.
s3scanner -bucket attachments -enumerate
s3scanner demande des « pages » de 1 000 objets. S'il y a plus de 5 000 pages d'objets, il ignorera le reste.-providerNom du fournisseur de stockage à utiliser pour vérifier les buckets.
s3scanner -bucket assets -provider gcp
providers.custom listées dans la section Fichier de configuration.-threadsNombre de threads à utiliser pour l'analyse.
s3scanner -bucket secret_docs -threads 8
DEBUG:
-verbose Enable verbose logging. Default: "false"
-version Print version Default: "false"
-verboseActive la journalisation verbeuse des messages de débogage. Cette option génère beaucoup de logs et n'est pas recommandée sauf en cas de rapport de bug.
s3scanner -bucket spreadsheets -verbose
-versionAffiche les informations de version et quitte.
s3scanner -version
dev si compilé à partir des sources.Un fichier docker compose est inclus, créant 4 conteneurs :
2 profils sont configurés :
dev - Environnement de développement standarddev-mitm - Environnement configuré avec mitmproxy pour une observation plus facile du trafic HTTP lors du débogage ou de l'ajout de nouveaux fournisseurs.Pour lancer l'environnement de développement, exécutez make dev ou make dev-mitm. Accédez au conteneur app avec docker exec -it -w /app app_dev sh, puis go run .
Si vous utilisez le profil dev-mitm, ouvrez http://127.0.0.1:8081 dans un navigateur pour visualiser et manipuler les appels HTTP effectués depuis le conteneur app.
Si vous utilisez des flags nécessitant des options de configuration, s3scanner cherchera config.yml dans :
/etc/s3scanner/$HOME/.s3scanner/# Required by -db
db:
uri: "postgresql://user:[email protected]:5432/schema_name"
# Required by -mq
mq:
queue_name: "aws"
uri: "amqp://user:pass@localhost:5672"
# providers.custom required by `-provider custom`
# address_style - Addressing style used by endpoints.
# type: string
# values: "path" or "vhost"
# endpoint_format - Format of endpoint URLs. Should contain '$REGION' as placeholder for region name
# type: string
# insecure - Ignore SSL errors
# type: boolean
# regions must contain at least one option
providers:
custom:
address_style: "path"
endpoint_format: "https://$REGION.vultrobjects.com"
insecure: false
regions:
- "ewr1"
Lorsque s3scanner analyse le fichier de configuration, il prendra le endpoint_format et remplacera $REGION pour toutes les regions listées afin de créer une liste d'URL de points de terminaison.
Remarque : S3Scanner ne prend actuellement en charge que l'analyse des permissions des utilisateurs anonymes pour les services non-AWS
📚 Plus d'informations sur les API non-AWS peuvent être trouvées dans le wiki du projet.
Cet outil tentera d'obtenir toutes les informations disponibles sur un bucket, mais c'est à vous d'interpréter les résultats.
Permissions possibles pour les buckets :
Toutes ou certaines de ces permissions peuvent être définies pour les 2 principaux groupes d'utilisateurs :
Ce que cela signifie : Ce n'est pas parce qu'un bucket n'autorise pas la lecture/l'écriture des ACL que vous ne pouvez pas lire/écrire des fichiers dans le bucket. Inversement, vous pouvez lister les ACL mais ne pas lire/écrire dans le bucket.
MIT
| Plateforme | Version | Étapes |
|---|
| BlackArch | pacman -S s3scanner | |
| Docker | docker run ghcr.io/sa7mon/s3scanner | |
| Go | go install -v github.com/sa7mon/s3scanner@latest | |
| Kali Linux | apt install s3scanner | |
| MacOS | brew install s3scanner | |
| Parrot OS | apt install s3scanner | |
| Windows - winget | winget install s3scanner | |
| NixOS stable | nix-shell -p s3scanner | |
| NixOS unstable | nix-shell -p s3scanner | |
| Autres - Compiler depuis les sources | git clone [email protected]:sa7mon/S3Scanner.git && cd S3Scanner && go build -o s3scanner . |