Web指紋識別的介紹與編寫
一、 前言
Web指紋是Web服務(wù)組件在開發(fā)時留下的對其類型及版本進(jìn)行標(biāo)識的特殊信息,包括Web服務(wù)器指紋、Web運(yùn)用指紋以及前端框架指紋等。在Web安全測試過程中,收集Web指紋信息也是一個比較重要的步驟;在安全運(yùn)營過程中,通過指紋識別識別資產(chǎn)的Web信息,這樣能更加了解整個資產(chǎn)存在哪些方面的威脅,然后對癥檢測修補(bǔ)。
網(wǎng)絡(luò)上開源的Web指紋識別程序很多,如Wappalyzer,Whatweb, wpscan, joomscan等等,在線指紋平臺有云悉,還有我們本文重點介紹的數(shù)字觀星指紋平臺
(https://fp.shuziguanxing.com/#/)等。接下來會介紹如何編寫以及編譯指紋并提交到平臺上。
二、 初見
實踐是認(rèn)識事物最快的途徑,這里先使用常見的指紋識別工具做簡單的指紋識別示范。
1. Whatweb
Whatweb是一個基于Ruby語言的開源網(wǎng)站指紋識別軟件,正如它的名字一樣,Whatweb能夠識別各種關(guān)于網(wǎng)站的詳細(xì)信息包括:CMS類型、博客平臺、中間件、Web框架模塊、網(wǎng)站服務(wù)器、腳本類型、JavaScript庫、IP、Cookie等。
在kali下sudo apt install whatweb :
對網(wǎng)站進(jìn)行指紋識別:
2. Wappalyzer
Wappalyzer是基于正則表達(dá)式來識別Web應(yīng)用,它的功能是識別單個url的指紋,其原理就是給指定URI發(fā)送HTTP請求,獲取響應(yīng)頭與響應(yīng)體并按指紋規(guī)則進(jìn)行匹配。它也是一款瀏覽器插件,能識別出網(wǎng)站采用了那種Web技術(shù),能夠檢測出CMS和電子商務(wù)系統(tǒng)、留言板、Javascript框架,主機(jī)面板,分析統(tǒng)計工具和其它的一些Web系統(tǒng)。這里主要介紹基于node.js的Wappalyer的安裝與使用。
(1)node.js環(huán)境的安裝,官網(wǎng)下載地址https://nodejs.org/en/
(2)通過Node.js安裝Wappalyzer
記住這個路徑 C:\Users\xx\AppData\Roaming\npm\node_modules\wappalyzer之后講解調(diào)試指紋有用
(3)使用wappalyzer指紋識別
三、 探究
這里主要探討如何編寫基于Wappalyzer的指紋(參考https://fp.shuziguanxing.com/#/fingerplatinfo)
1. 指紋識別的幾種方式
- 網(wǎng)頁中發(fā)現(xiàn)關(guān)鍵字
- 特定文件的MD5(主要是靜態(tài)文件、不一定要是MD5)
- 指定URL的關(guān)鍵字
- 指定URL的TAG模式
2. 指紋識別分類
基于Wappalyzer的指紋識別分類
3. 指紋規(guī)則
4. 指紋識別例子講解
"Struts": {
"cats": [
"18"
],
"html":"(href|action|src).*?=.*?(action|do)\\;confidence:50",
"url": "/.*\\.do$|/.*\\.action$\\;confidence:40",
"html": "Struts Problem Report",
"website": "http://struts.apache.org/",
"_fingerprint_note":"Apache Struts是一個用于開發(fā)Java EE網(wǎng)絡(luò)應(yīng)用程序的開放源代碼網(wǎng)頁應(yīng)用程序架構(gòu)。",
"_fingerprint_test_url":"https://www.shuziguanxing.com/"
}
描述:struts組件,分類18(Web框架),匹配html中是否存在action,do后綴,定義可信值50,匹配url中是否有do和action后綴,定義可信值40,匹配html中是否存在“Struts Problem Report”字符串,默認(rèn)不定義可信值則為100。備注:總體可信值如果超過100,也只會返回100。
5. 簡單分析Wappalyzer的執(zhí)行過程
Wappalyze執(zhí)行文件在C:\Users\xx\AppData\Roaming\npm\下。
Wappalyzer的包目錄在C:\Users\xx\AppData\Roaming\npm\node_modules\wappalyzer。
這里我們重點看apps.json文件,apps.json文件是個什么東西呢?apps.json記錄的是整個的指紋規(guī)則,之后我們自己編寫的指紋就是要放進(jìn)這里調(diào)試。
看下里面是一個怎么樣的構(gòu)造:
{
"$schema":"../schema.json",
"apps":{
"1C-Bitrix":{
"cats":[
1
],
"headers":{
"Set-Cookie":"BITRIX_",
"X-Powered-CMS":"Bitrix Site Manager"
},
"html":"(?:<link[^>]+components/bitrix|(?:src|href)=\"/bitrix/(?:js|templates))",
"icon":"1C-Bitrix.png",
"implies":"PHP",
"script":"1c-bitrix",
"website":"http://www.1c-bitrix.ru"
},
},
"categories":{
"1":{
"name":"CMS",
"priority":1
},
......
}
}
Json文件里面有兩部分apps與categories,我們可以發(fā)現(xiàn)apps里面的信息跟上面指紋例子特別像,其實我們之后寫的指紋就是放在這里面進(jìn)行識別網(wǎng)站的,categories是指紋的類型,這項可以不用管,只看apps。
6. 調(diào)試編寫好的指紋
Wappalyzer在執(zhí)行過程中會調(diào)用apps.json文件內(nèi)容進(jìn)行指紋匹配。所以我們編寫好的指紋放進(jìn)里面進(jìn)行調(diào)試。
如果你希望只顯示你要調(diào)試的指紋的話,你可以把a(bǔ)pps.json文件備份為apps.json.bak,然后把a(bǔ)pps.json中的apps部分里面的內(nèi)容刪除,只放入自己編寫的指紋。
以織夢cms為例子,執(zhí)行全部的指紋:
如果僅僅是測試cms,不想看到其他信息,你可以刪除其他指紋,留下我們寫好要調(diào)試的指紋,這樣看起來就很清晰了。
四、 實戰(zhàn)
1. 查找目標(biāo)
上sofa:??https://fofa.so??查找“禪道”
??
2. 判斷觀星指紋平臺是否存在該指紋
復(fù)制sofa查找到的目標(biāo)到觀星指紋平臺,沒有該Web應(yīng)用指紋信息,那我們開始編寫這個Web應(yīng)用的指紋。
3. 觀察該Web應(yīng)用
(1)cookie:zentaosid
(2)html
(3)script
4. 依據(jù)以上特征編寫指紋
下面的是依據(jù)上面分析來寫的,圈出來的信任值只是方便編譯時,查看命中哪條記錄,等最后調(diào)試完成后再按實際情況給信任值。
5. 提交到指紋平臺
??https://fp.shuziguanxing.com/#/batchAdd??
五、總結(jié)
我們數(shù)字觀星指紋收錄平臺中的指紋規(guī)則是基于Wappalyzer的,編寫的指紋能夠通過Wappalyzer調(diào)試,寫的指紋基本都是正確的。
指紋收錄平臺收集指紋信息,通過的指紋會依據(jù)質(zhì)量獲得相應(yīng)的星豆,具體信息請看看官方說明:
??https://fp.shuziguanxing.com/#/fingerplatinfo??,里面還介紹了接收指紋的范圍、指紋提交流程、指紋審核流程以及指紋評價標(biāo)準(zhǔn)等。
最后,感謝超哥指導(dǎo),筆者一介菜鳥,有誤之處歡迎指出。