Files
fscan/webscan/fingerprint
ZacharyZcR 42092d8664 fix: 修复实机测试发现的可靠性问题 (v2.2.0-rc.1)
- UDP 插件在 -p 指定端口时被跳过
- Redis exploit 无超时保护 / readReply 吞没非超时错误
- service_probe 连接丢失后静默成功
- SNMP 探测成功但终端无输出
- SSH 爆破不稳定 (并发过高 + 自适应超时过短 + 限流误判)
- 进度条 isActive 竞态

新增 Config.ModuleTimeout() 协议级超时下限 (≥3s)
新增 ErrorTypeThrottle 限流错误分类
2026-06-14 22:14:02 +08:00
..

fscan 增强指纹库

概述

fscan现在集成了FingerprintHub的Web指纹库,实现双指纹库并行识别,识别能力提升12.5倍

指纹库规模

基础指纹库 (原有)

  • 正则规则: 242条 (RuleDatas)
  • MD5指纹: 30条 (Md5Datas)
  • 特点: 国内OA/WAF为主,轻量高效
  • 文件: rules.go (硬编码)

增强指纹库 (新增)

  • 指纹数量: 3,139条
  • 来源: FingerprintHub v4.0
  • 特点: 国内外主流应用,社区维护
  • 文件: web_fingerprint_v4.json (1.3MB)

总计

基础指纹:  272条
增强指纹:  3,139条
─────────────────
总计:      3,411条
提升倍数:  12.5x

技术实现

架构设计

┌─────────────────────────────────────┐
│  fingerprint_scanner.go             │
│  InfoCheck() 统一入口                │
└─────────────────────────────────────┘
            │
            ├─> 基础指纹库
            │   ├─ matchByRegex()  (242条)
            │   └─ matchByMd5()     (30条)
            │
            └─> 增强指纹库
                └─ MatchEnhancedFingerprints() (3139条)
                    ├─ matchWords()    (关键词匹配)
                    ├─ matchRegex()    (正则匹配)
                    └─ matchFavicon()  (icon hash)

核心特性

1. 多种matcher类型

支持的matcher类型:
- word:     关键词匹配 (大小写可选)
- regex:    正则表达式匹配
- favicon:  图标hash匹配

2. Condition逻辑

- or:  任一条件满足即匹配 (默认)
- and: 所有条件都满足才匹配

3. Part选择

- body:    响应体匹配 (默认)
- header:  响应头匹配

4. 性能优化

  • 正则缓存: 编译后的正则表达式缓存
  • Lazy加载: 首次调用时才加载JSON
  • Embed内嵌: 编译时打包,无需外部文件

使用示例

基本用法

import "github.com/shadow1ng/fscan/webscan/fingerprint"

// 自动加载并匹配
body := []byte("<html>...</html>")
headers := "Server: nginx/1.18.0"

// 计算 favicon hash(同时支持 mmh3 和 MD5 格式)
faviconData := []byte{...} // 从 /favicon.ico 下载的数据
favicon := fingerprint.CalculateFaviconHashes(faviconData)

matched := fingerprint.MatchEnhancedFingerprints(body, headers, favicon)
// 返回: ["nginx", "wordpress", ...]

指纹格式示例

WordPress指纹:

{
  "id": "wordpress",
  "info": {
    "name": "wordpress",
    "tags": "detect,tech,wordpress"
  },
  "http": [{
    "matchers": [{
      "type": "word",
      "words": [
        "/wp-content/themes/",
        "/wp-includes/"
      ],
      "case-insensitive": true
    }]
  }]
}

禅道OA指纹 (AND条件):

{
  "id": "zentao",
  "http": [{
    "matchers": [{
      "type": "word",
      "words": [
        "/zentao/theme",
        "zentaosid"
      ],
      "condition": "and"
    }]
  }]
}

Favicon Hash指纹:

{
  "id": "openemr",
  "http": [{
    "matchers": [{
      "type": "favicon",
      "hash": ["1971268439"]
    }]
  }]
}

验证结果

测试用例

$ go run test_enhanced_fingerprint.go

✅ 增强指纹库加载成功

测试1 - WordPress识别:
  匹配结果: [wordpress]
  ✅ WordPress指纹匹配成功

测试2 - Nginx识别:
  匹配结果: [nginx]
  ✅ Nginx指纹匹配成功

测试3 - 禅道OA识别:
  匹配结果: [zentao-system zentao]
  ✅ 禅道指纹匹配成功

文件说明

文件 大小 说明
web_fingerprint_v4.json 1.3MB FingerprintHub指纹库
enhanced.go ~7KB 增强指纹匹配引擎
rules.go ~150KB 基础指纹库(原有)
fingerprint_scanner.go ~3KB 统一入口(修改)

性能影响

编译后二进制

  • 旧版本: ~30MB
  • 新版本: ~57MB (+27MB)
  • 原因: embed了1.3MB JSON + 引擎代码

运行时性能

  • 内存: 首次加载 +2MB (JSON解析)
  • 速度: 正则缓存后无明显影响
  • 并发: 两套指纹库并行匹配

与原有指纹库的对比

维度 基础指纹库 增强指纹库
数量 272条 3,139条
来源 内置 FingerprintHub
格式 Go代码 JSON
扩展性 需改代码 社区更新
覆盖范围 国内OA/WAF 国内外全栈
Favicon
版本提取 (待实现)
Condition 简单 AND/OR
Part 固定 可选

后续计划

已实现功能

  • Favicon自动下载和hash计算
  • 使用mmh3算法计算favicon hash
  • 并发指纹匹配(~267μs/3000+规则)
  • Version extractor(通用版本提取)
  • 指纹优先级排序(favicon > regex > word

待实现功能

  • 支持加载外部JSON文件

潜在改进

  • 支持更多matcher类型 (status, size, binary)
  • 指纹库热更新机制
  • 匹配结果包含CPE信息

参考资料


License

增强指纹库来自FingerprintHub项目,遵循其原始License。