FingerprintHub 指纹库规则说明与使用指南
GitHub Repo
MIT
May 27, 2026 at 12:17 AM
0 views

FingerprintHub 指纹库规则说明与使用指南

@0x727Project Author

标题:FingerprintHub:社区化指纹库的设计、规则与贡献指南

引言 FingerprintHub 是一个以安全研究学习为目的而建立的指纹库项目,它的存在旨在让管理和使用指纹规则变得更加简单、透明与协作化。该仓库承载的是侦查守卫(observer_ward)指纹库的愿景,强调社区驱动、开源协作,以及对指纹规则的持续完善与更新。本文将带你全面了解 FingerprintHub 的定位、核心规则与组件、贡献流程,以及它在开源生态中的应用场景与反馈机制。为确保信息的准确性,以下内容尽量忠实于原始描述与示例。

一、项目定位与生态关系

  • FingerprintHub 的定位
  • 一个社区化的指纹库,旨在让指纹规则的管理、更新与使用更加高效、规范与可追溯。
  • 规则是以 YAML 形式编写的可自定义请求集合,支持通过 GitHub Actions 自动更新指纹库。
  • 相关生态关系
  • observerward:该仓库作为侦查守卫的指纹库组成部分,observerward 是一个基于社区的指纹识别工具。
  • 其他工具链与集成:提示了若你在寻找 Go 语言的 SDK,可以参考 chainreactors 的 neutron;同时,旧版指纹规则已存档在 FingerprintHub 的历史分支中,以便回溯与对照。
  • 项目愿景与开源路径:未来一段时间将陆续开源更多工具,鼓励社区贡献。

二、规则说明的总体框架

  • 规则的核心目标
  • 通过灵活的请求、探针、匹配器与提取器组合,识别目标系统的指纹信息,帮助研究者和安全团队快速定位服务与组件。
  • 规则的示例
  • 以识别 ThinkPHP 为例的规则,展示了规则文件的典型结构、字段和匹配方式。规则包括基础信息、探针、匹配器、提取器等模块的协同工作方式。
  • 关键示例片段(简化版):
    • id: thinkphp
    • info: name: thinkphp
    • author: cn-kali-team
    • tags: detect,tech,thinkphp
    • severity: info
    • http: - method: GET path: - '{{BaseURL}}/' matchers: - type: favicon hash: - f49c4a4bde1eec6c0b80c2277c76e3db
    • type: word words: - href="http://www.thinkphp.cn">thinkphp
    • thinkphpshowpage_trace
    • case-insensitive: true
    • - type: word words: - 'x-powered-by: thinkphp' part: header case-insensitive: true
  • 规则设计的核心参考
  • 设计规则时参考 nuclei 的模板编写规范,将规则拆分为三大块:基础信息、探针、匹配器、提取器。
  • 基础信息:保存指纹的基本信息,以及潜在的漏洞关联关系。
  • 探针:自定义发送数据包,覆盖 HTTP 与 TCP 客户端两种传输方式。
  • 匹配器:关键词、正则、favicon 哈希等,用于对探针响应进行判定。
  • 提取器:从响应中抽取版本信息等关键信息,常用正则、JSONPath 等。

三、ID 与基础信息的规范

  • 规则结构的核心字段
  • id:规则唯一标识,命中后会在终端输出中显示,不支持中文。
  • name:规则名称,常与 id 相同或具有知名别名,支持中文。
  • author:作者列表,用逗号分隔的字符串。
  • tags:标签列表,用逗号分隔的字符串。
  • severity:严重程度,枚举值包括 unknown、info、low、medium、high、critical。
  • metadata:一个 HashMap,用于存放任意类型的元数据,包含 CPE 解析后的厂商 vendor、产品 product、以及是否经过验证 verified 等信息。
  • description、reference:描述与参考链接的可选字段,有助于漏洞关联和深入研究。
  • metadata 的重要性
  • metadata 是指纹与漏洞关联的关键纽带。理解 metadata 的结构与用途,是掌握漏洞关联的关键。
  • CPE(Common Platform Enumeration)是一个标准化格式,用于描述软件与硬件的身份信息,NVD 用它来精确描述漏洞影响的产品与版本。通过对 CPE 的解析,我们可以追溯到特定厂商与产品,从而在规则中进行对应的漏洞核验与关联。

