github.com/chainreactors/fingers@v1.2.1/README.md (about) 1 2 ## Introduce 3 4 多指纹库聚合识别引擎. 当前支持`fingers(主指纹库)` `wappalyzer`, `fingerprinthub`, `ehole`, `goby` 指纹 5 6 不用再挑选指纹识别的工具, AllInOne一站式实现 7 8 使用了fingers的工具: 9 10 * ⭐ [spray](https://github.com/chainreactors/spray) **最佳实践**, 集合了目录爆破, 指纹识别, 信息收集等等功能的超强性能的http fuzz工具 11 * [gogo](https://github.com/chainreactors/gogo), 使用了fingers原生指纹库, 红队向的自动化扫描引擎 12 * [zombie](https://github.com/chainreactors/zombie), 在爆破前使用fingers进行指纹验证, 提高爆破效率 13 14 (任何使用了fingers的工具欢迎在issue中告诉我, 我会将你的工具添加到这里) 15 16 ## Features 17 18 * 支持多指纹库聚合识别 19 * ✅ fingers 原生指纹库 20 * ✅ [wappalyzer](https://github.com/projectdiscovery/wappalyzergo) 21 * ✅ [fingerprinthub](https://github.com/0x727/FingerprintHub) 22 * ✅ [ehole](https://github.com/EdgeSecurityTeam/EHole) 23 * ✅ goby 24 * 支持多指纹源favicon识别 25 * 超强性能, 单个站点识别 <100ms. 重写了各指纹库的引擎, 并极大优化了性能 26 * 聚合输出, 多指纹库的结果将会自动整合 27 * 支持CPE的URI, FSB, WFN格式输出 28 29 ### morefingers 30 31 https://github.com/chainreactors/morefingers 32 33 fingers的拓展引擎, 有更全更大的指纹库. 34 35 从对闭源工具的逆向得到的指纹库, 为了避免可能存在的纠纷, 不提供开源版本. 36 37 ## QuickStart 38 39 `go get github.com/chainreactors/fingers@master` 40 41 ### Example 42 43 document: https://chainreactors.github.io/wiki/libs/fingers/ 44 45 调用内置所有进行指纹引擎识别, 示例: 46 47 ```golang 48 func TestEngine(t *testing.T) { 49 engine, err := NewEngine() 50 if err != nil { 51 panic(err) 52 } 53 resp, err := http.Get("http://127.0.0.1:8080/") 54 if err != nil { 55 return 56 } 57 content := httputils.ReadRaw(resp) 58 frames, err := engine.DetectContent(content) 59 if err != nil { 60 return 61 } 62 fmt.Println(frames.String()) 63 } 64 ``` 65 66 调用SDK识别Favicon指纹, 示例: 67 68 ```golang 69 func TestFavicon(t *testing.T) { 70 engine, err := NewEngine() 71 if err != nil { 72 panic(err) 73 } 74 resp, err := http.Get("http://baidu.com/favicon.ico") 75 if err != nil { 76 return 77 } 78 content := httputils.ReadRaw(resp) 79 body, _, _ := httputils.SplitHttpRaw(content) 80 frame := engine.DetectFavicon(body) 81 fmt.Println(frame.String()) 82 } 83 ``` 84 85 更多用法请见: https://chainreactors.github.io/wiki/libs/fingers/sdk/ 86 87 ## fingers 引擎 88 89 fingers指纹引擎是目前特性最丰富, 性能最强的指纹规则库. 90 91 * 支持多种方式规则配置 92 * 支持多种方式的版本号匹配 93 * 404/favicon/waf/cdn/供应链指纹识别 94 * 主动指纹识别 95 * 超强性能, 采用了缓存,正则预编译,默认端口,优先级等等算法提高引擎性能 96 * 重点指纹,指纹来源与tag标记 97 98 99 ### 内置指纹库 100 101 指纹库位于: https://github.com/chainreactors/templates/tree/master/fingers 102 103 文档: https://chainreactors.github.io/wiki/libs/fingers/rule/ 104 105 tcp指纹与http指纹为同一格式, 但通过不同的文件进行管理 106 107 ### 完整的配置 108 109 fingers设计的核心思路是命中一个指纹仅需要一条规则, 因此配置的多条规则中, 只需要任意一条命中即标记为命中, 需要在编写指纹的时候注意找到最能匹配目标框架的那条规则. 110 111 一个完整的配置: 112 113 ```yaml 114 - name: frame # 指纹名字, 匹配到的时候输出的值 115 default_port: # 指纹的默认端口, 加速匹配. tcp指纹如果匹配到第一个就会结束指纹匹配, http则会继续匹配, 所以默认端口对http没有特殊优化 116 - '1111' 117 protocol: http # tcp/http, 默认为http 118 rule: 119 - version: v1.1.1 # 可不填, 默认为空, 表示无具体版本 120 regexps: # 匹配的方式 121 vuln: # 匹配到vuln的正则, 如果匹配到, 会输出framework为name的同时, 还会添加vuln为vuln的漏洞信息 122 - version:(.*) # vuln只支持正则, 同时支持版本号匹配, 使用括号的正则分组. 只支持第一组 123 regexp: # 匹配指纹正则 124 - "finger.*test" 125 # 除了正则, 还支持其他类型的匹配, 包括以下方式 126 header: # 仅http协议可用, 匹配header中包含的数据 127 - string 128 body: # 包含匹配, 非正则表达式 129 - string 130 md5: # 匹配body的md5hash 131 - [md5] 132 mmh3: # 匹配body的mmh3hash 133 - [mmh3] 134 135 # 只有上面规则中的至少一条命中才会执行version 136 version: 137 - version:(.*) # 某些情况下难以同时编写指纹的正则与关于版本的正则, 可以特地为version写一条正则 138 139 favicon: # favicon的hash值, 仅http生效 140 md5: 141 - f7e3d97f404e71d302b3239eef48d5f2 142 mmh3: 143 - '516963061' 144 level: 1 # 0代表不需要主动发包, 1代表需要额外主动发起请求. 如果当前level为0则不会发送数据, 但是依旧会进行被动的指纹匹配. 145 send_data: "info\n" # 匹配指纹需要主动发送的数据 146 vuln: frame_unauthorized # 如果regexps中的vuln命中, 则会输出漏洞名称. 某些漏洞也可以通过匹配关键字识别, 因此一些简单的poc使用指纹的方式实现, 复杂的poc请使用-e下的nuclei yaml配置 147 148 ``` 149 150 为了压缩体积, 没有特别指定的参数可以留空会使用默认值。 151 152 在两个配置文件中包含大量案例可供参考。 153 154 但实际上大部分字段都不需要配置, 仅作为特殊情况下的能力储备。 155 156 每个指纹都可以有多个rule, 每个rule中都有一个regexps, 每个regexps有多条不同种类的字符串/正则/hash 157 158 159 ## TODO 160 161 - [x] 指纹名重定向, 统一多指纹库的同一指纹不同名问题 162 - [x] 指纹黑名单, 用于过滤指纹库中的垃圾指纹 163 - [x] 更丰富的CPE相关特性支持 164 - [ ] 更优雅的与nuclei或其他漏洞库联动 165 - 支持更多引擎 166 - [ ] [nuclei technologies](https://github.com/projectdiscovery/nuclei-templates/tree/main/http/technologies) 实现 167 - [ ] fingerprinthub v4 168 - [ ] tidefinger 169 - [ ] kscan 170 - [ ] nmap 171 172 ## Thanks 173 174 * [wappalyzer](https://github.com/projectdiscovery/wappalyzergo) 175 * [fingerprinthub](https://github.com/0x727/FingerprintHub) 176 * [ehole](https://github.com/EdgeSecurityTeam/EHole) 177 * goby @XiaoliChan @9bie