Skip to content

指纹库规范文档

一、目的

本文档旨在为P1finger的使用者提供清晰的指纹贡献指南,确保指纹库的质量和一致性,便于后续的维护和使用。

事实上,笔者诚恳的以为,各位技术超群的师傅看个示例就了解了,可直接跳到 示例指纹部分

二、指纹结构要求

1. 基本字段

每个指纹必须包含以下基本字段:

  • id:唯一标识符,用于区分不同的指纹。格式为小写字母和数字组合,长度不超过10个字符。
  • name:指纹的名称,应简洁明了地描述该指纹对应的系统或技术。避免使用过于模糊或过于冗长的名称。
  • author:提交指纹的作者标识,可以是用户名或团队名称。格式为P001water、TeamA等。
  • description:对指纹的简要描述,说明该指纹用于识别的系统、技术或特征。
  • tags:用于分类的标签,帮助快速筛选和定位指纹。

例如

- id: fortinetfortigatesslvpn
  name: Fortinet-fortigate-SSLVPN
  author: P1finger
  description: FortiGate IPsec/SSL VPN 解决方案包括高性能加密VPN,https://www.fortinet.com/cn/resources/cyberglossary/ssl-vpn
  tags:
    - Fortinet-fortigate-SSLVPN

2. Mathers 匹配器字段

匹配器字段是P1finger进行指纹匹配的核心,Matchers字段支持多个匹配器

每个指纹必须包含至少一组匹配规则,用于识别目标系统。匹配规则分为以下三种类型:

  • header:基于目标响应头内容的匹配规则。
  • title:基于目标页面标题的匹配规则。
  • body:基于目标响应体内容的匹配规则。

每种类型的匹配规则可以包含以下字段:

  • location:匹配规则的类型,可选为 headerbody、 或 title
  • words:包含一组关键字,用于在目标内容中搜索。关键字应为字符串,以-分隔,数量不建议超过10个。
  • condition:指定关键字之间的逻辑关系,取值为 andor。默认值为 and

例如,一个指纹的规则分别在header和body都有匹配器

  matchers:
    - location: header
      words:
        - 'test'
    - location: body
      words:
        - location="/remote/login"
        - /remote/login?lang=
        - top.location=window.location;top.location="/remote/login";

四、示例指纹

恭喜你直接来到了示例指纹部分,记得带上你的署名,我们会记录你的贡献。最后,期待你的指纹贡献或是宝贵的反馈

Nginx 产品的指纹示例:

- id: nginx
  name: nginx
  author: P1finger
  description: nginx
  tags:
    - nginx
  matchers:
    - location: header
      type: regex
      words:
        - '(?m)nginx(?:/([\d.]+))'
    - location: body
      words:
        - '<title>Welcome to nginx!</title>'

淘宝-Tengine 产品的指纹示例

- id: tengine
  name: 淘宝-Tengine-HttpServer
  author: Fofa
  description: Tengine是一个由淘宝核心系统开发部开发的HTTP服务器。Tengine基于Nginx 1.0.10开发,二者配置兼容。
  tags:
    - tengine
  matchers:
    - location: header
      words:
        - 'Server: Tengine'
      condition: and