Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
289f104
V5.2: Finger 全面优化版
claude Jun 22, 2026
2d37130
Refactor Readme.md by removing obsolete content
sangnigege Jun 22, 2026
94675ed
docs: remove unverified acknowledgments, keep only referenced projects
claude Jun 22, 2026
2fb0de0
V6.0: update author to sangnigege, remove website, bump version
claude Jun 23, 2026
5cc5be2
feat: output all matched CMS instead of limiting to top 8
claude Jun 23, 2026
7474c56
feat: version output now includes CMS name as prefix
claude Jun 23, 2026
ac32278
feat: add version_regex to 47 high-value products
claude Jun 23, 2026
17adc7f
feat: dual favicon hash (EHole + FOFA compatible)
claude Jun 23, 2026
ae36bfa
feat: add --proxy support (HTTP/SOCKS5)
claude Jun 23, 2026
c49f00e
feat: merge MUKI fingerprint DB (+11,731 unique rules)
claude Jun 23, 2026
0bf951e
fix: remove 188 generic keywords causing mass false positives
claude Jun 23, 2026
8b2194e
fix: remove more generic keywords from MUKI-merged rules
claude Jun 23, 2026
1b2c424
feat: make CDN detection and IP geolocation opt-in
claude Jun 23, 2026
ad1e9c5
perf: replace BeautifulSoup with regex for HTML parsing
claude Jun 23, 2026
7916fd4
fix: remove generic keywords + delete Alt-Svc rule
claude Jun 23, 2026
7f8c8a8
docs: final README sync for V6.0
claude Jun 23, 2026
99eb9fd
fix: proper Ctrl+C handling with ThreadPoolExecutor
claude Jun 23, 2026
f62c784
fix: remove platform, copyright, theme from OR rules
claude Jun 23, 2026
4bd378f
fix: remove generic keywords found in finger6 scan analysis
claude Jun 23, 2026
083f8a6
feat: merge 8,719 quality rules from EHole fingerprint DB
claude Jun 23, 2026
fe76538
fix: merge 411 CMS name variants only, keep product-specific keywords
claude Jun 23, 2026
9af4af1
chore: clean up orphaned image and update .gitignore
claude Jun 23, 2026
f8eb66d
refactor: disable auto-downgrade and confidence threshold
claude Jun 23, 2026
9500de7
docs: final README sync with all current features
claude Jun 23, 2026
cc4cb73
feat: add 14 FOFA icon_hash fingerprints (13 products)
claude Jun 23, 2026
e491a0a
Revise fingerprint rules and clean up documentation
sangnigege Jun 23, 2026
90bb74c
feat: comprehensive fingerprint library & engine improvements
sangnigege Jun 23, 2026
d709a47
docs: fix README lineage (upstream EASY233/Finger V5.1, this repo V6.0)
sangnigege Jun 23, 2026
ee8b786
docs: rewrite README based on upstream EASY233/Finger, with V6.0 addi…
sangnigege Jun 23, 2026
c85f01b
docs: fix fingerprint rule docs to match actual code (fields, locatio…
sangnigege Jun 23, 2026
c6eaef5
fix: add encoding=utf-8 to default_creds.json reads (Windows GBK crash)
sangnigege Jun 23, 2026
614ab69
fix: restore real-time [+] console output in scan flow
sangnigege Jun 23, 2026
de9b5da
fix: V5.1-style console output with V6.0 confidence score
sangnigege Jun 23, 2026
07b964b
fix: remove Hikvision faviconhash 999357577 (45 FP on non-camera pages)
sangnigege Jun 23, 2026
ff31484
fix: remove generic Exchange (/owa/, Server:Microsoft) and H3C body s…
sangnigege Jun 23, 2026
134e893
fix: restore Exchange /owa/ + H3C body AND-multi-keyword rules (fix FN)
sangnigege Jun 23, 2026
35e37b0
fix: remove Jetty Error 404/403 title keywords, fix fnOS keyword, add…
sangnigege Jun 23, 2026
b0519a2
fix: improve Server version extraction for KM-MFP-http, squid, multi-…
sangnigege Jun 23, 2026
9bcf036
fix: remove 红帆 HFOffice and HP Printer / Server faviconhash rules (co…
sangnigege Jun 23, 2026
b615eeb
fix: restore Exchange Location:/owa/ and outlook keywords (expected_s…
sangnigege Jun 24, 2026
d9619c1
fix: remove empty Jetty title rule (keywords deleted with Error 404/4…
sangnigege Jun 24, 2026
dcd82e3
feat: add 33 FingerprintHub rules + expand version/model/creds/url
sangnigege Jun 24, 2026
16d6751
fix: add MD5 favicon hash support + remove 2 mislabeled faviconhash r…
sangnigege Jun 24, 2026
9e1a983
feat: +55 FingerprintHub rules +23 version_regex +18 default_creds
sangnigege Jun 24, 2026
8ce7b76
fix: wrap finger.json in dict structure + missing version_location de…
sangnigege Jun 24, 2026
0db4896
fix: add version_regex to OA products, final validation 0 errors
sangnigege Jun 24, 2026
3ea189a
fix: strip embedded creds from 51 CMS names into DefaultCreds column
sangnigege Jun 24, 2026
06b5e57
feat: expand default creds from DefaultCreds-cheat-sheet (strict word…
sangnigege Jun 24, 2026
66372c4
chore: remove 6 low-quality default creds entries (fake emails, non-p…
sangnigege Jun 24, 2026
bf9e3dd
fix: match default_creds product names to actual Finger CMS names
sangnigege Jun 24, 2026
2932e17
feat: full cross-reference with DefaultCreds-cheat-sheet, 593→1737 pr…
sangnigege Jun 24, 2026
9141036
chore: remove 2 generic page entries from default_creds
sangnigege Jun 24, 2026
8c59c3a
feat: add common weak passwords (weblogic/nacos/xxl-job/geoserver/dru…
sangnigege Jun 24, 2026
91896fe
fix: clean last embedded SQL injection payload from CMS name
sangnigege Jun 24, 2026
37b91d0
fix: add Nexus Repository Manager + unauthenticated access notes for …
sangnigege Jun 24, 2026
dba72fd
feat: annotated fuzzy default_creds matching with source labels
sangnigege Jun 24, 2026
1ca3a4d
fix: remove JBoss creds from Tomcat, generic Windows from Exchange
sangnigege Jun 24, 2026
96ae3db
Revert "fix: remove JBoss creds from Tomcat, generic Windows from Exc…
sangnigege Jun 24, 2026
b94fecc
docs: update README for default_creds 1756 products + annotated sources
sangnigege Jun 24, 2026
223720f
docs: credit DefaultCreds-cheat-sheet in reference list
sangnigege Jun 24, 2026
09c2ae1
docs: fix product count, update V6.0 changelog with new features
sangnigege Jun 24, 2026
16562b2
Revise README for version updates and badge corrections
sangnigege Jun 24, 2026
51db6ad
perf: split timeout into (connect=3s, read=settings.timeout) for fast…
sangnigege Jun 24, 2026
48d8a75
release: prepare Finger v6.1
claude Jun 28, 2026
a0af60b
fix: remove real server headers from Honeypot rule (server: apache/to…
sangnigege Jul 7, 2026
369f8bb
docs: reformat V6.1 changelog to bullet-point style consistent with V6.0
sangnigege Jul 7, 2026
1170246
Update Readme.md
sangnigege Jul 7, 2026
cc4fea8
refactor: rename Confidence column header to 最高置信度
sangnigege Jul 7, 2026
9408f00
Revert "refactor: rename Confidence column header to 最高置信度"
sangnigege Jul 7, 2026
22a8ff2
refactor: rename Confidence column to MaxConfidence
sangnigege Jul 7, 2026
0b8ec88
Update EHole link and Stargazers image
sangnigege Jul 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Virtual environment
venv/
.venv/
env/

# Python
__pycache__/
*.py[cod]
*.pyo
*.egg-info/
dist/
build/

# IDE
.idea/
.vscode/
*.swp
*.swo

# Project output
output/
*.xlsx
*.csv
*.bak
library/finger.json.backup-*

# OS
.DS_Store
Thumbs.db
3 changes: 0 additions & 3 deletions .idea/.gitignore

This file was deleted.

8 changes: 0 additions & 8 deletions .idea/finger.iml

This file was deleted.

12 changes: 0 additions & 12 deletions .idea/inspectionProfiles/Project_Default.xml

This file was deleted.

6 changes: 0 additions & 6 deletions .idea/inspectionProfiles/profiles_settings.xml

This file was deleted.

4 changes: 0 additions & 4 deletions .idea/misc.xml

This file was deleted.

8 changes: 0 additions & 8 deletions .idea/modules.xml

This file was deleted.

6 changes: 0 additions & 6 deletions .idea/vcs.xml

This file was deleted.

65 changes: 65 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Changelog

## V6.1

V6.1 是一次架构收敛、扫描链路修复和规则质量治理版本。

### 架构与状态管理

| 问题 | 修改 |
|------|------|
| CLI、库模式、旧 `lib/req.py` 各自维护状态和输出逻辑 | 新增 `lib/app.py`、`lib/runtime.py`、`lib/resultio.py`,统一应用编排、运行时配置和导出 |
| `Identify.run()` 会写全局结果,库模式不够可控 | `Identify.match()` / `match_details()` 保持纯函数式返回,`run()` 支持显式 `result_store` |
| 导出逻辑分散且 xlsx/csv 存在公式注入风险 | 统一导出实现,xlsx 强制字符串写入,CSV 使用标准库转义 |
| 同秒多次输出可能覆盖文件 | 输出文件名加入毫秒,重名时自动追加后缀 |

### 扫描链路

| 问题 | 修改 |
|------|------|
| HTTP 请求发到 HTTPS 端口时直接失败 | 检测 `plain HTTP request was sent to HTTPS port` 并自动升级 HTTPS 重试 |
| 同时扫描 HTTP/HTTPS 时升级请求可能重复 | 记录调度集合,避免重复请求已调度的 HTTPS 目标 |
| JS/meta refresh 跳转页识别不到最终产品 | 支持同源前端跳转跟进,限制最大深度并拒绝跨源跳转 |
| `stream=True` 下 `apparent_encoding` 可能提前消费响应体 | 先读取响应体并写回 `_content`,再判断编码,避免标题/正文为空 |
| 大响应体直接丢弃导致漏标题和首屏特征 | 改为读取前 128KB,仍保留 favicon 拉取 |
| 高置信页面跳过 favicon 会漏掉 hash 证据 | 默认始终拉取 favicon |
| 请求错误只表现为空结果 | 输出 `error_type` / `error_detail`,区分超时、代理、SSL、连接、解析等错误 |

### 指纹识别与置信度

| 问题 | 修改 |
|------|------|
| 正则规则多关键词只处理首条 | `regula` 规则支持完整 `and/or` 多正则匹配 |
| keyword 大小写敏感导致漏报 | keyword 匹配改为大小写不敏感 |
| 同产品多条证据只取最高一条 | 同产品证据聚合,跨位置证据提高置信度 |
| 多产品共用一个总置信度,不利于人工判断误报 | JSON 增加 `fingerprints` 明细,CLI 显示 `产品[置信度]`,xlsx 增加 `FingerprintDetails` |
| 支撑服务和真实产品混在一起容易误判 | Nginx/Apache/Cloudflare/Intercom/cdnjs 等作为陪衬服务降权显示,不再压掉真实产品 |
| Grafana 版本正则过宽,可能提取伪版本 | 修复多捕获组取值逻辑并收窄 Grafana 版本正则 |

### 规则库治理

| 问题 | 修改 |
|------|------|
| 同产品多展示名造成别名碎片 | 增加别名归一化和展示名优选 |
| Swagger 纯路径规则制造低置信噪声 | 删除/收窄重复和纯路径 Swagger 规则,保留页面证据 |
| `Access-Control-Allow-Methods`、`jsessionid`、`.action/.do` 等泛化规则误报 | 删除相关过宽规则 |
| `0example`、`HttpOnly` 属于占位/属性规则,不是产品指纹 | 删除对应规则 |
| 裸 `GitLab`、`theme`、`platform`、`datalayer`、`x-ua-compatible`、`FrontEnd`、`Isite` 等词级规则误报 | 收窄为专用证据或删除 |
| Sonatype 营销页被误报为 Nexus/GitLab/Sangfor/VMware | 增加真实页面回归并收紧相关规则 |
| 默认口令按展示名碎片重复或漏合并 | 默认口令按归一化 CMS 名合并输出 |

### 测试与审计

| 问题 | 修改 |
|------|------|
| 只有合成样本,不足以覆盖真实页面误报 | 增加真实页面夹具,覆盖 Swagger、Grafana、Harbor、Portainer、Nexus、Druid、Gitea、Prometheus、Sonatype 等 |
| 规则质量只能靠人工看扫描结果 | `RuleAudit` 增加静态规则审计、版本正则审计、路径型规则提示 |
| 回归缺少扫描行为覆盖 | 新增协议升级、前端跳转、favicon、错误分类、大响应体、输出安全等测试 |

### 验证

```bash
python -m unittest discover -s tests -v
```

当前测试集:41 条,通过。
51 changes: 20 additions & 31 deletions Finger.py
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,31 +1,20 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author = EASY
from config import config
from lib.cmdline import cmdline
from lib.checkenv import CheckEnv
from lib.req import Request
from lib.output import Output
from lib.ipAttributable import IpAttributable
from colorama import init as wininit
from lib.options import initoptions
wininit(autoreset=True)

if __name__ == '__main__':
# 打印logo
print(config.Banner)
# 检测环境
check = CheckEnv()
# 加载参数
options = initoptions(cmdline())
run = Request()
IpAttributable()
save = Output()








#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author = EASY233
import os
import warnings
from lib.cmdline import cmdline
from colorama import init as wininit
from lib.app import FingerApplication

# 过滤第三方库在新版 Python 下的 DeprecationWarning
warnings.filterwarnings("ignore", category=DeprecationWarning, module="xlsxwriter")

wininit(autoreset=True)

if __name__ == '__main__':
from config import settings

print(settings.Banner)
app = FingerApplication()
app.run(cmdline())
Loading