mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-22 19:21:52 +08:00
## 架构重构
- 全局变量消除,迁移至 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)
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。