四、探针(Probe)的设计与使用

  • 探针的定位
  • 探针是指纹识别流程中的核心载荷,分为 http 探针和 tcp 探针,类似于 Nmap 的服务指纹“probe”,但在 nuclei/指纹体系中通常被称为探针。
  • http 探针示例
  • 简单的 GET 请求,携带自定义头信息或路径,目的是触发潜在的指纹信号。
  • 示例片段:
    • http: - method: GET path: - '{{BaseURL}}/' headers: Cookie: rememberMe=admin;rememberMe-K=admin
  • 多路径的探针,覆盖主页及子路径,从而提高命中概率。
    • path: - '{{BaseURL}}/' - '{{BaseURL}}/nacos/'
  • tcp 探针示例
  • 使用 Nmap 风格的服务指纹输入输出形式,触发对等端的响应以便后续匹配。
  • 示例片段:
    • name: "null" inputs:
    • data: "" read: 16 host: - "{{Hostname}}"
  • 探针字段要点
  • name:探针名称,宜与 Nmap 的 probe_name 对齐。
  • inputs.data:要发送的数据,注意要进行适当转义。
  • inputs.read:读取响应的字节数限制,避免过度占用资源。
  • host:目标主机信息的占位符。
  • 探针的组合优势
  • 通过多样化的探针组合,可以覆盖不同服务的暴露面与实现细节,提升指纹识别的鲁棒性与覆盖率。

五、匹配器(Matchers)的规则与应用

  • 匹配器的职责
  • 匹配器位于探针之下,负责对探针响应进行判定。当前版本支持以下几类:
    • favicon:通过图标哈希进行指纹识别,支持多种哈希算法(如 MD5、MMH3)。
    • word:通过包含的关键词进行判断,支持大小写敏感与不敏感。
    • regex:通过正则表达式对响应文本进行高灵活度的匹配。
  • 匹配器字段要点
  • name:匹配名称(可选),若非空且命中将返回。
  • type:匹配类型,word、favicon、regex 等。
  • part:匹配区域,header 或 body,默认是 body。
  • favicon.hash:若 type 为 favicon,则列出哈希值列表,任意命中即为命中指纹。
  • word.words:关键词列表,支持单个或多个关键词的组合。
  • case-insensitive:是否忽略大小写,默认 false。
  • negative:是否对匹配结果取反,默认 false。
  • condition:匹配关系,or 或 and。当为 or 时,一旦命中就返回;为 and 时需全部条件同时命中才返回。默认是 or。
  • 关键词示例与策略
  • 以 httpbin.org 为目标的规则演示了对 body 的关键字判断,通常用于服务识别的快速判定。
  • 多关键词组合的场景如在 Tomcat 的指纹中,多个关键词必须同时命中才算识别成功,这时使用 condition: and 来表达。
  • favicon 哈希的使用
  • favicon 哈希允许同时配置多个哈希值,只要命中一个即认定为指纹命中。
  • 不需要在探针中显式写明 favicon 的路径,工具会在主页 HTML 中自动提取 favicon 链接。

六、提取器(Extractors)的能力与示例

  • 提取器的作用
  • 提取器用于从响应中提取版本号、产品信息等关键信息,帮助在结果中返回结构化的字段。
  • 正则提取(regex)注意事项
  • 正则表达式应尽量少用,初始化编译成本高,若规则数量较多应当将正则集中放在提取器中,以避免重复编译。
  • 例子:用于识别 SSH 服务的提取器,通过正则将版本号与协议信息抽取出来,映射到 metadata 的字段。
  • 提取组的编号(如 $1、$2)会对应到 metadata 的键值,最终结果中可看到 version、info 等字段的提取结果。
  • 与提取组相关的可视化示例(如正则提取组在在线平台上的可视化)通常包含提取组的对应关系示意图,例如示意图会标注提取组 2.0、9.7 对应到元数据中的版本与描述。
  • 提取器示例片段:
    • type: regex
    • regex: (?x)^SSH-([\d.]+)-OpenSSH[-]([\w.]+)\s*\r?\n
  • jsonpath 提取(jsonpath)
  • 类似于 jq 的用法,通过 jsonpath 从 JSON 响应中提取字段。
  • 示例:从 {"origin":"1.1.1.1"} 提取 origin,最后在结果中返回 ip: ["1.1.1.1"]。
  • 提取器配置示例:
    • type: json name: ip json: - '.origin'
  • 提取后的元数据映射
  • 提取器的输出直接映射到 info.metadata 的键值对中,帮助实现跨规则的统一识别与后续的漏洞关联。

