xeloxa/s3finder

GitHub: xeloxa/s3finder

一款结合 LLM 智能命名与传统排列引擎的高性能 AWS S3 Bucket 枚举工具,帮助安全人员在侦察阶段快速发现隐藏的云存储资产。

Stars: 6 | Forks: 1

s3finder

AI 驱动的 S3 Bucket 枚举工具

文档安装说明快速开始功能特性

Documentation Go Version License Platform

一款高性能 CLI 工具,通过智能名称生成来发现 AWS S3 bucket。解耦输入源以实现精确控制:排列组合仅适用于提供的 seed,而 wordlist 和 CT logs 则作为原始输入进行处理。

S3Finder Banner

## 功能特性 - **解耦的输入源**:独立处理 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)

s3finder demo

## 安装说明 ### 下载二进制文件(推荐) 下载适用于您平台的最新版本: | 平台 | 架构 | 下载 | |----------|--------------|----------| | 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, 大语言模型, 子域名爆破, 字典扫描, 存储桶枚举, 安全编程, 实时处理, 数据展示, 无线安全, 日志审计, 红队, 网络安全, 隐私保护, 黑盒测试