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/",
}
指紋識別腳本介紹
指紋分類表結構介紹
{
"分類編號": {
"name": "分類名字",
"desc": "分類描述"
},
,,,
}
指紋規則表結構介紹
headers.json,html.json,title.json
{
"指紋名字": ["指紋規則","指紋權重(int型別)"]
,,,
}
指紋識別代碼邏輯介紹
- 獲取指紋分類集合、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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/344175.html
標籤:其他
上一篇:【分布式微服務企業快速架構】SpringCloud分布式、微服務、云架構快速開發平臺原始碼
下一篇:WebSocket的實作原理
