riven-labs/flux

GitHub: riven-labs/flux

Flux 是一款基于 YAML 声明式 DAG 工作流的侦察管道编排工具,用 SQLite 状态存储和自动去重替代了传统 bash 脚本拼凑的侦察方式,解决了结果散乱、无法对比和难以恢复的问题。

Stars: 1 | Forks: 0

flux **一个用于漏洞赏金侦察的工作流运行器** 使用 YAML 而非 bash,将 `subfinder`、`httpx`、`nuclei`、`naabu`、`katana` 以及你的私有工具组合成管道。去重并存入 SQLite,与上次运行的结果进行对比,当有新发现时获取通知。 [文档](docs/README.md) · [入门指南](docs/getting-started.md) · [CLI 参考](docs/cli.md) · [配方](docs/recipes.md)
flux demo
## 它的功能 ``` name: passive-recon inputs: target: { type: string, required: true } stages: - id: subfinder tool: subfinder args: ["-d", "{{ inputs.target }}", "-silent"] output: { kind: subdomain, mode: stream } - id: assetfinder tool: assetfinder args: ["--subs-only", "{{ inputs.target }}"] output: { kind: subdomain, mode: stream } - id: probe tool: httpx needs: [subfinder, assetfinder] input: from: [subfinder, assetfinder] # fan-in: deduped union → stdin args: ["-silent", "-status-code", "-title", "-tech-detect", "-json"] output: { kind: host, mode: stream, parser: httpx_json } ``` ``` $ flux run passive-recon -t example.com flux: running workflow 'passive-recon' on example.com flux: ✓ subfinder (subfinder) 142 produced, 142 new flux: ✓ assetfinder (assetfinder) 89 produced, 37 new flux: ✓ probe (httpx) 61 produced, 61 new ``` ——现在你的侦察结果可以进行查询、对比、导出和重新运行了。**杂乱无章的侦察文件夹时代已经结束。** ## 为什么做这个 如今的漏洞赏金侦察都是由 bash 脚本和 `output_v3_FINAL.txt` 文件组成的。没人知道自上周以来有什么新发现。没人能恢复一个在第 18 分钟崩溃的 20 分钟管道。也没人能不依赖脆弱的 `sort -u` 管道,就将 subfinder + assetfinder + amass 干净利落地合并到一次 httpx 运行中。 flux 使用每个工作流一个声明式文件、一个类型化的构件存储,以及一个知道自上次以来发生了什么变化的运行器来取代了这一切。 | | bash 脚本 | flux | |---|---|---| | 管道定义 | 命令式 shell | 声明式 YAML,经过 DAG 验证 | | 状态 | 文件夹中的 `.txt` 文件 | SQLite,可使用 SQL 查询 | | 跨运行去重 | 手动 `sort -u` | 由 `UNIQUE(target, kind, value)` 强制执行 | | 扇入(多个子域名工具 → httpx) | shell tee + sort | `input.from: [a, b, c]`,已去重 | | 对比“昨天以来有什么新发现?” | 手写实现 | `flux diff -t target` 或 `--since 24h` | | 某阶段崩溃后恢复 | 从头开始 | `flux resume `,重播已缓存的阶段 | | 新发现警报 | cron + bash + curl | `flux watch ... --notify discord=$URL` | | 为 writeup 导出 | grep + jq + 手动粘贴 | `flux export --format md \| pandoc` | | 你的私有工具 | 硬编码路径 | `tools.toml` 注册表,支持项目和用户级别作用域 | ## 安装 **选项 1 — 预编译二进制文件** (linux x86_64, apple silicon macOS, windows x86_64): 从 [releases](https://github.com/riven-labs/flux/releases) 获取最新版本,解压后将 `flux` 放置在 `PATH` 中的任意位置。每个压缩包都附带标准工作流和用于验证的 `SHA256SUMS` 文件。 **选项 2 — 从源码构建** (rust 1.80+): ``` git clone https://github.com/riven-labs/flux cd flux cargo install --path crates/flux-cli ``` 然后在任何项目中: ``` flux init # set up .flux/ + workflows/ + .env flux install --all # auto-installs go-backed tools; system-backed (e.g. nmap) install via apt/dnf/snap/brew with sudo if needed flux run active-recon -t example.com --yes ``` **侦察工具前置条件:** `flux install` 会自动处理大多数工具 —— 基于 go 的工具(subfinder, httpx, nuclei 等)需要 PATH 中有 go;基于系统的工具使用你的包管理器。任何位于 `manual` 注册表槽中的内容都是你的私有工具,并会留在你为 flux 指定的路径上。 flux 开箱即附带了八个工作流 —— `basic-recon`、`passive-recon`、`active-recon`、`full-recon`、`takeover-watch`、`takeover-scan`、`nmap-scan`、`url-discovery`。将它们放在 `~/.config/flux/workflows/` 中即可在全机范围内使用: ``` mkdir -p ~/.config/flux/workflows cp workflows/*.yaml ~/.config/flux/workflows/ flux workflows # see what's available, plus any local overrides ``` 5 分钟演练:[docs/getting-started.md](docs/getting-started.md)。完整配方目录:[docs/recipes.md](docs/recipes.md)。 ## 特性 - **声明式 DAG 工作流。** 带有 `needs:` 和 `input.from:` 的 YAML。flux 负责构建图表,并行运行独立的分支,并在遇到循环时报错。 - **扇入。** `input.from: [subfinder, assetfinder, amass]` 将去重后的联合结果送入一个下游阶段。无需 shell 胶水代码。 - **有状态的构件存储。** 每个值都通过带有 `first_seen` / `last_seen` 的 `(target, kind, value)` 进行键控。去重是自动的。SQL 是查询语言。 - **恢复失败的运行。** `flux resume ` 从缓存中重播成功的阶段,并仅重新运行失败的阶段。无需重做长达 20 分钟的子域名枚举。 - **无需 SQL 的结构化查询。** `flux subs / hosts / findings / runs / stats / search` 覆盖了大约 95% 的“我发现了什么?”之类的问题。 - **带警报的监控。** `flux watch` 按时间间隔运行,与上一次运行的结果进行对比,仅当确实有新发现时才发送至 discord 或任何 webhook。 - **自定义工具。** 在 `~/.config/flux/` 或 `./.flux/` 中放入一个 `tools.toml`。私有工具、内部脚本,PATH 上的或位于绝对路径的任何内容。flux 能够妥善处理 PATH 冲突的现实情况(例如 python 的 `httpx` 与 ProjectDiscovery 的 `httpx`)。 - **导出至任何地方。** `json` / `csv` / `sarif`(用于 nuclei 发现 → GitHub 代码扫描) / `md`(可直接用作草稿的 writeup)。 - **来自任何地方的工作流。** 本地的在 `./workflows/`,全局的在 `~/.config/flux/workflows/`,通过 `flux pull` 从 GitHub 或任何 URL 拉取。 - **分类备注。** `flux note add/list/rm` 将自由格式的备注附加到特定的 (kind, value) 对上。可在不同次运行间保留。 ## 状态 处于 pre-alpha 阶段,但已可用。v0.1 用户故事已实现端到端的闭环: ``` flux init # ✓ flux install --all # ✓ flux run passive-recon -t example.com --yes # ✓ flux subs -t example.com # ✓ flux watch passive-recon -t example.com --notify discord=$URL # ✓ ``` 仍在进行中的工作:子域名接管检测(带指纹 DB)、每个目标的范围过滤、声明式自定义解析器(一个 `parsers.toml`),以及 `flux template fmt` 的注释保留。完整的能力矩阵请参见 [docs/README.md](docs/README.md)。 ## 文档 - **[入门指南](docs/getting-started.md)** —— 五分钟内完成安装、初始化和首次运行。 - **[工作流](docs/workflows.md)** —— 每一个 YAML 字段都附有示例,包括扇入。 - **[工作流与拉取](docs/workflows-and-pull.md)** —— 本地与全局工作流,`flux pull`。 - **[工具](docs/tools.md)** —— 注册表分层、私有工具、安装后端。 - **[命令](docs/commands.md)** —— `flux subs / hosts / findings / runs / stats / search`。 - **[查询、对比、导出](docs/query-diff-export.md)** —— schema 参考、SQL 配方、各种导出格式。 - **[监控](docs/watch.md)** —— 间隔调度、通道格式、payload 结构。 - **[备注](docs/notes.md)** —— 分类工作流、注释约定。 - **[恢复](docs/resume.md)** —— 从失败运行停止的地方继续。 - **[CLI 参考](docs/cli.md)** —— 所有子命令、所有标志,全在一页。 - **[配方](docs/recipes.md)** —— 针对常见场景可直接复制粘贴的工作流。 - **[故障排除](docs/troubleshooting.md)** —— 你会遇到的各种坑。 ## 许可证 [PolyForm Noncommercial 1.0.0](LICENSE)。 flux 对个人使用、研究、教育、业余项目以及内部安全团队是免费的。它**不**被授权用于商业用途,包括销售 flux 本身或基于它构建侦察即服务产品。有关商业授权,请通过 https://riven-labs.com/ 联系 Riven Labs。 flux 会运行你指定的任何目标。对你未获授权测试的目标运行该工具,责任由你自行承担。别做那种人。
标签:Bug Bounty, CLI, GitHub, httpx, katana, LIDS, meg, naabu, nuclei, Python安全, SQLite, subfinder, task-runner, TIP, WiFi技术, workflow-engine, YAML编排, 侦察工作流, 信息安全, 去重, 可自定义解析器, 可视化界面, 子域名枚举, 安全工具集成, 实时处理, 密码管理, 插件系统, 数据展示, 数据统计, 端口扫描, 系统安全, 红队, 自动化流水线, 通知系统, 防重复