Files
fscan/webscan/fingerprint
ZacharyZcR 71b92d4408 feat: v2.1.0 核心重构与功能增强
## 架构重构
- 全局变量消除,迁移至 Config/State 对象
- SMB 插件融合(smb/smb2/smbghost/smbinfo)
- 服务探测重构,实现 Nmap 风格 fallback 机制
- 输出系统重构,TXT 实时刷盘 + 双写机制
- i18n 框架升级至 go-i18n

## 性能优化
- 正则表达式预编译
- 内存优化 map[string]struct{}
- 并发指纹匹配
- SOCKS5 连接复用
- 滑动窗口调度 + 自适应线程池

## 新功能
- Web 管理界面
- 多格式 POC 适配(xray/afrog)
- 增强指纹库(3139条)
- Favicon hash 指纹识别
- 插件选择性编译(Build Tags)
- fscan-lab 靶场环境
- 默认端口扩展(62→133)

## 构建系统
- 添加 no_local tag 支持排除本地插件
- 多版本构建:fscan/fscan-nolocal/fscan-web
- CI 添加 snapshot 模式支持仅测试构建

## Bug 修复
- 修复 120+ 个问题,包括 RDP panic、批量扫描漏报、
  JSON 输出格式、Redis 检测、Context 超时等

## 测试增强
- 单元测试覆盖率 74-100%
- 并发安全测试
- 集成测试(Web/端口/服务/SSH/ICMP)
2026-01-11 20:16:23 +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。