构建 404fuzz:永不疲倦的多核 Fuzzer

发布: (2025年12月6日 GMT+8 14:35)
5 min read
原文: Dev.to

Source: Dev.to

大多数人认为模糊测试工具只是“发送快速请求的工具”。
这倒是对,但要构建一个既快、内存安全、多核、基于流式、且对开发者友好的模糊测试器,却是完全不同的挑战。

这就是 404fuzz 诞生的故事——它并不是复制 ffuf,而是源于真实的 hacking 痛点、性能问题以及工程取舍。

为什么创建 404fuzz

  • 📂 超大词表(数百万行)
  • 🐌 工具吃光内存
  • 💥 大规模扫描时崩溃
  • 🧠 响应重复率太高
  • ⚠️ 速率限制(429)导致扫描中止
  • 🧱 工具要么太笨拙,要么像扫描器一样沉重

我不想再要一个 Burp、另一个 Nuclei,或是另一个慢吞吞的 Python 模糊器。
我想要一个 笨拙却极其快速的模糊器,只具备足以节省我时间的智能。

“像蚂蚁一样,404fuzz 永远不会累。”

核心原则

  • 速度不可妥协
  • 🧩 内存安全放在首位
  • 🎯 猎手决定什么是有趣的——而不是工具

因此:

  • ❌ 没有沉重的 “AI 逻辑”
  • ❌ 没有扫描规则
  • ❌ 没有自动漏洞检测
  • ✅ 纯粹的高性能模糊测试

404fuzz 工作原理(内部实现)

1. 流式词表(不占用大量内存)

与其把整个词表一次性加载到内存,404fuzz 会流式读取并在工作进程之间分片:

// streamWordlist.js
export async function* streamWordlist(path, workerId, totalWorkers) {
  const rl = require('readline').createInterface({
    input: require('fs').createReadStream(path),
    crlfDelay: Infinity,
  });

  let index = 0;
  for await (const line of rl) {
    if (index % totalWorkers === workerId) {
      yield line; // payload
    }
    index++;
  }
}
  • 结果: 即使使用百万行的词表,内存也保持稳定;每个工作进程只拿到自己的那一片。

2. 无 Promise.all 的并发,避免内存泄漏

不使用 await Promise.all(requests),404fuzz 采用基于队列的并发模型:

// FuzzQueue.js
class FuzzQueue {
  constructor(concurrency = 500) {
    this.concurrency = concurrency;
    this.running = 0;
    this.queue = [];
  }

  async add(task) {
    if (this.running >= this.concurrency) {
      await new Promise(resolve => this.queue.push(resolve));
    }
    this.running++;
    try {
      return await task();
    } finally {
      this.running--;
      if (this.queue.length) this.queue.shift()();
    }
  }
}
  • 结果: 内存使用保持稳定,吞吐量受控,且不会出现未处理的 Promise 爆炸。

3. 可扩展性与实时反馈

  • Node.js cluster: 每个 CPU 核心对应一个工作进程。
  • 自动词表分片 给每个进程。
  • 实时 RPS 聚合 并在终端实时显示:
    • 每秒请求数
    • 进度 / 预计完成时间
    • 错误率
    • 工作进程统计

没有冗余日志——只有简洁、可操作的输出。

404fuzz 是什么(以及不是)

404fuzz 是:

  • 一个快速的模糊测试器
  • 一个研究工具
  • 一个行为探索器
  • 一个负载测试引擎

404fuzz 不是:

  • 漏洞扫描器
  • Burp 替代品
  • 基于规则的利用引擎

通过去重降低噪声

扫描 10 万+ 负载时,常会得到大量重复响应(相同的 404 页面、JSON 错误、WAF 拦截等)。其中 70‑90% 可能是噪声。

404fuzz 关注:

  • 合并相同的后端行为
  • 按响应签名对负载进行分组

输出会显示:

  • ✅ 唯一行为
  • 📊 有多少负载触发了相同的逻辑

这可以降低噪声、减小输出体积,并减少精神疲劳——且不依赖任何 AI。

附加功能:

  • 检测 429 响应并遵守 Retry-After
  • 智能延迟处理,安全地继续扫描

开源与贡献

404fuzz 完全开源:
👉

适用人群

  • 漏洞赏金猎人
  • 安全工程师
  • Node.js 开发者
  • 工具构建者
  • 性能爱好者

如何贡献

  • 核心引擎改进
  • 新的输出模式
  • 去重逻辑
  • 速率限制处理
  • 仪表盘功能
  • 文档与测试
  • Bug 修复
  • 性能基准

这是一款社区驱动的模糊测试器,而非个人自负的项目。

加入项目

如果你认同模糊测试应保持高速、工具应保持可 hack、开源应保持协作,给仓库加星并一起构建 404fuzz

Back to Blog

相关文章

阅读更多 »