输入:(1 个必填)
-bucket string 要检查的存储桶名称。
-bucket-file string 包含要检查的存储桶名称的文件。
-mq 连接到 RabbitMQ 以获取存储桶。需要配置文件键 "mq"。默认值:"false"
输出:
-db 将结果保存到 Postgres 数据库。需要配置文件键 "db.uri"。默认值:"false"
-json 以 JSON 格式将日志输出到标准输出,而非人类可读格式。默认值:"false"
选项:
-enumerate 枚举存储桶对象(可能耗时)。默认值:"false"
-provider string 对象存储提供商:aws、custom、digitalocean、dreamhost、gcp、linode、scaleway - custom 需要配置文件。默认值:"aws"
-threads int 扫描使用的线程数。默认值:"4"
调试:
-verbose 启用详细日志记录。默认值:"false"
-version 打印版本。默认值:"false"
如果需要配置文件,将在以下位置搜索 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。
输入:(1 个必填)
-bucket string 要检查的存储桶名称。
-bucket-file string 包含要检查的存储桶名称的文件。
-mq 连接到 RabbitMQ 以获取存储桶。需要配置文件键 "mq"。默认值:"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。请参阅配置文件部分获取示例。
输出:
-db 将结果保存到 Postgres 数据库。需要配置文件键 "db.uri"。默认值:"false"
-json 以 JSON 格式将日志输出到标准输出,而非人类可读格式。默认值:"false"
-db将所有扫描结果保存到 PostgreSQL 数据库
s3scanner -bucket images -db
db.uri。请参阅配置文件部分获取示例。-db,结果也会打印到控制台,无论是否使用 -json 或默认的人类可读输出模式。s3scanner 每次连接到数据库时都会运行 Gorm 的 自动迁移 功能。如果
数据库中已存在 Gorm 所期望名称的表,它可能会修改这些表的结构。建议创建一个专门用于 s3scanner 结果的 Postgres 模式(Schema)。-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
选项:
-enumerate 枚举存储桶对象(可能耗时)。默认值:"false"
-provider string 对象存储提供商:aws、custom、digitalocean、dreamhost、gcp、linode、scaleway - custom 需要配置文件。默认值:"aws"
-threads int 扫描使用的线程数。默认值:"4"
-enumerate枚举存储桶中存储的所有对象。默认情况下,s3scanner 只会检查存储桶的权限。
s3scanner -bucket attachments -enumerate
s3scanner 将请求每页 1,000 个对象。如果对象页数超过 5,000 页,它将跳过剩余部分。-provider检查存储桶时要使用的存储提供商名称。
s3scanner -bucket assets -provider gcp
providers.custom 下的配置文件键。-threads扫描使用的线程数。
s3scanner -bucket secret_docs -threads 8
调试:
-verbose 启用详细日志记录。默认值:"false"
-version 打印版本。默认值:"false"
-verbose启用调试消息的详细日志记录。此选项会产生大量日志,除非提交错误报告,否则不建议使用。
s3scanner -bucket spreadsheets -verbose
-version打印版本信息并退出。
s3scanner -version
dev。提供了一个 docker compose 文件,创建了 4 个容器:
配置了 2 个配置文件(profile):
dev - 标准开发环境dev-mitm - 配置了 mitmproxy 的环境,以便在调试或添加新提供商时更容易观察 HTTP 流量。要启动开发环境,运行 make dev 或 make dev-mitm。使用 docker exec -it -w /app app_dev sh 进入 app 容器,然后运行 go run .
如果使用 dev-mitm 配置文件,请在浏览器中打开 http://127.0.0.1:8081 以查看和操作来自 app 容器的 HTTP 调用。
如果使用需要配置选项的标志,s3scanner 将在以下位置搜索 config.yml:
/etc/s3scanner/$HOME/.s3scanner/# -db 必需
db:
uri: "postgresql://user:[email protected]:5432/schema_name"
# -mq 必需
mq:
queue_name: "aws"
uri: "amqp://user:pass@localhost:5672"
# providers.custom 由 `-provider custom` 使用
# address_style - 端点使用的寻址样式。
# 类型:string
# 值:"path" 或 "vhost"
# endpoint_format - 端点 URL 的格式。应包含 '$REGION' 作为区域名称的占位符
# 类型:string
# insecure - 忽略 SSL 错误
# 类型:boolean
# regions 必须至少包含一个选项
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 稳定版 | nix-shell -p s3scanner | |
| NixOS 不稳定版 | nix-shell -p s3scanner | |
| 其他 - 从源码编译 | git clone [email protected]:sa7mon/S3Scanner.git && cd S3Scanner && go build -o s3scanner . |