web指纹识别笔记
web指纹识别笔记
指纹识别分类表
分类编号 | 分类名称 | 中文名称 | 备注说明 |
---|---|---|---|
1 | CMS | 内容管理系统 | 例如:wordperss |
2 | Message Boards | 留言板 | 例如:phpBB |
3 | Database Managers | 数据库管理 | 例如:phpMyAdmin |
4 | Documentation Tools | 文件工具 | 例如:GitBook |
5 | Widgets | 窗口小部件 | 例如:Facebook |
6 | Ecommerce | 电子商务 | 例如:Wikinggruppen |
7 | Photo Galleries | 照片画廊 | 例如:phpAlbum |
8 | Wikis | 维基百科 | 例如:ikiwiki |
9 | Hosting Panels | 主机控制板 | 例如:cPanel |
10 | Analytics | 分析统计 | 例如:Webtrends |
11 | Blogs | 博客 | 例如:Typecho |
12 | JavaScript Frameworks | JavaScript框架 | 例如:SoundManager |
13 | Issue Trackers | 问题跟踪 | 例如:Redmine |
14 | Video Players | 视频播放器 | 例如:Asciinema |
15 | Comment Systems | 评论系统 | 例如:Question2Answer |
16 | Captchas | 验证码 | 例如:Mollom |
17 | Font Scripts | 字体脚本 | 例如:Ionicons |
18 | Web Frameworks | Web框架 | 例如:Includable |
19 | Miscellaneous | 其他 | 例如:Twitter Emoji(Twemoji) |
20 | Editors | 编辑器 | 例如:FrontPage |
21 | LMS | 学习管理系统 | 例如:Dokeos |
22 | Web Servers | Web服务 | 例如:Apache |
23 | Cache Tools | 缓存工具 | 例如:wpCache |
24 | Rich Text Editors | 富文本编辑器 | 例如:TinyMCE |
25 | JavaScript Graphics | JavaScript图形插件 | 例如:Timeplot |
26 | mobile Frameworks | 移动框架 | 例如:Mobify |
27 | Programming Languages | 开发语言 | 例如:Go |
28 | Operating Systems | 操作系统 | 例如:Gentoo |
29 | Search Engines | 搜索引擎 | 例如:Fact Finder |
30 | Web Mail | Web邮件 | 例如:SouirrelMail |
31 | CDN | CDN | 例如:Netlify |
32 | Marketing Automation | 自动化营销 | 例如:Marketo |
33 | Web Server Extensions | Web服务器扩展 | 例如:mod wsgi |
34 | Databases | 数据库 | 例如:Mysql |
35 | Maps | 地图 | 例如:Ushahidi |
36 | Advertising Networks | 广告网络 | 例如:Titan |
37 | Network Devices | 网络设备 | 例如:Moxa |
38 | Media Servers | 媒体服务器 | 例如:MedisTomb |
39 | Webcams | 网络摄像头 | 例如:MOBOTIX |
40 | Printers | 打印机 | 例如:Dell |
41 | Payment Processors | 付款处理器 | 例如:Stripe |
42 | Tag Managers | 标签管理 | 例如:Google Tag Manager |
43 | Paywalls | 付费 | 例如:Piano Solo |
44 | Build CI Systems | 持续集成系统 | 例如:Jenkins |
45 | Control Systems | 控制系统 | 例如:Schneider |
46 | Remote Access | 远程访问 | 例如:ShellInABox |
47 | Dev Tools | 开发工具 | 例如:Phabricator |
48 | Network Storage | 网络存储 | 例如:Synology DiskStation |
49 | Feed Readers | Feed阅读器 | 例如:Planet |
50 | Document Management Systems | 文档管理系统 | 例如:MHonArc |
51 | Landing Page Builders | 引导页 | 例如:ApexPages |
52 | Live Chat | 在线聊天 | 例如:Aircall |
53 | CRM | 客户关系管理 | 例如:Salesforce |
54 | SEO | 引擎优化 | 例如:Yoast SEO |
55 | Accounting | 会计 | 例如:Akaunting |
56 | Cryptominer | 挖矿程序 | 例如:ProjectPoi |
57 | Static Site Generator | 静态网站生成器 | 例如:Hugo |
58 | User Onboarding | 聊天机器人软件 | 例如:instabot |
59 | JavaScript Libraries | JavaScript库 | 例如:jQuery |
60 | Containers | 容器 | 例如:Docker |
61 | SaaS | SaaS | 例如:Amazon ECS |
62 | PaaS | PaaS | 例如:Amazon Web Services |
63 | IaaS | IaaS | 例如:LocalFocus |
64 | Reverse Proxy | 反向代理 | 例如:Nginx |
65 | Load Balancer | 负载均衡 | 例如:Amazon ELB |
66 | Service Banner | 服务版本 | 例如:SSH |
67 | Securities Web | 证券行业web | 例如:thinkive云投顾 |
68 | Securities Remote Access | 证券行业远程访问 | 例如:同花顺 |
指纹识别规则表
字段 | 说明 |
---|---|
name | 指纹名字 |
cats | 分类集合,列表内嵌套字符串类型的分类编号 |
icon | 指纹ico的MD5值 |
implies | 包含,列表内嵌套字符串类型的指纹名字,例如:存在wordpress,一定会存在php、mysql |
excludes | 排除,列表内嵌套字符串类型的指纹名字,例如:当前指纹存在时,一定不会存在其他指纹 |
website | 匹配软件官方网站,text代表文本匹配,regex代表re匹配 |
title | 匹配页面标题,text代表文本匹配,regex代表re匹配 |
js | 匹配scripts标签中的内容,text代表文本匹配,regex代表re匹配 |
headers | 匹配response返回的请求头信息,text代表文本匹配,regex代表re匹配 |
html | 匹配html返回内容,text代表文本匹配,regex代表re匹配 |
url | 匹配网页中所有url的数据,text代表文本匹配,regex代表re匹配 |
cookies | 匹配cookie内容,text代表文本匹配,regex代表re匹配 |
meta | 匹配meta标签中的参数的数据,text代表文本匹配,regex代表re匹配 |
script | 匹配script标签导入的路径地址,text代表文本匹配,regex代表re匹配 |
sub_param | 匹配response返回的请求头的子参数信息,text代表文本匹配,regex代表re匹配 |
_fingerprint_note | 当前指纹的应用描述,比如nginx,Nginx是一个高性能的HTTP和反向代理web服务器 |
_fingerprint_test_url | 测试指纹是否准确的url,必填项 |
{
"name": "jquery",
"cats": [59],
"icon": "e33ee4e794a2a92ebfaa0c569cc88103", # 图标的MD5值
"implies": "javaScript",
"excludes": "javaScript",
"website": {"text": "//api.jquery.com" or "regex": "//api.jquery.com"},
"title": {"text": "//api.jquery.com" or "regex": "//api.jquery.com"},
"js": {"text": "//api.jquery.com" or "regex": "//api.jquery.com"},
"headers": {"text": "//api.jquery.com" or "regex": "//api.jquery.com"},
"html":{"text": "//api.jquery.com" or "regex": "//api.jquery.com"},
"url": {"text": "//api.jquery.com" or "regex": "//api.jquery.com"},
"cookies": {"text": "//api.jquery.com" or "regex": "//api.jquery.com"},
"meta": {"text": "//api.jquery.com" or "regex": "//api.jquery.com"},
"script": {"text": "//api.jquery.com" or "regex": "//api.jquery.com"},
"sub_param": {
"Server": {
"text": "//api.jquery.com" or "regex": "//api.jquery.com"
}
},
"_fingerprint_note": "jQuery是一个快速、小且功能丰富的JavaScript库。",
"_fingerprint_test_url": "https://jquery.com/",
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
指纹识别脚本介绍
指纹分类表结构介绍
{
"分类编号": {
"name": "分类名字",
"desc": "分类描述"
},
。。。
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
指纹规则表结构介绍
headers.json,html.json,title.json
{
"指纹名字": ["指纹规则","指纹权重(int类型)"]
。。。
}
- 1
- 2
- 3
- 4
指纹识别代码逻辑介绍
- 获取指纹分类集合、headers规则集合、title规则集合、HTML规则集合
- 请求目标网址
- 获取请求头信息
- 对比请求头规则与内容
- 获取网站内容,并转化成DOM树结构对象
- 对比title规则与内容
- 去掉html中不需要的节点
- 对比html股则与内容
- 返回最终结果
对比方法代码记录
# 对比规则与内容
@staticmethod
def check_finger(item_list, string):
"""
对比规则与内容
:param item_list: 规则集合
:param string: 内容字符串
:return: 结果集合,例如:{"jquery": 30}
"""
res_dict = {}
for i in item_list.keys():
# 一种同时存在与和或,一种只存在与,一种只存在或,一种文本
if "(?=.*" in item_list[i][0] and '|' in item_list[i][0]:
for j in item_list[i][0].split("|"):
if "(?=.*" in j:
list1 = re.findall(r"*(.*?))", j)
list2 = [j for j in re.findall(r"(?=.*(.*?))", j) if j in string] +
[j for j in re.findall(r"(?!=.*(.*?))", j) if j not in string]
if len(list1) == len(list2):
res_dict[i] = int(item_list[i][1])
else:
if j in string:
res_dict[i] = int(item_list[i][1])
elif "(?=.*" in item_list[i][0]:
list1 = re.findall(r"*(.*?))", item_list[i][0])
list2 = [j for j in re.findall(r"(?=.*(.*?))", item_list[i][0]) if j in string] +
[j for j in re.findall(r"(?!=.*(.*?))", item_list[i][0]) if j not in string]
if len(list1) == len(list2):
res_dict[i] = int(item_list[i][1])
elif '|' in item_list[i][0]:
if re.search(item_list[i][0], string):
res_dict[i] = int(item_list[i][1])
elif item_list[i][0] in string:
res_dict[i] = int(item_list[i][1])
return res_dict
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
推荐阅读