mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-22 03:10:42 +08:00
- UDP 插件在 -p 指定端口时被跳过 - Redis exploit 无超时保护 / readReply 吞没非超时错误 - service_probe 连接丢失后静默成功 - SNMP 探测成功但终端无输出 - SSH 爆破不稳定 (并发过高 + 自适应超时过短 + 限流误判) - 进度条 isActive 竞态 新增 Config.ModuleTimeout() 协议级超时下限 (≥3s) 新增 ErrorTypeThrottle 限流错误分类
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。