日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

web指纹识别技术

發(fā)布時間:2023/12/19 综合教程 30 生活家
生活随笔 收集整理的這篇文章主要介紹了 web指纹识别技术 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目前網(wǎng)絡(luò)上開源的web指紋識別程序很多,如Wapplyzer,BlindElephant,plecost,w3af,whatweb, wpscan, joomscan等等,基本都是國外的,使用的時候因各方面因素會有一些限制,在某些特定環(huán)境下需要自己定制指紋識別工具,本文會淺析這些指紋識別程序的 原理以及如何編寫一個web應(yīng)用指紋識別程序,完全沒有技術(shù)含量,有不妥的地方還望各種SM。

0×01:識別的幾種方式

目前常見的web應(yīng)用指紋識別主要有以下幾種方式,澤總已經(jīng)總結(jié)的很明確了。

1:網(wǎng)頁中發(fā)現(xiàn)關(guān)鍵字

2:特定文件的MD5(主要是靜態(tài)文件、不一定要是MD5)

3:指定URL的關(guān)鍵字

4:指定URL的TAG模式

以上4種模式結(jié)合起來識別的話正確率一般在95%以上,除非個別BT的站點修改的體無完膚,如meta、文件路徑、css等都刪除了或故意修改成其他的webapp等,那我只能說你屌爆了。

0×02:識別方式詳解

一 般應(yīng)用程序在html、js、css等文件中多多少少會包含一些特征碼,這跟ips、waf等產(chǎn)品的特性有點類似,有特征碼匹配模式。比如 wordpress如果沒有特細隱藏的話,在robots.txt中會包含wp-admin之類,首頁index.php中會包含 generator=wordpress 3.xx,后面為版本號,頁面中會包含wp-content路徑等等。
這幾條都是存在網(wǎng)頁中的關(guān)鍵字。 其他的應(yīng)用也有類似的例子,如discuz、dedecms、phpwind等在頁面中都會發(fā)現(xiàn)一些固定的特征碼。特征碼如何查找這里不詳細說明了,下期 會有文章詳細說明如何批量查找特征碼,接下來先介紹一下幾款常見的web應(yīng)用指紋識別程序。

1:Wapplyzer

Wapplyzer是基于正則表達式來識別web應(yīng)用的,如下圖:

仔細看看Wapplyzer的規(guī)則其實很簡單,挑一條看看,如下:

