web指纹识别技术研究与优化实现
前言
在web滲透過(guò)程中,Web指紋識(shí)別是信息收集環(huán)節(jié)中一個(gè)比較重要的步驟,通過(guò)一些開源的工具、平臺(tái)或者手工檢測(cè)CMS系統(tǒng)是公開的CMS程序還是二次開發(fā)至關(guān)重要,能準(zhǔn)確的獲取CMS類型、Web服務(wù)組件類型及版本信息可以幫助安全工程師快速有效的去驗(yàn)證已知漏洞。
在指紋識(shí)別的學(xué)習(xí)過(guò)程中,借用了很多開源的工具和指紋庫(kù),如fofa、WhatWeb、w11scan、WebEye、御劍等等,在此感謝各種大佬的無(wú)私奉獻(xiàn)。本文并無(wú)技術(shù)上的創(chuàng)新和突破,只是把一些指紋庫(kù)重新進(jìn)行了整合和梳理并進(jìn)行了開源
常見指紋檢測(cè)的對(duì)象
1、CMS信息:比如大漢CMS、織夢(mèng)、帝國(guó)CMS、phpcms、ecshop等;
2、前端技術(shù):比如HTML5、jquery、bootstrap、pure、ace等;
3、Web服務(wù)器:比如Apache、lighttpd, Nginx, IIS等;
4、應(yīng)用服務(wù)器:比如Tomcat、Jboss、weblogic、websphere等;
5、開發(fā)語(yǔ)言:比如PHP、Java、Ruby、Python、C#等;
6、操作系統(tǒng)信息:比如linux、win2k8、win7、kali、centos等;
7、CDN信息:是否使用CDN,如cloudflare、360cdn、365cyd、yunjiasu等;
8、WAF信息:是否使用waf,如Topsec、Jiasule、Yundun等;
9、IP及域名信息:IP和域名注冊(cè)信息、服務(wù)商信息等;
10、端口信息:有些軟件或平臺(tái)還會(huì)探測(cè)服務(wù)器開放的常見端口。
常見的指紋識(shí)別方式
1、特定文件的MD5
一些網(wǎng)站的特定圖片文件、js文件、CSS等靜態(tài)文件,如favicon.ico、css、logo.ico、js等文件一般不會(huì)修改,通過(guò)爬蟲對(duì)這些文件進(jìn)行抓取并比對(duì)md5值,如果和規(guī)則庫(kù)中的Md5一致則說(shuō)明是同一CMS。這種方式速度比較快,誤報(bào)率相對(duì)低一些,但也不排除有些二次開發(fā)的CMS會(huì)修改這些文件。
2、正常頁(yè)面或錯(cuò)誤網(wǎng)頁(yè)中包含的關(guān)鍵字
先訪問(wèn)首頁(yè)或特定頁(yè)面如robots.txt等,通過(guò)正則的方式去匹配某些關(guān)鍵字,如Powered by Discuz、dedecms等。
或者可以構(gòu)造錯(cuò)誤頁(yè)面,根據(jù)報(bào)錯(cuò)信息來(lái)判斷使用的CMS或者中間件信息,比較常見的如tomcat的報(bào)錯(cuò)頁(yè)面。
3、請(qǐng)求頭信息的關(guān)鍵字匹配
根據(jù)網(wǎng)站response返回頭信息進(jìn)行關(guān)鍵字匹配,whatweb和Wappalyzer就是通過(guò)banner信息來(lái)快速識(shí)別指紋,之前fofa的web指紋庫(kù)很多都是使用的這種方法,效率非常高,基本請(qǐng)求一次就可以,但搜集這些規(guī)則可能會(huì)耗時(shí)很長(zhǎng)。而且這些banner信息有些很容易被改掉。
根據(jù)response header一般有以下幾種識(shí)別方式:
(1)查看http響應(yīng)報(bào)頭的X-Powered-By字段來(lái)識(shí)別;
(2)根據(jù)Cookies來(lái)進(jìn)行判斷,比如一些waf會(huì)在返回頭中包含一些信息,如360wzws、Safedog、yunsuo等;
(3)根據(jù)header中的Server信息來(lái)判斷,如DVRDVS-Webs、yunjiasu-nginx、Mod_Security、nginx-wallarm等;
(4)根據(jù)WWW-Authenticate進(jìn)行判斷,一些路由交換設(shè)備可能存在這個(gè)字段,如NETCORE、huawei、h3c等設(shè)備。
4、部分URL中包含的關(guān)鍵字,比如wp-includes、dede等URL關(guān)鍵特征
通過(guò)規(guī)則庫(kù)去探測(cè)是否有相應(yīng)目錄,或者根據(jù)爬蟲結(jié)果對(duì)鏈接url進(jìn)行分析,或者對(duì)robots.txt文件中目錄進(jìn)行檢測(cè)等等方式,通過(guò)url地址來(lái)判別是否使用了某CMS,比如wordpress默認(rèn)存在wp-includes和wp-admin目錄,織夢(mèng)默認(rèn)管理后臺(tái)為dede目錄,solr平臺(tái)可能使用/solr目錄,weblogic可能使用wls-wsat目錄等。
5、開發(fā)語(yǔ)言的識(shí)別
web開發(fā)語(yǔ)言一般常見的有PHP、jsp、aspx、asp等,常見的識(shí)別方式有:
(1)通過(guò)爬蟲獲取動(dòng)態(tài)鏈接進(jìn)行直接判斷是比較簡(jiǎn)便的方法。
asp判別規(guī)則如下<a[^>]*?href=('|")[^http][^>]*?\.asp(\?|\#|\1),其他語(yǔ)言可替換相應(yīng)asp即可。
(2)通過(guò)X-Powered-By進(jìn)行識(shí)別
比較常見的有X-Powered-By: ASP.NET或者X-Powered-By: PHP/7.1.8
(3)通過(guò)Set-Cookie進(jìn)行識(shí)別
這種方法比較常見也很快捷,比如Set-Cookie中包含PHPSSIONID說(shuō)明是php、包含JSESSIONID說(shuō)明是java、包含ASP.NET_SessionId說(shuō)明是aspx等。
指紋識(shí)別工具
在研究指紋識(shí)別技術(shù)的時(shí)候,不可避免的分析了大量指紋識(shí)別工具,在此將自己用過(guò)的幾個(gè)感覺不錯(cuò)的工具和平臺(tái)介紹一下。
國(guó)外指紋識(shí)別工具
WhatWeb(推薦指數(shù)★★★★★)
下載地址:https://github.com/urbanadventurer/WhatWeb
Whatweb 是一個(gè)開源的網(wǎng)站指紋識(shí)別軟件,擁有超過(guò)1700+個(gè)插件,它能識(shí)別的指紋包括 cms 類型、博客平臺(tái)、網(wǎng)站流量分析軟件、javascript 庫(kù)、網(wǎng)站服務(wù)器,還可以識(shí)別版本號(hào)、郵箱地址、賬戶 id、web 框架模塊等。
Whatweb 是基于 ruby 語(yǔ)言開發(fā),因此可以安裝在具備 ruby 環(huán)境的系統(tǒng)中,目前支持 Windows/Mac OSX/Linux。在debian/ubuntu系統(tǒng)下可直接`apt-get install whatweb`,kali已自帶。使用非常簡(jiǎn)單whatweb?http://www.tidesec.net?即可,也可以加參數(shù)-v顯示更詳細(xì)的信息。
Wapplyzer(推薦指數(shù)★★★★)
下載地址:https://github.com/AliasIO/Wappalyzer
Wappalyzer 是一個(gè)實(shí)用的跨平臺(tái)網(wǎng)站分析工具,用于幫助開發(fā)者、研究者和設(shè)計(jì)者檢測(cè)網(wǎng)頁(yè)使用的是什么技術(shù),以更好地衡量自己的項(xiàng)目中該使用什么技術(shù)。Wappalyzer 的功能和 BuiltWith 類似,可檢測(cè)內(nèi)容管理系統(tǒng)(CMS),電子商務(wù)平臺(tái)、Web服務(wù)器、JavaScript框架和已安裝的分析工具等。
Wappalyzer可直接在chrome或火狐的應(yīng)用商城直接搜索安裝。Wappalyzer目前可識(shí)別65個(gè)大類的1216個(gè)應(yīng)用,查看可檢測(cè)的應(yīng)用程序列表:https://wappalyzer.com/applications
Whatruns(推薦指數(shù)★★★★)
Whatruns是為chrome開發(fā)的一款web指紋識(shí)別程序,還可以顯示托管的CDN、wordpress插件、wordpress字體等,擁有豐富的插件支持。
跟Wappalyzer安裝類似,Whatruns可直接在chrome應(yīng)用商城直接搜索安裝。
安裝完成后,通過(guò)插件圖標(biāo)來(lái)獲取服務(wù)的詳細(xì)運(yùn)行信息,效果如下。有時(shí)候信息會(huì)比Wapplyzer還詳細(xì)一些,但有時(shí)候獲取速度稍慢。
Plecost(推薦指數(shù)★★★)
下載地址:https://github.com/iniqua/plecost
Plecost是Wordpress博客引擎的漏洞指紋識(shí)別和漏洞查找器,能識(shí)別Wordpress版本并能查找到cve,不過(guò)訪問(wèn)不了google的話可能有些功能就受限了。Plecost基于python架構(gòu),利用了Beautiful Soup來(lái)解析html、xml文件識(shí)別網(wǎng)站使用的插件及版本。
使用也比較方便plecost ?-i /usr/share/plecost/wp_plugin_list.txt ?http://www.freebuf.com
BlindElephant(推薦指數(shù)★★)
下載地址:https://github.com/lokifer/BlindElephant
BlindElephant是一款Web應(yīng)用程序指紋識(shí)別工具。該工具可以讀取目標(biāo)網(wǎng)站的特定靜態(tài)文件,計(jì)算其對(duì)應(yīng)的哈希值,然后和預(yù)先計(jì)算出的哈希值做對(duì)比,從而判斷目標(biāo)網(wǎng)站的類型和版本號(hào)。目前,該工具支持15種常見的Web應(yīng)用程序的幾百個(gè)版本。同時(shí),它還提供WordPress和Joomla的各種插件。該工具還允許用戶自己擴(kuò)展,添加更多的版本支持。
不過(guò)該軟件最新更新是在2013年,插件庫(kù)應(yīng)該算比較舊的了。
下載及安裝可參考https://github.com/lokifer/BlindElephant,kali中已經(jīng)內(nèi)置。
使用命令:BlindElephant.py?http://www.freebuf.com?wordpress
國(guó)內(nèi)指紋識(shí)別工具
御劍web指紋識(shí)別程序
下載地址:https://www.webshell.cc/4697.html
御劍web指紋識(shí)別程序是御劍大神開發(fā)的一款CMS指紋識(shí)別小工具,該程序由.NET 2.0框架開發(fā),配置靈活、支持自定義關(guān)鍵字和正則匹配兩種模式、使用起來(lái)簡(jiǎn)潔、體驗(yàn)良好。在指紋命中方面表現(xiàn)不錯(cuò)、識(shí)別速度很快、但目前比較明顯的缺陷是指紋的配置庫(kù)偏少。
windows下圖形界面,比較親民,掃描速度略慢,指紋庫(kù)略少,可手工更新。
Test404輕量WEB指紋識(shí)別
下載地址:https://www.test404.com/post-1618.html
Test404輕量WEB指紋識(shí)別程序是一款CMS指紋識(shí)別小工具,配置靈活、支持自行添加字典、使用起來(lái)簡(jiǎn)潔、體驗(yàn)良好。在指紋命中方面表現(xiàn)不錯(cuò)、識(shí)別速度很快。可手動(dòng)更新指紋識(shí)別庫(kù),而且該軟件在2019.04月剛剛更新了一版。
w11scan分布式WEB指紋識(shí)別平臺(tái)
w11scan是一款分布式的WEB指紋識(shí)別系統(tǒng)(包括CMS識(shí)別、js框架、組件容器、代碼語(yǔ)言、WAF等等),管理員可以在WEB端新增/修改指紋,建立批量的掃描任務(wù),并且支持多種搜索語(yǔ)法。
安裝和下載可參考:https://github.com/w-digital-scanner/w11scan
手工安裝稍微復(fù)雜,不過(guò)作者提供了docker部署,方便很多,使用了Mongodb,內(nèi)置了1800多條常見的指紋,可以識(shí)別多達(dá)538種常見CMS,當(dāng)然也可以手工添加指紋。
Dayu指紋識(shí)別工具
下載地址:https://github.com/Ms0x0/Dayu
“大禹”為一款c/s結(jié)構(gòu)jar文件工具,只需本地安裝java環(huán)境,加參數(shù)-u即可,具體設(shè)置參數(shù)可參考github介紹。
WebEye
下載地址:https://github.com/zerokeeper/WebEye/
WebEye可快速簡(jiǎn)單地識(shí)別WEB服務(wù)器類型、CMS類型、WAF類型、WHOIS信息、以及語(yǔ)言框架,使用異步實(shí)現(xiàn)指紋的快速識(shí)別。
識(shí)別速度比較快,不過(guò)指紋庫(kù)不是很多,指紋庫(kù)不是基于md5之類的,而是類似于fofa通過(guò)http頭信息、關(guān)鍵字等進(jìn)行快速識(shí)別。
作者對(duì)指紋進(jìn)行了分類,如攝像頭、waf、cdn、網(wǎng)絡(luò)設(shè)備等,很多指紋都是精心搜集的。
WTF_Scan
下載地址:https://github.com/dyboy2017/WTF_Scan
WTF團(tuán)隊(duì)出品的指紋識(shí)別平臺(tái),包括的功能也相對(duì)比較多,除了指紋識(shí)別外,還有DNS解析、子域名、CDN、端口掃描、敏感目錄等。
不過(guò)就單獨(dú)說(shuō)指紋規(guī)則來(lái)說(shuō),不算很多,可以自己添加完善,在WTF_Scan/wtf/app/api/cms/cms.txt文件中進(jìn)行指紋修改。
Webfinger
基于fofa的規(guī)則庫(kù)進(jìn)行快速檢索,大約2000+條指紋數(shù)據(jù),位于lib/web.db可自行添加修改。
下載地址:https://github.com/se55i0n/Webfinger
類似的還有個(gè)CMSCANhttps://github.com/cuijianxiong/cmscan/
FingerPrint
好像是百度的一個(gè)MM用perl寫的一款工具,調(diào)用Wappalyzer模塊進(jìn)行指紋識(shí)別。
下載地址:https://github.com/tanjiti/FingerPrint
在線指紋識(shí)別
云悉指紋識(shí)別
http://www.yunsee.cn/
指紋庫(kù)很強(qiáng)大,速度也很快,我們前端還仿了下云悉的界面,免費(fèi)服務(wù),好像還能提供api接口,學(xué)習(xí)的榜樣!
如果指紋能開源就好了,哈哈~~
bugscaner指紋識(shí)別
http://whatweb.bugscaner.com/look/
目前好像指紋比較少,很多都識(shí)別不出來(lái)了。
whatweb.net
https://whatweb.net/
之前功能還不錯(cuò),現(xiàn)在好像只能查看到header信息了。
TideFinger
上面介紹了那么多超級(jí)工具,都不好意思寫自己做的小破爛東西了…大佬們可以關(guān)掉本頁(yè)面了…
通過(guò)對(duì)各種識(shí)別對(duì)象、識(shí)別方法、識(shí)別工具的分析,發(fā)現(xiàn)大家的指紋庫(kù)各式各樣,識(shí)別方式也是各有千秋,傳統(tǒng)的md5、url路徑的方式居多,識(shí)別header信息的也是不少,但沒(méi)有一個(gè)能集眾家之長(zhǎng)的小工具。
于是我們就做了一個(gè)小工具TideFinger
https://github.com/TideSec/TideFinger指紋庫(kù)整理
我們搜集了上面所有的指紋軟件,從中提取了指紋庫(kù),進(jìn)行了統(tǒng)一的格式化處理并進(jìn)行去重,最終得到了一個(gè)大約2078條的傳統(tǒng)指紋庫(kù)。本來(lái)想把fofa的庫(kù)也合并進(jìn)來(lái),發(fā)現(xiàn)格式差異有些大,便保持了fofa指紋庫(kù),并把WebEye的部分指紋和fofa指紋進(jìn)行了合并。這樣就保留了兩個(gè)指紋庫(kù),其中cms指紋庫(kù)為傳統(tǒng)的md5、url庫(kù),大約2078條指紋,可通過(guò)關(guān)鍵字、md5、正則進(jìn)行匹配,fofa庫(kù)為2119指紋,主要對(duì)Header、url信息進(jìn)行匹配。
指紋庫(kù)優(yōu)化
在對(duì)指紋庫(kù)整理去重后,對(duì)每個(gè)指紋進(jìn)行了命中率的標(biāo)識(shí),當(dāng)匹配到某個(gè)指紋時(shí)該指紋命中率會(huì)加1,而在使用指紋時(shí)會(huì)從優(yōu)先使用命中率高的指紋。
然后我們從互聯(lián)網(wǎng)中爬取了10W個(gè)域名進(jìn)行了命中率測(cè)試,然后對(duì)一些誤報(bào)率比較高的指紋進(jìn)行了重新優(yōu)化,得到了一份相對(duì)更高效的指紋庫(kù)。
未知指紋發(fā)現(xiàn)
目前新指紋的識(shí)別基本還是靠人工發(fā)現(xiàn)然后分析規(guī)則再進(jìn)行添加,所以各平臺(tái)都有提交指紋的功能,但是我們沒(méi)有這種資源,只能另想辦法。
于是想到了一個(gè)比較笨的方法:從網(wǎng)站中爬取一些靜態(tài)文件,如png、ico、jpg、css、js等,提取url地址、文件名、計(jì)算md5寫入數(shù)據(jù)庫(kù),這樣再爬下一個(gè)網(wǎng)站,一旦發(fā)現(xiàn)有相同的md5,就把新的url也加入到那條記錄中,并把hint值加1,這樣爬取10W個(gè)站點(diǎn)后,就能得到一個(gè)比較客觀的不同網(wǎng)站使用相同md5文件的數(shù)據(jù)了。
獲取鏈接代碼部分
excludeext = ['.png', '.ico', '.gif','.svg', '.jpeg','js','css','xml','txt']def getPageLinks(url):try:headers = requests_headers()content = requests.get(url, timeout=5, headers=headers, verify=False).text.encode('utf-8')links = []tags = ['a', 'A', 'link', 'script', 'area', 'iframe', 'form'] # imgtos = ['href', 'src', 'action']if url[-1:] == '/':url = url[:-1]try:for tag in tags:for to in tos:link1 = re.findall(r'<%s.*?%s="(.*?)"' % (tag, to), str(content))link2 = re.findall(r'<%s.*?%s=\'(.*?)\'' % (tag, to), str(content))for i in link1:links.append(i)for i in link2:if i not in links:links.append(i)except Exception, e:print eprint '[!] Get link error'passreturn linksexcept:return []有興趣的可以查看具體代碼https://github.com/TideSec/TideFinger/blob/master/count_file_md5.py文件。
爬取的結(jié)果如下:
?
當(dāng)然了,里面肯定很多都屬于誤報(bào),比如上圖中第一個(gè)其實(shí)是個(gè)500錯(cuò)誤頁(yè)面,所以出現(xiàn)的比較多,第二個(gè)是政府網(wǎng)站最下邊那個(gè)常見的“糾錯(cuò)”的js,所以用的也比較多…
經(jīng)過(guò)一些分析整理也發(fā)現(xiàn)了一些小眾的CMS和建站系統(tǒng)的指紋,比如三一網(wǎng)絡(luò)建站系統(tǒng)的newsxx.php,比如大漢JCM的jhelper_tool_style.css等等,后續(xù)會(huì)持續(xù)把這些新的指紋豐富到指紋庫(kù)中去。
指紋識(shí)別腳本
有了指紋庫(kù)之后,識(shí)別腳本就相對(duì)比較簡(jiǎn)單了,已有的一些也都比較成熟了,直接使用了webfinger和whatcms的部分代碼并進(jìn)行了整合優(yōu)化,于是就有了TideFinger。
1、功能邏輯都比較簡(jiǎn)單,先用fofa庫(kù)去匹配,然后獲取一定banner,如果banner中識(shí)別除了cms,則返回結(jié)果,如果未識(shí)別到cms,則會(huì)調(diào)用cms規(guī)則庫(kù)進(jìn)行匹配各規(guī)則。
2、腳本支持代理模式,當(dāng)設(shè)置了-p參數(shù),且proxys_ips.txt文件包含代理地址時(shí),腳本會(huì)隨機(jī)調(diào)用代理地址進(jìn)行掃描,以避免被封ip,不過(guò)這樣的話效率可能會(huì)低一些。畢竟搜集的免費(fèi)代理質(zhì)量還是差一些,速度會(huì)慢很多。有錢人可以找收費(fèi)代理池,然后每個(gè)規(guī)則都用不同代理去請(qǐng)求,這樣肯定不會(huì)被封!
代理地址的搜集可以使用我修改的另一個(gè)代理池https://github.com/TideSec/Proxy_Pool,提供了自動(dòng)化的代理ip抓取+評(píng)估+存儲(chǔ)+展示+接口調(diào)用。
3、經(jīng)測(cè)試,一般網(wǎng)站把所有指紋跑一遍大約需要30秒時(shí)間,個(gè)別的網(wǎng)站響應(yīng)比較慢的可能耗時(shí)更長(zhǎng)一些,可以通過(guò)設(shè)置網(wǎng)站超時(shí)時(shí)間進(jìn)行控制。
安裝python2依賴庫(kù)
pip install lxml pip install requests pip install bs4說(shuō)明:sqlite3庫(kù)在Python 2.5.x 以上版本默認(rèn)自帶了該模塊,如提示sqlite3出錯(cuò)請(qǐng)自行排查。執(zhí)行腳本
$ python TideFinger.pyUsage: python TideFinger.py -u http://www.123.com [-p 1] [-m 50] [-t 5]-u: 待檢測(cè)目標(biāo)URL地址-p: 指定該選項(xiàng)為1后,說(shuō)明啟用代理檢測(cè),請(qǐng)確保代理文件名為proxys_ips.txt,每行一條代理,格式如: 124.225.223.101:80-m: 指紋匹配的線程數(shù),不指定時(shí)默認(rèn)為50-t: 網(wǎng)站響應(yīng)超時(shí)時(shí)間,默認(rèn)為5秒指紋識(shí)別界面如下:
?
?
總結(jié)
以上是生活随笔為你收集整理的web指纹识别技术研究与优化实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 鼠标按下并移动事件的解决方案
- 下一篇: 235款鼠标样式免费下载