七、如何贡献指纹规则

  • 验证单个指纹的有效性
  • 为了方便验证编写的 YAML 规则,可以使用 -p 指定要验证的 YAML 文件,-t 指定测试目标对指纹进行验证,并开启 --debug 以获得更详细的调试信息。
  • 示例命令(简化版):
    • ./observerward -t http://httpbin.org -p observerward/examples/json.yaml --debug
  • 实践中的调试输出要点
  • 调试输出会显示加载的探针数量、目标载入情况、优化后的探针数,以及实际发起的请求和收到的响应等信息,便于你定位规则中的问题。
  • 提交指纹规则的流程
  • Fork 项目并克隆到本地仓库。
  • 配置 upstream 以便跟随上游更新。
  • 在本地创建新分支(不要直接在 main 分支修改)。
  • 复制并修改指纹规则文件,命名要与组件名一致,修改 rule 的 name 字段。
  • 提交 Pull Request,等待合并指纹规则。
  • 当你的贡献被合并后,其他人即可在 FingerprintHub 中使用该规则。
  • 贡献过程中的要点
  • 保证 YAML 的格式正确,避免语法错误导致规则不可用。
  • 规则尽量将基础信息、探针、匹配器、提取器的逻辑清晰分离,便于后续维护与扩展。
  • 如遇到与标签、版本等相关的冲突,及时向维护者沟通,共同完善 metadata 的字段设计。

八、谁在使用 FingerprintHub

  • FingerprintHub 的应用生态正在逐步扩大,以下为已知的使用者与合作方示例,强调社区开放性与互通性:
  • observer_ward
  • nuclei(知名的漏洞扫描引擎)
  • nemo_go
  • afrog
  • ShuiZe_0x727
  • z0scan
  • fingers
  • 通过这些项目的集成,可以看到 FingerprintHub 正在成为一个连通各大工具的指纹规则中枢,帮助研究人员跨工具协作、共享规则并提升识别的一致性。

九、指纹反馈与改进

  • 现状与挑战
  • 指纹库的收集源自互联网,尽管经过人工整理,仍存在一些需要改进的情形:
    • 误报:指纹不够精确时可能导致误判。
    • 组件重复:不同名称可能指向同一个组件的情况。
    • 识别盲区:部分指纹规则未覆盖到特定组件。
  • 改进路径与反馈渠道
  • 当出现上述情况时,可以提交 GitHub Issue,附上演示 URL 或首页的 HTML 源码,以便团队人工修正指纹规则。
  • 社区成员也可以参与验证、修订规则,促进规则库的持续完善。

十、尊重与致谢

  • 面向社区的声明与安全边界
  • 项目明确声明其技术、思路与工具仅用于安全学习与合规的交流,禁止用于非法用途与牟利活动,后果自行承担。
  • 使用镜像与合作伙伴的致谢
  • 感谢 observerward、nuclei、nemogo、afrog、ShuiZe_0x727、z0scan、fingers 等社区工具的协作与互操作性。
  • 对所有参与者的感谢
  • 感谢关注与支持 FingerprintHub 的研究者、开发者与开源社区成员,正是他们的贡献让指纹识别工具生态更加开放、透明与安全。

十一、附留图片与示意

  • 在本文的“提取器”与“正则提取”的部分,我们引用了来自原始示例的视觉辅助图像,用以帮助读者理解提取组在规则中的映射关系。请在需要时查看下列图片引用:
  • 提取组示意图(正则提取组的可视化示例):图片请参阅 images/regex.png
  • 该图像直观展示了正则表达式中的提取组如何与 metadata 中的字段相对应,便于理解提取器的工作原理与输出映射。

结语 FingerprintHub 作为一个社区驱动的指纹库,承载着协作、透明与可持续发展的愿景。它将规则的设计、探针的灵活性、匹配器的精准度以及提取器的可观测性结合起来,形成一个相互印证、可追溯的指纹识别生态。通过清晰的字段定义、严格的规则结构与开放的贡献流程,FingerprintHub 使得不同工具和社区成员能够在同一规则语义下协同工作。无论你是安全研究者、开发者还是运维从业者,参与到 FingerprintHub 的社区中来,既能提升自身的指纹识别能力,也能为整个开源安全生态贡献力量。

如果你愿意,随时可以加入贡献流程,提交你的发现与改进。让我们共同推动社区化指纹库的发展,让管理和使用指纹规则的体验更加直观、可靠与高效。感谢每一位为安全研究与开源事业付出的伙伴。

Enjoying this project?

Discover more amazing open-source projects on TechLogHub. We curate the best developer tools and projects.

Project
fingerprinthub-指纹库规则说明与使用指南
Created
May 27
Last Updated
May 27, 2026 at 12:17 AM

Find more projects like this

One email a week: new and trending developer tools, fresh comparisons, and what shipped. Unsubscribe in one click.