
Escanea en busca de buckets S3 mal configurados a través de APIs compatibles con S3!
Características - Uso - Inicio rápido - Instalación - Discutir
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 has encontrado útil esta herramienta, por favor considera donar para apoyar su desarrollo. Puedes encontrar opciones de patrocinio en el lateral de esta página del repositorio o en FUNDING.yml
Un enorme agradecimiento a tines por ser un patrocinador continuo de este proyecto.
Escanea AWS por nombres de bucket listados en un archivo, enumera todos los objetos
$ s3scanner -bucket-file names.txt -enumerate
Escanea un bucket en GCP, enumera todos los objetos y guarda los resultados en la base de datos
$ s3scanner -provider gcp -db -bucket my-bucket -enumerate
s3scanner requiere exactamente un tipo de entrada: -bucket, -bucket-file, o -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"
-bucketEscanea un único bucket
s3scanner -bucket secret_uploads
-bucket-fileEscanea cada nombre de bucket listado en el archivo
s3scanner -bucket-file names.txt
donde names.txt contiene un nombre de bucket por línea
$ cat names.txt
bucket123
assets
image-uploads
Los nombres de bucket listados varias veces solo se escanearán una vez.
-mqSe conecta a un servidor RabbitMQ y consume mensajes que contienen nombres de bucket para escanear.
s3scanner -mq
Los mensajes deben ser objetos Bucket codificados en JSON - consulte mqingest para un ejemplo de publicación en Golang.
-mq requiere las claves de archivo de configuración mq.uri y mq.queue_name. Consulte la sección de Archivo de Configuración para un ejemplo.
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"
-dbGuarda todos los resultados del escaneo en una base de datos PostgreSQL
s3scanner -bucket images -db
db.uri. Consulte la sección de Archivo de Configuración para un ejemplo.-db, los resultados también se imprimirán en la consola si se usa -json o el modo de salida legible por humanos predeterminado.s3scanner ejecuta la característica Auto Migration de Gorm cada vez que se conecta a la base de datos. Si
el esquema ya tiene tablas con nombres que Gorm espera, puede cambiar la estructura de esas tablas. Se recomienda crear un esquema Postgres dedicado a los resultados de s3scanner.-jsonEn lugar de mostrar los resultados del escaneo en la consola en formato legible por humanos, muestra JSON legible por máquina.
s3scanner -bucket images -json
Esto imprimirá un objeto JSON por línea en la consola, que luego se puede enviar a través de tuberías a jq u otras herramientas que aceptan entrada JSON.
Ejemplo: Imprime el nombre del bucket y la región para todos los buckets que existen
$ 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"
-enumerateEnumera todos los objetos almacenados en el bucket. Por defecto, s3scanner solo verificará los permisos de los buckets.
s3scanner -bucket attachments -enumerate
s3scanner solicitará "páginas" de 1,000 objetos. Si hay más de 5,000 páginas de objetos, omitirá el resto.-providerNombre del proveedor de almacenamiento a utilizar al verificar los buckets.
s3scanner -bucket assets -provider gcp
providers.custom listadas en la sección de Archivo de Configuración.-threadsNúmero de hilos para escanear.
s3scanner -bucket secret_docs -threads 8
DEBUG:
-verbose Enable verbose logging. Default: "false"
-version Print version Default: "false"
-verboseHabilita el registro detallado de mensajes de depuración. Esta opción generará muchos registros y no se recomienda su uso a menos que se esté reportando un error.
s3scanner -bucket spreadsheets -verbose
-versionImprime la información de la versión y sale.
s3scanner -version
dev si se compila desde el código fuente.Se incluye un archivo docker compose que crea 4 contenedores:
Se configuran 2 perfiles:
dev - Entorno de desarrollo estándardev-mitm - Entorno configurado con mitmproxy para una observación más fácil del tráfico HTTP al depurar o agregar nuevos proveedores.Para levantar el entorno de desarrollo ejecuta make dev o make dev-mitm. Ingresa al contenedor app con docker exec -it -w /app app_dev sh, luego go run .
Si se usa el perfil dev-mitm, abre http://127.0.0.1:8081 en un navegador para ver y manipular las llamadas HTTP realizadas desde el contenedor de la aplicación.
Si se usan banderas que requieren opciones de configuración, s3scanner buscará config.yml en:
/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"
Cuando s3scanner analiza el archivo de configuración, tomará el endpoint_format y reemplazará $REGION por todas las regions listadas para crear una lista de URLs de endpoint.
Nota: S3Scanner actualmente solo soporta el escaneo de permisos de usuario anónimo de servicios que no son AWS
📚 Más información sobre APIs no AWS se puede encontrar en la wiki del proyecto.
Esta herramienta intentará obtener toda la información disponible sobre un bucket, pero depende de ti interpretar los resultados.
Permisos posibles para los buckets:
Cualquiera o todos estos permisos pueden establecerse para los 2 grupos principales de usuarios:
Lo que esto significa: El hecho de que un bucket no permita leer/escribir ACL no significa que no puedas leer/escribir archivos en el bucket. Por el contrario, es posible que puedas listar ACL pero no leer/escribir en el bucket.
MIT
| Plataforma | Versión | Pasos |
|---|
| 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 | |
| Otros - Compilar desde el código fuente | git clone [email protected]:sa7mon/S3Scanner.git && cd S3Scanner && go build -o s3scanner . |