指紋識別小工具,汲取整合多個 web 指紋庫,讓指紋檢測更快更準

指紋識別小工具,汲取整合多個 web 指紋庫,讓指紋檢測更快更準

TideFinger

TideFinger,一個開源的指紋識別小工具,使用了傳統和現代檢測技術相結合的指紋檢測方法,讓指紋檢測更快捷、準確。

項目地址

https://github.com/TideSec/TideFinger

前言

通過分析 web 指紋的檢測對象、檢測方法、檢測原理及常用工具,設計了一個簡易的指紋蒐集腳本來協助發現新指紋,並提取了多個開源指紋識別工具的規則庫並進行了規則重組,開發了一個簡單快捷的指紋識別小工具 TideFinger,並實現了一套在線的指紋識別平臺“潮汐指紋” http://finger.tidesec.net。

通過對各種識別對象、識別方法、識別工具的分析,發現大家的指紋庫各式各樣,識別方式也是各有千秋,傳統的 md5、url 路徑的方式居多,識別 header 信息的也是不少,但沒有一個能集眾家之長的小工具和指紋庫。

於是作者參考了 webfinger 和 whatcms 的部分代碼並進行了整合優化,做了一個小工具TideFinger。

安裝

1、識別腳本的安裝和使用都比較簡單

安裝python2依賴庫

pip install lxml
pip install requests
pip install bs4
說明:sqlite3 庫在 Python 2.5.x 以上版本默認自帶了該模塊,如提示 sqlite3 出錯請自行排查。

2、執行腳本

$ python TideFinger.py
Usage: python TideFinger.py -u http://www.123.com [-p 1] [-m 50] [-t 5]
-u: 待檢測目標 URL 地址
-p: 指定該選項為1後,說明啟用代理檢測,請確保代理文件名為 proxys_ips.txt ,每行一條代理,格式如: 124.225.223.101:80
-m: 指紋匹配的線程數,不指定時默認為50
-t: 網站響應超時時間,默認為5秒

指紋識別界面如下:

指紋識別小工具,汲取整合多個 web 指紋庫,讓指紋檢測更快更準

技術原理及實現

指紋庫整理

作者蒐集了大量的開源指紋識別工具,從中提取了指紋庫,進行了統一的格式化處理並進行去重,最終得到了一個大約 2078條的傳統指紋庫。作者本來想把 fofa 的庫也合併進來,發現格式差異有些大,便保持了 fofa 指紋庫,並把 WebEye 的部分指紋和 fofa 指紋進行了合併。這樣就保留了兩個指紋庫,其中 cms 指紋庫為傳統的 md5、url 庫,大約 2078條指紋,可通過關鍵字、md5、正則進行匹配,fofa 庫為2119指紋,主要對 Header、url 信息進行匹配。

指紋識別小工具,汲取整合多個 web 指紋庫,讓指紋檢測更快更準

指紋庫優化

在對指紋庫整理去重後,對每個指紋進行了命中率的標識,當匹配到某個指紋時該指紋命中率會加1,而在使用指紋時會從優先使用命中率高的指紋。

然後作者從互聯網中爬取了 10W個域名進行了命中率測試,然後對一些誤報率比較高的指紋進行了重新優化,得到了一份相對更高效的指紋庫。

指紋識別小工具,汲取整合多個 web 指紋庫,讓指紋檢測更快更準

指紋識別腳本

有了指紋庫之後,識別腳本就相對比較簡單了,已有的一些也都比較成熟了,直接使用了 webfinger 和 whatcms 的部分代碼並進行了整合優化,於是就有了 TideFinger。

1、功能邏輯都比較簡單,先用 fofa 庫去匹配,然後獲取一定 banner,如果 banner 中識別除了 cms,則返回結果,如果未識別到 cms,則會調用 cms 規則庫進行匹配各規則。

2、腳本支持代理模式,當設置了 -p 參數,且 proxys_ips.txt 文件包含代理地址時,腳本會隨機調用代理地址進行掃描,以避免被封 ip,不過這樣的話效率可能會低一些。畢竟蒐集的免費代理質量還是差一些,速度會慢很多。有錢人可以找收費代理池,然後每個規則都用不同代理去請求,這樣肯定不會被封!

代理地址的蒐集可以使用我修改的另一個代理池 https://github.com/TideSec/Proxy_Pool,提供了自動化的代理 ip 抓取+評估+存儲+展示+接口調用。

3、經測試,一般網站把所有指紋跑一遍大約需要 30秒時間,個別的網站響應比較慢的可能耗時更長一些,可以通過設置網站超時時間進行控制。

指紋識別平臺

在有了指紋庫和識別腳本之後,作者繼續完善下這個功能,於是又加入了其他一些功能,有個這個在線指紋查詢平臺 http://finger.tidesec.net。

開始想加的很多,但後來在速度和時間方面不得不進行了一定的取捨,於是就有了目前如下的功能。

1、網站信息:網站標題、狀態碼、302跳轉信息等;

2、IP 地址信息:IP 歸屬地、IP 服務商信息、GPS 信息;

3、CDN 識別:對目標是否使用 CDN 進行檢測,但目前 CDN 識別指紋還不多,對部分識別出使用 CDN 的目標還會列出來 CNAME;

4、中間件識別:主要通過 http 頭信息中的 XPB、server 等字段獲取中間件信息,如 nginx、iis、tomcat等;

5、更多banner:主要是調用了whatweb和Wapplyzer進行更多banner信息的獲取,如jquery、bootstrap 等;

6、操作系統識別:識別比較簡單,通過 ttl 值和文件大小寫是否敏感...用 nmap 去識別的話速度太慢...

7、本來還加入了子域名發現、端口掃描和 waf 探測等等,但發現耗時相對較長,而且比較容易被封 IP,所以又去掉了。

指紋識別小工具,汲取整合多個 web 指紋庫,讓指紋檢測更快更準

待解決的問題

1、指紋庫的繼續完善:這是個曠日持久的工作,希望能堅持下去,此庫作者會持續的開源最新指紋庫,希望大家手頭有好的資源也可以貢獻出來。

2、代理問題:雖然集成了代理功能,但經實際使用來看,蒐集的免費代理質量還是差一些,速度會慢很多。

3、IP 會被封:有的網站防護對目錄枚舉或一些路徑非常敏感,會封 IP 地址;

4、下一步嘗試對 http 頭進行語義分析,從海量網站中提取分析 header 的共性,更高效的發現未知指紋。


分享到:


相關文章: