Web框架[*]指紋識別是信息收集過程的重要子任務。若是這樣的框架已經被滲透測試人員測試過,那麼瞭解框架的類型能夠自動提供很大的優點。它不只是未修補版本中的已知漏洞,並且框架和已知文件結構中的特定錯誤配置使得指紋識別過程如此重要。php
幾種不一樣的供應商和Web框架版本被普遍使用。有關它的信息對測試過程有很大幫助,也能夠幫助改變測試過程。這些信息能夠經過仔細分析某些常見位置得出。大多數Web框架在這些位置都有幾個標記,能夠幫助攻擊者發現它們。這基本上是全部自動工具所作的事情,他們從預約義的位置尋找標記,而後將其與已知簽名的數據庫進行比較。爲了更好的準確性,一般使用幾種標記。css
[*]請注意,本文不區分Web應用程序框架(WAF)和內容管理系統(CMS)。這樣作是爲了方便在一章中指紋它們。此外,這兩個類別都被引用爲Web框架。html
定義使用的Web框架的類型,以便更好地理解安全測試方法。python
要定義當前框架,須要查看幾個最多見的位置:nginx
識別Web框架的最基本形式是查看HTTP響應頭中的X-Powered-By字段。許多工具可用於指紋目標。最簡單的是netcat實用程序。laravel
請考慮如下HTTP請求 - 響應:web
$ nc 127.0.0.1 80 HEAD / HTTP / 1.0 HTTP / 1.1 200好的 服務器:nginx / 1.0.14 日期:星期六,2013年9月7日08:19:15 GMT Content-Type:text / html; charset = ISO-8859-1 鏈接:關閉 變化:接受編碼 X-Powered-By:單聲道
從X-Powered-By字段中,咱們瞭解到Web應用程序框架極可能是Mono。然而,儘管這種方法簡單快速,但這種方法在100%的狀況下都不起做用。經過適當的配置能夠輕鬆禁用X-Powered-By標頭。還有一些技術容許網站對HTTP標頭進行模糊處理(請參閱#Remediation一章中的示例)。正則表達式
所以,在同一個示例中,測試人員可能會錯過X-Powered-By標頭或得到以下答案:數據庫
HTTP / 1.1 200好的 服務器:nginx / 1.0.14 日期:星期六,2013年9月7日08:19:15 GMT Content-Type:text / html; charset = ISO-8859-1 鏈接:關閉 變化:接受編碼 X-Powered-By:血,汗和眼淚
有時,有更多的HTTP標頭指向某個Web框架。在如下示例中,根據來自HTTP請求的信息,能夠看到X-Powered-By標頭包含PHP版本。可是,X-Generator標頭指出使用的框架其實是Swiftlet,這有助於滲透測試人員擴展他的攻擊向量。執行指紋識別時,請始終仔細檢查每一個HTTP標頭是否存在此類泄漏。瀏覽器
HTTP / 1.1 200好的 服務器:nginx / 1.4.1 日期:星期六,2013年9月7日09:22:52 GMT 內容類型:text / html 鏈接:保持活力 變化:接受編碼 X-Powered-By:PHP / 5.4.16-1~dotdeb.1 到期日:1981年11月19日星期四08:52:00 GMT 緩存控制:無存儲,無緩存,必須從新驗證,後檢查= 0,預檢查= 0 Pragma:沒有緩存 X-Generator:金絲燕
另外一種相似且以某種方式更可靠的方法來肯定當前的Web框架是特定於框架的cookie。
請考慮如下HTTP請求:
已自動設置 cookie CAKEPHP,它提供有關正在使用的框架的信息。常見cookie名稱列表在#Cookies_2章節中介紹。限制是相同的 - 能夠更改cookie的名稱。例如,對於選定的CakePHP框架,能夠經過如下配置完成(摘自core.php):
/ ** * CakePHP會話cookie的名稱。 * *請注意會話名稱的準則:「會話名稱引用 * Cookie和網址中的會話ID。它應該只包含字母數字 *字符。「 * @link http://php.net/session_name * / Configure :: write('Session.cookie','CAKEPHP');
可是,與X-Powered-By標頭的更改相比,這些更改的可能性更小,所以能夠認爲這種方法更可靠。
此技術基於在HTML頁面源代碼中查找某些模式。一般人們能夠找到不少信息,這有助於測試人員識別特定的Web框架。其中一個常見的標記是直接致使框架公開的HTML註釋。更常見的是,能夠找到某些特定於框架的路徑,即指向特定於框架的css和/或js文件夾的連接。最後,特定的腳本變量也可能指向某個框架。
從下面的屏幕截圖中,能夠經過上述標記輕鬆瞭解所使用的框架及其版本。註釋,特定路徑和腳本變量均可以幫助攻擊者快速肯定ZK框架的實例。
更頻繁地,此類信息放在<head> </ head>標記之間,<meta>標記中或頁面末尾。然而,建議檢查整個文檔,由於它可用於其餘目的,例如檢查其餘有用的註釋和隱藏字段。有時,Web開發人員並不關心隱藏有關所用框架的信息。仍然有可能在頁面底部偶然發現這樣的事情:
URL可能包含文件擴展名。文件擴展名還能夠幫助識別Web平臺或技術。
例如,OWASP正在使用PHP
https://www.owasp.org/index.php?title=Fingerprint_Web_Application_Framework_(OTG-INFO-008)&action=edit§ion=4
如下是一些常見的Web擴展和技術
骨架 | Cookie名稱 |
---|---|
Zope的 | zope3 |
CakePHP的 | CakePHP的 |
Kohana的 | kohanasession |
Laravel | laravel_session |
%framework_name% |
供電 |
創建在 |
賽跑 |
骨架 | 關鍵詞 |
---|---|
Adobe ColdFusion | <! - START headerTags.cfm |
Microsoft ASP.NET | __VIEWSTATE |
ZK | <! - ZK |
業務催化劑 | <! - BC_OBNW - > |
Indexhibit | ndxz工做室 |
每一個特定框架的特定文件和文件夾都不一樣。建議在滲透測試期間安裝相應的框架,以便更好地瞭解所呈現的基礎結構以及服務器上可能留下的文件。可是,已經存在幾個好的文件列表,一個很好的例子是可預測文件/文件夾的FuzzDB單詞列表(http://code.google.com/p/fuzzdb/)。
下面列出了通常和衆所周知的工具。還有許多其餘實用程序,以及基於框架的指紋識別工具。
網站:http : //www.morningstarsecurity.com/research/whatweb
目前市場上最好的指紋識別工具之一。包含在默認的Kali Linux版本中。語言:用於指紋識別的Ruby匹配用於:
示例輸出顯示在下面的屏幕截圖中:
網站:https ://community.qualys.com/community/blindelephant
這個偉大的工具基於靜態文件校驗和的版本差別原則,從而提供很是高質量的指紋識別。語言:Python
成功指紋的示例輸出:
pentester $ python BlindElephant.py http:// my_target drupal Loaded /Library/Python/2.7/site-packages/blindelephant/dbs/drupal.pkl包含145個版本,478個差別化路徑和434個版本組。 在http:// my_target上爲drupal版本啓動BlindElephant指紋 點擊http://my_target/CHANGELOG.txt 文件產生不匹配。錯誤:檢索到的文件與已知指紋不匹配。527b085a3717bd691d47713dff74acf4 點擊http://my_target/INSTALL.txt 文件產生不匹配。錯誤:檢索到的文件與已知指紋不匹配。14dfc133e4101be6f0ef5c64566da4a4 點擊http://my_target/misc/drupal.js 基於結果的可能版本:7.12,7.13,7.14 點擊http://my_target/MAINTAINERS.txt 文件產生不匹配。錯誤:檢索到的文件與已知指紋不匹配。36b740941a19912f3fdbfcca7caa08ca 點擊http://my_target/themes/garland/style.css 基於結果的可能版本:7.2,7.3,7.4,7.5,7.6,7.7,7.8,7.9,7.10,7.11,7.12,7.13,7.14 ... 指紋識別致使: 7.14 最好的猜想:7.14
網站:http:
//wappalyzer.com Wapplyzer是一款Firefox Chrome插件。它僅適用於正則表達式匹配,除了要在瀏覽器上加載的頁面以外不須要任何其餘內容。它徹底在瀏覽器級別工做,並以圖標的形式給出結果。雖然有時會出現誤報,但在瀏覽頁面後當即使用哪些技術構建目標網站的概念很是方便。
插件的示例輸出顯示在下面的屏幕截圖中。
白皮書
通常建議是使用上述幾種工具並檢查日誌,以更好地瞭解攻擊者確切地幫助披露Web框架的內容。經過在更改隱藏框架軌道後執行屢次掃描,能夠實現更高級別的安全性並確保自動掃描沒法檢測到框架。如下是框架標記位置和一些其餘有趣方法的一些具體建議。
檢查配置並禁用或混淆全部披露技術使用信息的HTTP標頭。這是一篇關於使用Netscaler進行HTTP-header混淆的有趣文章:http: //grahamhosking.blogspot.ru/2013/07/obfuscating-http-header-using-netscaler.html
建議經過更改相應的配置文件來更改cookie名稱。
手動檢查HTML代碼的內容並刪除明確指向框架的全部內容。
通常準則:
通常準則:
RewriteCond%{REQUEST_URI} /wp-login\.php$ [OR] RewriteCond%{REQUEST_URI} / wp-admin / $ RewriteRule $ / http:// your_website [R = 404,L]
可是,這些並非限制訪問的惟一方法。爲了使該過程自動化,存在某些特定於框架的插件。WordPress的一個例子是StealthLogin(http://wordpress.org/plugins/stealth-login-page)。
通常準則:
一個有趣而有效的方法,涉及從其餘框架添加虛假文件和文件夾,以欺騙掃描儀和混淆攻擊者。但要當心不要覆蓋現有的文件和文件夾,並打破當前的框架!