郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担。
类别 |
说明 |
作者 |
三米前有蕉皮 |
团队 |
0x727 未来一段时间将陆续开源工具 |
定位 |
社区化指纹库,让管理和使用指纹规则更加简单。 |
语言 |
Yaml |
功能 |
可自定义请求,使用github actions 自动更新指纹库。 |
name: apache-shiro
priority: 3
nuclei_tags:
- - "shiro"
- "apache"
fingerprint:
- path: /
request_method: post
request_headers:
Cookie: rememberMe=admin;rememberMe-K=admin
request_data: ''
status_code: 0
headers:
Set-Cookie: rememberMe=deleteMe
keyword: [ ]
favicon_hash: [ ]
- path: /
request_method: get
request_headers: { }
request_data: ''
status_code: 0
headers: { }
keyword:
- </i> shiro</li>
favicon_hash: [ ]
字段 |
数据类型 |
描述 |
request_method |
String |
自定义请求方法 |
request_data |
String |
自定义请求数据,base64编码后的字符串 |
request_headers |
HashMap<String,String> |
自定义请求头 |
path |
String |
HTTP请求的路径。 |
status_code |
u32 |
响应状态码,不匹配可以填0 |
headers |
HashMap<String,String> |
相应的请求头,以键值对出现,值填* 时只匹配键 |
keyword |
Vec |
响应的HTML关键词数组,可以添加多个关键词提高识别精度 |
favicon_hash |
Vec |
favicon的MD5哈希数组,取并集关系,只要匹配到一个就算识别到 |
priority |
u32 |
优先程度,用来排序是否为重要组件资产,数字越大越重要,可选:[1,2,3],有标题和存在漏洞都会+1 |
nuclei_tags |
Vec<Vec> |
nuclei中的标签,当标签为[["shiro","apache"]]的时候, yaml中同时有shiro ,apache 这两个标签会被分到apache-shiro 这个文件夹 |
- 一个
path
为一组指纹,像上面的yaml规则中有两组指纹,只要匹配到了一组,就会返回name
字段,也就是apache-shiro
。
- 为了方便验证编写的yaml规则是否有效,可以使用
--verify
参数指定要验证的yaml文件,-t
指定测试目标对指纹进行验证。
➜ ~ ./observer_ward_amd64 --verify 0x727/FingerprintHub/fingerprint/swagger.yaml -t http://httpbin.org
[ http://httpbin.org |["swagger"] | 9593 | 200 | httpbin.org ]
Important technology:
+--------------------+---------+--------+-------------+-------------+----------+
| url | name | length | status_code | title | priority |
+====================+=========+========+=============+=============+==========+
| http://httpbin.org | swagger | 9593 | 200 | httpbin.org | 5 |
+--------------------+---------+--------+-------------+-------------+----------+
- 当前项目支持通过issue提交指纹,但是这样不会把你添加进贡献者列表,如果你希望加入贡献者请选择使用提交PR贡献指纹。
- 查看例子:提交指纹示例
- 点击在线提交指纹
- 提交指纹的标题必须要以
提交指纹
开头,组件名称使用方括号引起来的全英文,例如提交指纹-[apache-shiro]
,为apache-shiro
组件提交指纹。
- 规则使用覆盖的方式提交,按照markdown的Yaml代码格式,预填了,直接在中间插入规则就可以了。
- 如果填写了测试目标会自动验证,没有就等着管理员审核通过再合并。
git clone git@github.com:你的个人github用户名/FingerprintHub.git
cd FingerprintHub
git remote add upstream git@github.com:0x727/FingerprintHub.git
git fetch upstream
git config --global user.name "$GITHUB_USERNAME"
git config --global user.email "$GITHUB_EMAIL"
git config --global github.user "$GITHUB_USERNAME"
git fetch --all
git fetch upstream
- 不要直接在
main
分支上修改,例如我想添加一个thinkphp
的指纹,创建一个新的分支并切换到新的分支。
- 复制一份指纹规则文件,修改文件名和你想要提交的组件名一样,修改yaml文件里面的
name
字段为添加的组件名,添加或者修改规则。
- 跟踪修改和提交Pull-Requests,合并指纹。
git add 你添加或者修改的文件名
git commit -m "添加的组件名或者你的描述"
git push origin thinkphp
- 打开你Fork这个项目的地址,点击与上游合并,等待审核合并指纹。
- 如果你的开源工具中也使用了
FingerprintHub
,我感到非常的荣幸,欢迎补充列表,当项目有破坏性更新时可以及时通知到你。
- 当前指纹库收集于互联网,虽然已经经过了人工整理,但是难免会有以下情况:
- 出现误报,当指纹不够精确时会产生识别不准确的情况。
- 组件重复,可能出现多个组件名称,但是都是同一个组件。
- 识别不出组件,指纹规则覆盖不到。
- 出现上面情况可以提交issues,可以附上演示URL地址,如果不方便演示可以提交首页的HTML源码,我们会人工修正指纹规则。