Files
fscan/webscan/fingerprint/README.md
T
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

249 lines
5.5 KiB
Markdown

# fscan 增强指纹库
## 概述
fscan现在集成了[FingerprintHub](https://github.com/0x727/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类型
```go
支持的matcher类型:
- word: 关键词匹配 (大小写可选)
- regex: 正则表达式匹配
- favicon: 图标hash匹配
```
#### 2. Condition逻辑
```go
- or: 任一条件满足即匹配 (默认)
- and: 所有条件都满足才匹配
```
#### 3. Part选择
```go
- body: 响应体匹配 (默认)
- header: 响应头匹配
```
#### 4. 性能优化
- **正则缓存**: 编译后的正则表达式缓存
- **Lazy加载**: 首次调用时才加载JSON
- **Embed内嵌**: 编译时打包,无需外部文件
---
## 使用示例
### 基本用法
```go
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指纹**:
```json
{
"id": "wordpress",
"info": {
"name": "wordpress",
"tags": "detect,tech,wordpress"
},
"http": [{
"matchers": [{
"type": "word",
"words": [
"/wp-content/themes/",
"/wp-includes/"
],
"case-insensitive": true
}]
}]
}
```
**禅道OA指纹** (AND条件):
```json
{
"id": "zentao",
"http": [{
"matchers": [{
"type": "word",
"words": [
"/zentao/theme",
"zentaosid"
],
"condition": "and"
}]
}]
}
```
**Favicon Hash指纹**:
```json
{
"id": "openemr",
"http": [{
"matchers": [{
"type": "favicon",
"hash": ["1971268439"]
}]
}]
}
```
---
## 验证结果
### 测试用例
```bash
$ 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** | 固定 | 可选 |
---
## 后续计划
### 已实现功能
- [x] Favicon自动下载和hash计算 ✅
- [x] 使用mmh3算法计算favicon hash ✅
- [x] 并发指纹匹配(~267μs/3000+规则)✅
- [x] Version extractor(通用版本提取)✅
- [x] 指纹优先级排序(favicon > regex > word)✅
### 待实现功能
- [ ] 支持加载外部JSON文件
### 潜在改进
- [ ] 支持更多matcher类型 (status, size, binary)
- [ ] 指纹库热更新机制
- [ ] 匹配结果包含CPE信息
---
## 参考资料
- [FingerprintHub GitHub](https://github.com/0x727/FingerprintHub)
- [Observer Ward](https://github.com/emo-crab/observer_ward)
- [Nuclei Templates](https://github.com/projectdiscovery/nuclei-templates)
---
## License
增强指纹库来自FingerprintHub项目,遵循其原始License。