
Сканирование неправильно настроенных S3-корзин в S3-совместимых API!
Возможности - Использование - Быстрый старт - Установка - Обсудить
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/"
Если вы нашли этот инструмент полезным, пожалуйста, рассмотрите возможность пожертвования для поддержки его разработки. Вы можете найти варианты спонсорства на боковой панели этой страницы репозитория или в FUNDING.yml
Огромное спасибо tines за постоянную спонсорскую поддержку этого проекта.
Сканирование корзин AWS по списку имен из файла, с перечислением всех объектов
$ s3scanner -bucket-file names.txt -enumerate
Сканирование корзины в GCP, перечисление всех объектов и сохранение результатов в базу данных
$ s3scanner -provider gcp -db -bucket my-bucket -enumerate
s3scanner требует ровно один тип ввода: -bucket, -bucket-file или -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"
-bucketСканировать одну корзину
s3scanner -bucket secret_uploads
-bucket-fileСканирует каждое имя корзины из файла
s3scanner -bucket-file names.txt
где names.txt содержит одно имя корзины на строку
$ cat names.txt
bucket123
assets
image-uploads
Имена корзин, указанные несколько раз, будут просканированы только один раз.
-mqПодключается к серверу RabbitMQ и потребляет сообщения, содержащие имена корзин для сканирования.
s3scanner -mq
Сообщения должны быть JSON-кодированными объектами Bucket - обратитесь к mqingest для примера публикации на Golang.
-mq требует ключи конфигурационного файла mq.uri и mq.queue_name. Смотрите раздел Config File для примера.
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"
-dbСохраняет все результаты сканирования в базу данных PostgreSQL
s3scanner -bucket images -db
db.uri. Смотрите раздел Config File для примера.-db результаты также будут выведены на консоль, если используется -json или режим вывода, понятный человеку.s3scanner запускает функцию Auto Migration библиотеки Gorm каждый раз при подключении к базе данных. Если схема уже содержит таблицы с именами, которые ожидает Gorm, это может изменить структуру этих таблиц. Рекомендуется создать отдельную схему Postgres для результатов s3scanner.-jsonВместо вывода результатов сканирования на консоль в удобочитаемом формате выводит машиночитаемый JSON.
s3scanner -bucket images -json
Это выведет по одному JSON-объекту на строку в консоль, которые затем можно передать в jq или другие инструменты, принимающие JSON на входе.
Пример: Вывести имя корзины и регион для всех существующих корзин
$ 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Перечислить все объекты, хранящиеся в корзине. По умолчанию s3scanner проверяет только разрешения корзин.
s3scanner -bucket attachments -enumerate
s3scanner будет запрашивать «страницы» по 1 000 объектов. Если страниц больше 5 000, остальные будут пропущены.-providerИмя поставщика хранилища, используемого при проверке корзин.
s3scanner -bucket assets -provider gcp
providers.custom, перечисленные в разделе Config File.-threadsКоличество потоков для сканирования.
s3scanner -bucket secret_docs -threads 8
DEBUG:
-verbose Enable verbose logging. Default: "false"
-version Print version Default: "false"
-verboseВключает подробное логирование отладочных сообщений. Этот параметр генерирует много логов и не рекомендуется к использованию, если только вы не составляете отчет об ошибке.
s3scanner -bucket spreadsheets -verbose
-versionВывести информацию о версии и выйти.
s3scanner -version
dev, если скомпилировано из исходного кода.Включен файл docker compose, который создает 4 контейнера:
Настроены 2 профиля:
dev - Стандартная среда разработкиdev-mitm - Среда, настроенная с mitmproxy для упрощения наблюдения за HTTP-трафиком при отладке или добавлении новых провайдеров.Для запуска среды разработки выполните make dev или make dev-mitm. Войдите в контейнер app с помощью docker exec -it -w /app app_dev sh, затем go run .
При использовании профиля dev-mitm откройте http://127.0.0.1:8081 в браузере для просмотра и управления HTTP-вызовами, выполняемыми из контейнера app.
Если используются флаги, требующие параметры конфигурации, s3scanner будет искать config.yml в:
/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"
Когда s3scanner анализирует конфигурационный файл, он берет endpoint_format и заменяет $REGION на все перечисленные regions, чтобы создать список URL-адресов конечных точек.
Примечание: S3Scanner в настоящее время поддерживает сканирование только разрешений анонимных пользователей для не-AWS сервисов.
📚 Дополнительная информация о не-AWS API находится в вики проекта.
Этот инструмент попытается получить всю доступную информацию о корзине, но интерпретация результатов остается за вами.
Возможные разрешения для корзин:
Любое или все из этих разрешений могут быть установлены для 2 основных групп пользователей:
Что это означает: То, что корзина не разрешает чтение/запись ACL, не означает, что вы не можете читать/записывать файлы в корзине. И наоборот, вы можете иметь возможность перечислять ACL, но не читать/записывать в корзину.
MIT
| Платформа | Версия | Шаги |
|---|
| 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 | |
| Другой - сборка из исходников | git clone [email protected]:sa7mon/S3Scanner.git && cd S3Scanner && go build -o s3scanner . |