Files
fscan/webscan/fingerprint
ZacharyZcR a115499793 fix+perf: 修复10个bug & 10项性能优化
Bug修复:
- clustersend CEL结果判断从字符串比较改为类型断言
- Nuclei DSL matcher安全降级为false避免误报
- clusterpoc发现漏洞后返回true修正语义
- reverseCheck加10s超时防止ceye API阻塞
- doSearch/bmatches正则编译结果缓存到sync.Map
- evalset CEL求值失败时存空字符串而非原始表达式
- CEL wait()函数加nil Reverse指针检查防panic
- MongoDB readMongoMsg应用timeout参数设置读超时
- TXTWriter.Close确保Sync失败后仍调用file.Close

性能优化:
- 指纹regex缓存从RWMutex+map改为sync.Map消除锁竞争
- CaseInsensitive指纹词加载时预小写化避免匹配时分配
- 版本提取FindAllStringSubmatch限制返回数量
- i18n.Tr用strconv.Itoa替代Sprintf减少分配
- POC加载用atomic.Bool+DCLP消除热路径锁
- 结果缓冲map预分配容量减少rehash
- HTTP连接池参数随并发数动态调整
- getRuleHash去除反射+Headers排序保证确定性dedup
- POC并发加载用channel替代Mutex收集结果
2026-06-14 22:23:49 +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。