‘WordPress’: { cats: { 1:1, 2: 11 }, meta: { ‘generator’: /WordPress/i }, html: /

2:plecost

plecost是基于python架構(gòu),利用了Beautiful Soup 來解析html、xml文件識別網(wǎng)站使用的插件及版本。要了解plecost的原理,必須先知道Beautiful Soup是干啥用的,簡單科普下Beautiful Soup:

Beautiful Soup 是一個 Python HTML/XML 處理器,設(shè)計用來快速地轉(zhuǎn)換網(wǎng)頁抓取。以下的特性支撐著 Beautiful Soup:

Beautiful Soup 不會選擇 即使你給他一個損壞的標簽。 他產(chǎn)生一個轉(zhuǎn)換DOM樹,盡可能和你原文檔內(nèi)容含義一致 。這種措施通常能夠你搜集數(shù)據(jù)的需求。
Beautiful Soup 提供一些簡單的方法以及類Python語法 來查找、查找、修改一顆轉(zhuǎn)換樹:一個工具集幫助你解析一棵樹并釋出你需要的內(nèi)容。你不需要為每一個應(yīng)用創(chuàng)建自己的解析工具。
Beautiful Soup 自動將送進來的文檔轉(zhuǎn)換為 Unicode 編碼 而且在輸出的時候轉(zhuǎn)換為 UTF-8,。 除非這個文檔沒有指定編碼方式或者Beautiful Soup 沒能自動檢測編碼,你需要手動指定編碼方式,否則你不需要考慮編碼的問題。

再看看plecost代碼,如下圖:

加載并讀取wp_plugin_list.txt,利用urlopen探測目標url是否存在該插件。Plecos編寫插件也非常方便,在wp_plugin_list.txt里面寫上插件名稱、最新版本號和cve即可。

3:whatweb

whatweb 是一個web應(yīng)用程序指紋識別工具,可以鑒別出內(nèi)容管理系統(tǒng)(CMS)、博客平臺、統(tǒng)計分析軟件、javascript庫、服務(wù)器和其他更多Web程序。 whatweb擁有超過900個插件,插件是用來鑒別Web應(yīng)用系統(tǒng)的。因此,開發(fā)者呼吁更多的人幫助開發(fā)插件,不用擔(dān)心作者聲稱插件是十分容易編寫的。
可以說whatweb是目前網(wǎng)絡(luò)上比較強大的一款應(yīng)用識別程序了。它支持正則表達式、md5 hash匹配、url識別、HTML標記模式、蜘蛛爬行等等。

Whatweb插件編寫需要理解一些變量的定義,通過下面的例子就可以看出個大概,如下:

Plugin.define “Plone” do
author “Andrew Horton”
version “0.2″
description “CMS http://plone.org”
examples %w| www.norden.org www.trolltech.com www.plone.net www.smeal.psu.edu|dorks [
'"powered by plone"'
]matches [
{:name=>"meta generator tag",
:regexp=>//},

{:name=>"plone css",
:regexp=>/(@import url|text/css)[^>]*portal_css/.*plone.*css()|”)/}, #”

{:name=>”plone javascript”,
:regexp=>/src=”[^"]*ploneScripts[0-9]+.js”/}, #”

{:text=>’‘}, {:name=>”div tag, visual-portal-wrapper”, :certainty=>75, :text=>’

‘}, ] def passive m=[] #X-Caching-Rule-Id: plone-content-types #X-Cache-Rule: plone-content-types m << {:name=>”X-Caching-Rule-Id: plone-content-types” } if @meta["x-caching-rule-id"] =~ /plone-content-types/i m << {:name=>”X-Cache-Rule: plone-content-types” } if @meta["x-cache-rule"] =~ /plone-content-types/i m end end

:name=>”meta generator tag”,: 包含匹配的文件名稱,這個文件必須是網(wǎng)站中唯一存在的文件。

:regexp=>是包含的要匹配的模式,它是一個正則表達式,可以有以下選項:

:regexp 標準的ruby正則表達式

:text字符

:ghdb google hack數(shù)據(jù)庫,包含以下幾個模式

inurl: 包含的字符串在url

intitle: 包含的字符串在title

filetype: 包含的文件名,如PDF, JPG, RB等

:md5 請求頁面的md5 hash值

:tagpattern html標簽

:version 可以設(shè)置正則表達式或直接字符串匹配

:string可以設(shè)置正則表達式或直接字符串匹配

:filepath可以設(shè)置正則表達式或直接字符串匹配,通常顯示系統(tǒng)錯誤或配置文件等

:account 經(jīng)常用在登陸頁面或用戶列表等

:module 可以設(shè)置正則表達式或直接字符串匹配,如網(wǎng)絡(luò)設(shè)備可能使用了一個ruby模塊等

:model 可以設(shè)置正則表達式或直接字符串匹配

:firmware 可以設(shè)置正則表達式或直接字符串匹配,設(shè)備的固件版本

了解了以上選項我們可以寫出一個簡單的識別discuz的插件,如下:

Plugin.define “discuz” do
author “freebuf@gmail.com” # 2012-05-28
version “0.1″
description “discuz – homepage: http://www.discuz.net/”# Examples #
examples %w|
www.discuz.net|matches [

# Version detection # Powered by text
{ :version=>// },
{ :version=>/

Powered by <strong>.*Discuz!.*<em>([Xxd.]+)s*/ }, # HTML Comment { :text=>’discuz_uid’ }, ] end </em></strong>

運行如下圖:

更多whatweb插件開發(fā)參考:whatweb

0×03:如何編寫web指紋識別程序

現(xiàn)在網(wǎng)絡(luò)上做指紋識別用的最多的是BeautifulSoup,這個插件上面已經(jīng)介紹過了,并且很多web應(yīng)用指紋識別程序使用了該插件,這里就不多介紹了,今天主要介紹下另外一個框架:scrapy

Scrapy,Python開發(fā)的一個快速,高層次的屏幕抓取和web抓取框架,用于抓取web站點并從頁面中提取結(jié)Scrapy Pthyon爬蟲框架 logo[1]構(gòu)化的數(shù)據(jù)。Scrapy用途廣泛,可以用于數(shù)據(jù)挖掘、監(jiān)測和自動化測試。

Scrapy吸引人的地方在于它是一個框架,任何人都可以根據(jù)需求方便的修改。它也提供了多種類型爬蟲的基類,如BaseSpider、sitemap爬蟲等,最新版本又提供了web2.0爬蟲的支持。

Scrapy 使用 Twisted 這個異步網(wǎng)絡(luò)庫來處理網(wǎng)絡(luò)通訊,架構(gòu)清晰,并且包含了各種中間件接口,可以靈活的完成各種需求。整體架構(gòu)如下圖所示:

綠 線是數(shù)據(jù)流向,首先從初始 URL 開始,Scheduler 會將其交給 Downloader 進行下載,下載之后會交給 Spider 進行分析,Spider 分析出來的結(jié)果有兩種:一種是需要進一步抓取的鏈接,例如之前分析的“下一頁”的鏈接,這些東西會被傳回 Scheduler ;另一種是需要保存的數(shù)據(jù),它們則被送到 Item Pipeline 那里,那是對數(shù)據(jù)進行后期處理(詳細分析、過濾、存儲等)的地方。另外,在數(shù)據(jù)流動的通道里還可以安裝各種中間件,進行必要的處理。

如果想做一個好的準確的,非常牛逼的web指紋識別,自然少不了爬蟲機制,而做一個爬蟲主要分兩部分:

一:下載 Web 頁面,有許多問題需要考慮,如何最大程度地利用本地帶寬,如何調(diào)度針對不同站點的 Web 請求以減輕對方服務(wù)器的負擔(dān)等。一個高性能的 Web Crawler 系統(tǒng)里,DNS 查詢也會成為急需優(yōu)化的瓶頸。

二: 一些“行規(guī)”需要遵循(例如 robots.txt)。而獲取了網(wǎng)頁之后的分析過程也是非常復(fù)雜的,Internet 上的東西千奇百怪,各種錯誤百出的 HTML 頁面都有,要想全部分析清楚幾乎是不可能的事;另外,隨著 AJAX 的流行,如何獲取由 Javascript 動態(tài)生成的內(nèi)容成了一大難題;除此之外,Internet 上還有有各種有意或無意出現(xiàn)的Spider Trap ,如果盲目的跟蹤超鏈接的話,就會陷入 Trap 中萬劫不復(fù)了

不過,其實并沒有多少人需要做像 Google 那樣通用的 Crawler ,我們做一個 Crawler 就是為了去爬特定的某個網(wǎng)站來進行指紋識別,所謂知己知彼,百戰(zhàn)不殆,我們可以事先對需要爬的網(wǎng)站結(jié)構(gòu)做一些分析,事情就變得容易多了。通過分析,選出有 價值的鏈接進行跟蹤,然后再進行指紋識別。這樣就可以避免很多不必要的鏈接或者 Spider Trap。

舉個例子,我們添加一個discuz的識別程序,
Discuz我簡單例了2個特征碼如下:
頁面中meta標簽的generator屬性為Discuz
robots.txt 里面也會有版本信息

OK, 以上2個特征碼已經(jīng)能簡單識別該應(yīng)用了,我們利用scrapy來提取數(shù)據(jù)并識別應(yīng)用。scrapy提取數(shù)據(jù)主要用到了XPath,它有提供兩個XPath 選擇器,HtmlXPathSelector和XmlXPathSelector,一個用于HTML,一個用于XML,XPath選擇器有三個方法:

select(xpath): 返回一個相對于當前選中節(jié)點的選擇器列表(一個XPath可能選到多個節(jié)點)
extract(): 返回選擇器(列表)對應(yīng)的節(jié)點的字符串(列表)
re(regex): 返回正則表達式匹配的字符串(分組匹配)列表

了解了以上方法,寫起來就比較簡單了,下面舉個非常簡單的例子:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.utils.url import urljoin_rfc,urllib,reclass XSSSpider(BaseSpider):
name=”freebuf”
allowed_domains=["freebuf.com"]
start_urls=["http://forum.freebuf.com"]def parse(self, response):
hxs = HtmlXPathSelector(response)
c = hxs.select(‘//meta[@name="generator"]/@content’).extract()
urls = urljoin_rfc(response.url,”robots.txt”)
t = urllib.urlopen(urls)
#print a
a = re.findall(“[Dd]iscuz.*”,t.read())
if (a or c):
print “Web application details : Discuz”
else:
print “Web application version not found!”

到主項目目錄運行:scrapy crawl freebuf

以上只是個簡單的例子,當然你也可以多種條件結(jié)合到一起寫成插件的方式調(diào)用,如下:

FreebuF["WordPress"] = {
‘//meta[ () name="generator" and starts-with(@content,"WordPress")]‘,
‘//head/link[ () rel="stylesheet" and @type="text/css" and contains( @href, "/wp-content/")]‘,
‘//div[ () id="content"]/div[ () and starts-with(@id, "post-") and div[ ()] and div[
()] and div[ ()] and div[ ()]]’,
}

0×04:后續(xù)的一些思考

簡 單的web應(yīng)用識別不會涉及到爬蟲機制,但是如果需其他更詳盡的信息以及更準確的識別web應(yīng)用,以及后期擴展其他功能,不可缺少的是爬蟲機制,而爬蟲也 直接影響到程序的執(zhí)行效率、速度是否夠快,識別是否準確等。這里就涉及到大規(guī)模遞歸抓取了,如果使用scrapy來做爬蟲的話,可能要修改scrapy來 處理以下幾個問題:

1:快速的link extractor

python的SGMLParser實在是太慢了,使用 SgmlLinkExtractor會讓爬蟲把大部分的時間都浪費在解析網(wǎng)頁上,最好自己寫一個link extractor,也可以用正則表達式來寫link extractor,速度快,問題是不理解html語義,會把注釋里的鏈接也包含進來。另外基于javascript重定向url也要在這里提取出來。

2:Spider Trap

因為spider trap一般是由動態(tài)網(wǎng)頁實現(xiàn)的,最簡單的方案就是先通過url是否包含”?”來判斷一個網(wǎng)頁是否是動態(tài)網(wǎng)頁,然后取得不包含參數(shù)的url地址,對這個地址進行計數(shù),設(shè)置一個閾值,超過閾值之后不再抓取。

3:增量抓取

一個針對多個網(wǎng)站的爬蟲很難一次性把所有網(wǎng)頁爬取下來,并且網(wǎng)頁也處于不斷更新的狀態(tài)中,爬取是一個動態(tài)的過程,爬蟲支持增量的抓取是很必要的。

4:快速識別
爬蟲抓取數(shù)據(jù)的時候我們可以定位抓取的數(shù)據(jù)為js、css、html等,也可指定特定的文件夾文件名稱,如gif、jpg、 png之類。

總結(jié)

以上是生活随笔為你收集整理的web指纹识别技术的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。