xeloxa/s3finder
GitHub: xeloxa/s3finder
一款结合 LLM 智能命名与传统排列引擎的高性能 AWS S3 Bucket 枚举工具,帮助安全人员在侦察阶段快速发现隐藏的云存储资产。
Stars: 6 | Forks: 1
AI 驱动的 S3 Bucket 枚举工具
文档 •
安装说明 •
快速开始 •
功能特性
一款高性能 CLI 工具,通过智能名称生成来发现 AWS S3 bucket。解耦输入源以实现精确控制:排列组合仅适用于提供的 seed,而 wordlist 和 CT logs 则作为原始输入进行处理。
## 功能特性
- **解耦的输入源**:独立处理 seed、wordlist 和 domain(无交叉污染)
- **可选 seed**:只需使用 wordlist 或 domain 即可进行扫描,无需 seed 关键词
- **高并发扫描**:Worker pool 架构可同时处理数千个请求
- **CT Log 侦察**:通过 Certificate Transparency logs (crt.sh) 发现子域,并自动提取单词
- **AI 驱动生成**:OpenAI、Ollama、Anthropic 或 Gemini 生成符合上下文感知的 bucket 名称变体
- **排列引擎**:每个 seed 自动生成 780+ 种变体(后缀、前缀、年份、区域)
- **自适应限速**:AIMD 算法自动调整,避免触发限速和 IP 封锁
- **深度检查**:集成 AWS SDK,以揭示区域、ACL 状态和示例对象
- **实时进度条**:实时 TUI 显示已扫描数量、RPS、ETA 和发现统计信息
- **HTTP/2 与连接池**:通过 keep-alive 和连接复用优化网络性能
- **智能重试逻辑**:针对瞬时故障,通过指数退避执行自动重试
- **自定义 DNS 解析器**:使用 Google/Cloudflare DNS,防止本地解析器饱和
- **多种格式**:将结果导出为 JSON 或 TXT,以便后续处理
- **跨平台**:提供适用于 Linux、macOS 和 Windows 的原生二进制文件(amd64 和 arm64)
## 安装说明
### 下载二进制文件(推荐)
下载适用于您平台的最新版本:
| 平台 | 架构 | 下载 |
|----------|--------------|----------|
| Linux | amd64 | [s3finder-linux-amd64.tar.gz](https://github.com/xeloxa/s3finder/releases/latest) |
| Linux | arm64 | [s3finder-linux-arm64.tar.gz](https://github.com/xeloxa/s3finder/releases/latest) |
| macOS | Intel | [s3finder-darwin-amd64.tar.gz](https://github.com/xeloxa/s3finder/releases/latest) |
| macOS | Apple Silicon | [s3finder-darwin-arm64.tar.gz](https://github.com/xeloxa/s3finder/releases/latest) |
| Windows | amd64 | [s3finder-windows-amd64.zip](https://github.com/xeloxa/s3finder/releases/latest) |
| Windows | arm64 | [s3finder-windows-arm64.zip](https://github.com/xeloxa/s3finder/releases/latest) |
### Homebrew (macOS/Linux)
```
brew install xeloxa/tap/s3finder
```
### Go Install
```
go install github.com/xeloxa/s3finder/cmd/s3finder@latest
```
### 从源码构建
```
git clone https://github.com/xeloxa/s3finder.git
cd s3finder
# 为当前平台构建
make build
# 为所有平台构建
make build-all
# 或者直接使用 go
go build -o s3finder ./cmd/s3finder
```
## 快速开始
```
# 使用 seed 的排列组合进行基本扫描
s3finder -s acme-corp
# 仅使用 wordlist 扫描(无排列组合)
s3finder -w wordlist.txt
# 仅使用域名扫描(CT log 发现)
s3finder -d acme.com
# 组合独立来源
s3finder -s acme -w custom.txt -d acme.com
# 高速扫描
s3finder -s acme-corp -t 200 --rps 1000
```
## 用法
### Seed 排列组合
```
# 使用 seed 关键字的 780+ 种排列组合进行扫描
s3finder -s acme-corp
# 多词或大小写混合的 seed 会自动拆分为变体
s3finder -s "Acme Corp" # → acme-corp, acmecorp, acme, corp, ...
s3finder -s "My Company Name" # → my-company-name, mycompanyname, my, company, name, ...
# 当 seed 包含空格时需要加引号
# 单个词或带连字符的 seed 不需要加引号
s3finder -s acme-corp
s3finder -s acmecorp
```
### Wordlist 扫描(原始模式)
Wordlist 现在作为原始输入进行处理。它们**不会**与 seed 结合或进行排列组合,让您可以精确控制要扫描的内容。
```
# 准确扫描 wordlist 中的内容
s3finder -w wordlists/common.txt
```
### Seed 列表 / PermList
使用 `--permlist` 提供一个文件,其中每一行都被视为一个 seed 并进行完整排列——效果等同于为每一行运行 `--seed`。
```
# seeds.txt 中的每一行会像 --seed 一样进行排列组合
s3finder -p seeds.txt
# seeds.txt 示例:
# acme-corp
# MyCompany
# amazon web services
```
### 自定义排列后缀
使用 `--perm-suffixes` 将默认后缀列表替换为您自己的列表。这让您能完全控制生成的变体。
```
# 使用自定义 suffix 列表
s3finder -s acme --perm-suffixes suffixes.txt
# suffixes.txt 示例:
# -backup
# -prod
# -tr
# -2026
# -internal
```
### CT Log 侦察(原样模式)
发现的子域将完全按照它们在 Certificate Transparency logs 中的原样进行扫描。系统会从子域中提取独特的单词,用于生成额外的排列组合,以进行更深度的扫描。
```
# 获取并扫描来自 CT log 的子域名
s3finder -d acme.com
# 限制 CT 结果(默认:100)
s3finder -d acme.com --ct-limit 50
```
### AI 驱动扫描
AI 生成功能会分析 CT Log 模式,并生成符合组织命名规范的 bucket 名称。
```
# OpenAI (默认:gpt-4o-mini)
export OPENAI_API_KEY=sk-xxxxx
s3finder -s acme-corp --ai
# Anthropic Claude (默认:claude-3-5-haiku-20241022)
export ANTHROPIC_API_KEY=sk-ant-xxxxx
s3finder -s acme-corp --ai --ai-provider anthropic
# Google Gemini (默认:gemini-3-flash-preview)
export GEMINI_API_KEY=xxxxx
s3finder -s acme-corp --ai --ai-provider gemini
# Ollama 本地 (默认:llama3.2)
s3finder -s acme-corp --ai --ai-provider ollama
# 上下文感知:结合 CT log 进行模式发现
s3finder -s acme -d acme.com --ai
```
### 高速扫描
```
# 使用 200 个 worker 和 1000 RPS 进行激进扫描
s3finder -s acme-corp -t 200 --rps 1000
```
### 输出选项
```
# JSON 报告(默认)
s3finder -s acme-corp -o results.json
# 纯文本报告
s3finder -s acme-corp -o results.txt -f txt
# 禁用颜色(用于管道)
s3finder -s acme-corp --no-color
```
## 参数参考
| 参数 | 短选项 | 默认值 | 描述 |
|------|-------|---------|-------------|
| `--seed` | `-s` | | 用于 bucket 名称生成的目标关键词 |
| `--domain` | `-d` | | 用于 CT Log 子域发现的目标域 |
| `--ct-limit` | | `100` | 从 CT logs 获取的最大子域数量 |
| `--wordlist` | `-w` | | Wordlist 文件路径(原始模式,无排列组合) |
| `--permlist` | `-p` | | Seed 列表文件路径(每一行都会像 `--seed` 一样进行排列) |
| `--perm-suffixes` | | | 自定义后缀列表文件路径(替换排列引擎中的默认后缀) |
| `--perm-prefixes` | | | 自定义前缀列表文件路径(替换排列引擎中的默认前缀) |
| `--perm-years` | | | 自定义年份列表文件路径(替换排列引擎中的默认年份) |
| `--perm-regions` | | | 自定义区域列表文件路径(替换排列引擎中的默认区域) |
| `--threads` | `-t` | `50` | 并发 worker 数量 |
| `--rps` | | `150` | 最大每秒请求数 |
| `--timeout` | | `15` | 请求超时时间(以秒为单位) |
| `--deep` | | `true` | 对已发现的 bucket 执行深度检查 |
| `--ai` | | `false` | 启用 AI 驱动的名称生成 |
| `--ai-provider` | | `openai` | AI 提供商:`openai`、`ollama`、`anthropic`、`gemini` |
| `--ai-model` | | *提供商默认值* | AI 模型名称 |
| `--ai-key` | | | API 密钥(或使用环境变量) |
| `--ai-url` | | | 用于自定义 endpoint 或代理的 Base URL |
| `--ai-count` | | `50` | AI 生成的名称数量 |
| `--output` | `-o` | `results.json` | 输出文件路径 |
| `--format` | `-f` | `json` | 输出格式:`json`、`txt` |
| `--no-color` | | `false` | 禁用彩色输出 |
| `--verbose` | `-v` | `false` | 详细输出模式 |
## 环境变量
| 变量 | 描述 |
|----------|-------------|
| `OPENAI_API_KEY` | 用于 AI 生成的 OpenAI API 密钥 |
| `ANTHROPIC_API_KEY` | Claude 的 Anthropic API 密钥 |
| `GEMINI_API_KEY` | Google Gemini API 密钥 |
## 构建命令
```
# 为当前平台构建
make build
# 为所有平台构建 (Linux, macOS, Windows × amd64, arm64)
make build-all
# 为特定平台构建
make build-linux
make build-darwin
make build-windows
# 运行测试
make test
# 运行测试并生成覆盖率报告
make test-cover
# 创建发布归档
make release
# 清理构建产物
make clean
# 显示所有可用命令
make help
```
## 输出示例
### 终端输出
```
____ _____ __ _ _
/ ___|___ / / _(_)_ __ __| | ___ _ __
\___ \ |_ \| |_| | '_ \ / _` |/ _ \ '__|
___) |__) | _| | | | | (_| | __/ |
|____/____/|_| |_|_| |_|\__,_|\___|_|
v1.2.4
AI-Powered S3 Bucket Enumeration Tool
─────────────────────────────────────────
Permutation engine generated 780 names
AI (openai) generated 48 names
Generated 828 unique bucket names to scan
[PUBLIC] acme-corp-backup (objects: 1547, region: us-east-1)
https://acme-corp-backup.s3.amazonaws.com
[PRIVATE] acme-corp-internal (region: eu-west-1)
[PUBLIC] acme-corp-assets-2024 (objects: 100+, region: us-west-2)
https://acme-corp-assets-2024.s3.amazonaws.com
[████████████████████████████████] 100.0% [828/828] Public:2 Private:1 Err:0 145 r/s ETA:0s [2m34s]
────────────────────────────────────────
Scan completed in 2m34s
Scanned: 828 | Found: 3 | Public: 2 | Private: 1 | Errors: 0
Results saved to: results.json
```
### 进度条
在扫描过程中,实时 TUI 进度条会显示实时统计数据:
- **可视化进度** - 显示扫描完成百分比的填充条
- **已扫描数量** - 当前/总共扫描的 bucket 数量
- **Public/Private/错误** - 实时的发现计数
- **RPS** - 当前的每秒请求数
- **ETA** - 预计剩余时间
- **已用时间** - 自扫描开始以来的总用时
### JSON 报告
```
{
"generated_at": "2025-01-12T15:30:00Z",
"scan_duration": "2m34s",
"total_found": 3,
"public_buckets": 2,
"private_buckets": 1,
"results": [
{
"bucket": "acme-corp-backup",
"probe_result": "public",
"inspect": {
"bucket": "acme-corp-backup",
"exists": true,
"is_public": true,
"acl": "public-read",
"region": "us-east-1",
"object_count": 1547,
"sample_keys": ["db-dump.sql", "config.yml", "backup-2024.tar.gz"]
}
}
]
}
```
## 支持平台
| 平台 | 架构 | 状态 |
|----------|--------------|--------|
| Linux | amd64 | ✅ 支持 |
| Linux | arm64 | ✅ 支持 |
| macOS | amd64 (Intel) | ✅ 支持 |
| macOS | arm64 (Apple Silicon) | ✅ 支持 |
| Windows | amd64 | ✅ 支持 |
| Windows | arm64 | ✅ 支持 |
### 平台特定说明
**Windows:**
- 在 Windows 10+ 上会自动启用 ANSI colors
- 推荐使用 PowerShell 或 Windows Terminal 以获得最佳体验
- 旧版 cmd.exe 可能无法正确显示颜色
**macOS:**
- 原生支持 Intel 和 Apple Silicon
- M1/M2/M3 Mac 无需使用 Rosetta
**Linux:**
- 适用于所有主要发行版
- 提供 ARM64 构建,适用于 Raspberry Pi 和 AWS Graviton
## 架构
```
┌─────────────────────────────────────────────────────────────────┐
│ SCANNER ORCHESTRATOR │
├─────────────────────────────────────────────────────────────────┤
│ Wordlist → AI Generator → Permutation Engine │
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ names channel │ │
│ └────────┬─────────┘ │
│ ┌──────────────────┼──────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Worker 1 │ │ Worker 2 │ │ Worker N │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ └──────────────────┼──────────────────┘ │
│ ▼ │
│ ┌───────────────────────────┐ │
│ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Inspector │ │ Output │ │
│ │ (AWS SDK) │ │ Writer │ │
│ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────────┘
```
## 项目结构
```
s3finder/
├── cmd/s3finder/ # CLI entrypoint
├── pkg/
│ ├── scanner/ # Worker pool, prober, inspector
│ ├── ai/ # LLM providers (OpenAI, Ollama, Anthropic, Gemini)
│ ├── recon/ # CT log reconnaissance (crt.sh)
│ ├── permutation/ # Name generation engine
│ ├── ratelimit/ # Adaptive AIMD rate limiter
│ └── output/ # Real-time + report writers
├── internal/config/ # Configuration management
├── wordlists/ # Default wordlists
├── Makefile # Build automation
└── .goreleaser.yaml # Release automation
```
## 免责声明
本工具仅用于**授权的安全测试**和**研究目的**。请仅扫描您已获得明确测试许可的组织所属的 bucket。未经授权访问 AWS 资源是违法行为。
## 许可证
Apache License 2.0 - 详见 [LICENSE](LICENSE)。
标签:AI安全, AI风险缓解, AWS, Chat Copilot, CT日志, DLL 劫持, DPI, EVTX分析, GitHub, Golang, Petitpotam, S3, Snort, 大语言模型, 子域名爆破, 字典扫描, 存储桶枚举, 安全编程, 实时处理, 数据展示, 无线安全, 日志审计, 红队, 网络安全, 隐私保护, 黑盒测试