mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-23 19:51: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)
249 lines
5.5 KiB
Markdown
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。
|