1. 程式人生 > 其它 >手工檢測Web應用指紋的一些技巧

手工檢測Web應用指紋的一些技巧

0x01 Web 應用技術概覽

1.1 架構

大多數 web 應用可以粗略劃分為三個元件(component)。

1、客戶端, 大多數情況下是瀏覽器。 2、服務端, Web 伺服器接收客戶端的HTTP請求並進行響應。另外,有時候 Web伺服器只轉發請求到應用伺服器(Application Server),由應用伺服器來處理請求。 3、後端儲存, 後端儲存一般是DBMS,用於查詢和儲存資料。

所有元件都有不同行為,這些不同行為將影響漏洞的存在性和可利用性。所有元件(無論是客戶端還是服務端)都有可能產生漏洞或者其他安全問題。

1.2 客戶端技術

主流的客戶端技術每天都在被大量網際網路使用者使用,包括 HTML, JavaScript, Flash … 他們常用的瀏覽器則是 Chrome, Firefox, Opera, IE/Edge, Safari 等。另外,包括Android應用的 webview 以及部分PC客戶端應用(比如QQ或者某些遊戲登陸器),也會引入一部分 web 客戶端技術。

1.3 服務端技術

在服務端,儘管使用任何技術的任何Web應用都有或多或少的潛在漏洞,但對於某些特定技術(如PHP, Struts2等)的網站,則相對更容易產生漏洞。簡單劃分的話服務端技術大概有以下幾類。

1、Web伺服器(Web Server), 包括 Apache, lighttpd, Nginx, IIS. 2、應用伺服器(Application Server), 包括 Tomcat, Jboss, Oracle Application server . 3、程式語言, 包括 PHP, Java, Ruby, Python, C#. 對於後三種語言,一些常見的框架包括 Ruby-on-Rails, .Net MVC, Django 等。

1.4 後端儲存技術

對於大多數中小型網站,資料庫和Web伺服器是在同一臺主機的。常見的後端儲存技術包括:

1、關係型資料庫, 包括 MySQL, Oracle, DB2, SQL Server, PostgreSQL, SQLite 等。 2、NoSQL, 包括 MongoDB, CouchDB, Redis 等。 3、目錄訪問, 包括 openLDAP, Active Directory。

0x02 Web 伺服器指紋分析

2.1 Web 伺服器指紋內容

我們想要尋找哪些資訊。

1、Web伺服器名稱,版本 2、Web伺服器後端是否有應用伺服器 3、資料庫(DBMS)是否部署在同一主機(host),資料庫型別 4、是否使用反向代理(reverse proxy) 5、是否使用負載均衡(load balancing) 6、Web應用使用的程式語言

2.2 手工檢測技巧

2.2.1 HTTP分析

使用chrome開發者工具或者burpsuite互動式抓包分析HTTP資料。

1、重點觀察 響應頭(Response Header)的 Server, X-Powered-By, Set-Cookie 欄位。

2、使用畸形 Host欄位的 HTTP請求試探,觀察響應頭。

比如 Struts2 的特徵之一就是會設定特殊的JSESSIONID的cookie欄位。

Set-Cookie: JSESSIONID=C09CBBF************7CF6D25D4F0

又或者以freebuf為例,你可以觀察到兩個有趣的欄位,Server欄位以及WP-Super-Cache。

Server欄位說明 freebuf 的伺服器版本是 Apache 2.2.21

WP-Super-Cache 欄位則表明 freebuf 使用名為 WP Super Cache 的 Wordpress 外掛。

2.2.2 瀏覽網站

2.2.2.1 關注HTML原始碼

重點關注以下幾處

1、上傳與下載功能 2、認證表單與URL(login,logout, reset password) 3、後臺管理頁面(administration section) 4、資料輸入點,例如”留言板,聯絡我們,個人資料,商品評論,搜尋,編輯器”等

觀察這些位置的HTML原始碼(特殊的class名稱)及其註釋(comment)部分,可能暴露有價值資訊。

2.2.2.2 根據網站頁面字尾判斷

通常而言

1、存在.php結尾的檔案說明該web應用是用PHP寫的。 2、存在.jsp或者.do的檔案,說明該web應用是由Java寫的。 3、存在.asp或者.aspx結尾的檔案,說明該web應用可能是由VB或者C#寫的。

需要注意的是(低概率事件),某些腦洞奇特的管理員/開發者/運維可能會將Java編寫的程式用.php的結尾,或者讓某些PHP應用使用.do結尾。

如果網站路徑存在 RESTful URL 的特徵,例如

/objects/ # will give you a list of all the objects;
/objects/new # will give you the page to create a new object;
/objects/12 # will give you the object with the id 12;
/objects/12/edit # will give you the page to modify the object with the id 12;

則很有可能是由 Ruby On Rails 或者 Python 開發的。

2.2.2.3 favicon.ico

可以通過預設 favicon.ico 來判斷CMS,比如 Drupal 的預設icon是一個水滴狀的物體。在HTML原始碼處搜尋關鍵詞icon或者shortcut

幾個例子

<link href="/images/branding/product/ico/googleg_lodp.ico" rel="shortcut icon">
<link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png">
<link rel="shortcut icon" href="//res.wx.qq.com/a/wx_fed/webwx/res/static/img/3wOU-7F.ico" type="image/x-icon">

2.2.2.4 robots.txt

有些cms會有預設robots.txt,所以我們可以通過robots.txt來幫助判斷CMS。下面的是舉了一個Joomla的robots.txt例子。由於robots.txt只是君子協議,所以你懂的,在滲透測試時它完全在說明你應該檢查哪些目錄。

# If the Joomla site is installed within a folder
# eg www.example.com/joomla/ then the robots.txt file
# MUST be moved to the site root
# eg www.example.com/robots.txt
# AND the joomla folder name MUST be prefixed to all of the
# paths.
# eg the Disallow rule for the /administrator/ folder MUST
# be changed to read
# Disallow: /joomla/administrator/
#
# For more information about the robots.txt standard, see:
# http://www.robotstxt.org/orig.html
#
# For syntax checking, see:
# http://tool.motoricerca.info/robots-checker.phtml

User-agent: *
Disallow: /administrator/
Disallow: /bin/
Disallow: /cache/
Disallow: /cli/
Disallow: /components/
Disallow: /includes/
Disallow: /installation/
Disallow: /language/
Disallow: /layouts/
Disallow: /libraries/
Disallow: /logs/
Disallow: /modules/
Disallow: /plugins/
Disallow: /tmp/

2.2.2.5 目錄掃描(directory/pages busting)

可以使用wfuzz進行目錄掃描。

python wfuzz.py -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ

詳細的使用方法請參考

https://github.com/xmendez/wfuzz/wiki/Getting-started

另外也可以參考 OWASP的目錄掃描工具 OpenDoor,開發比較活躍。

https://github.com/stanislav-web/OpenDoorhttps://github.com/stanislav-web/OpenDoor/wiki

無論用什麼具體的目錄掃描工具,最終是為了發現某些404頁面, SQL錯誤頁面或者其他異常頁面,這些頁面暴露的資訊可能可以反映伺服器型別與版本。除此以外,對於多數網站的後臺管理頁面通常都屬於某些常用的路徑(即包含在字典中),因此我們在大多數情況可以通過目錄掃描來獲得。如果已知CMS型別,可以直接參考文件來判斷後臺預設管理頁面的路徑。

2.2.2.6 刻意構造錯誤

錯誤頁面可以給你提供關於伺服器的大量資訊。可以通過構造含有隨機字串的URL,並訪問它來嘗試得到404頁面。

Tomcat的預設404頁面

Ruby on Rails的預設404頁面

還有幾種方法可以構造錯誤。比如在URL中新增特殊字元%00(NULL),%27(Single Quote),%22(Double Quote)。或者在URL中刪除部分引數,刪除部分cookie中的引數(chrome 外掛 edit this cookie)。

不熟練的Django開發者可能會開啟除錯模式

Tomcat 5XX的錯誤時可能丟擲異常會顯示呼叫棧

對於PHP的應用,還有一個很常用的技巧來構造錯誤。比如將 /index.php?name=hacker 替代為 /index.php?name[]=hacker

關鍵是要仔細閱讀這些錯誤資訊。雖然這聽起來有點蠢,但是你肯定會驚訝於會有多少開發者認為兩個錯誤頁面是一樣的,即使是錯誤訊息的內容完全不同。The evil is in the detail.

0x03 Web應用指紋特徵總結

3.1 HTTP響應頭(HTTP response header) 特徵

正則匹配HTTP響應頭中的特殊欄位。

"headers": { "X-AMP-Version": "([\d.]+)\;version:\1", "Set-Cookie": "^AMP=" },

3.2 HTML 特徵

重點關注 body, title 等標籤的內容和屬性。

3.2.1 特殊的文字

比如在 HTML title 標籤中的Powered by EmpireCMS之類。

3.2.2 特殊的class

HTML 中存在特定 class 屬性的某些 div 標籤。

<body class="ke-content">

在上面的程式碼中,ke-content 這個 class 通常是在 kindeditor 中出現的。

3.2.3 meta標籤特徵

舉個例子

<meta name="version" content="neblog-1.0"/>

3.2.4 script標籤特徵

<script src="http://www.freebuf.com/buf/themes/freebuf/js/bootstrap.min.js"></script>

主要用於判斷是否使用jQuery,Bootstrap等

3.3 URL 特徵

3.3.1 URL路徑特徵

比如 wordpress,有一些常見路徑。

readme.html
wp-content/uploads/
wp-admin
...

3.3.2 預設錯誤頁面

通過爬蟲嘗試尋找網站中的錯誤頁面。例如 Apache 預設404,Oracle的預設SQL錯誤頁面等。

3.3.3 robots.txt

某些CMS會有預設的robots.txt。在robots.txt的文字中直接說明CMS名稱和版本。(Discuz, Joomla)

3.3.4 favicon.ico 等特殊檔案匹配

下載 favicon.ico 影象進行md5摘要,對比icon庫是否存在相同md5的icon。計算量更大但檢索效果更好的方法就是做相似影象檢索(基於SIFT,或者其他影象特徵)。

除了 favicon.ico 以外,還有其他logo檔案可以考慮,比如Dedecms的/img/buttom_logo.gif

3.4 主機埠特徵

3.4.1 預設埠特徵

對於後端DBMS的識別,如果主機對外開放DBMS的話,可以通過埠特徵判斷。尤其是在開放預設埠比如3306,1443,27017等。

3.4.2 埠互動特徵

Socket互動過程中的一些特殊字串。具體看參考資料2-0x03-5.Socket。

3.4.3 Nmap OS指紋

通過 Nmap OS指紋可以初步判斷作業系統。

3.4.4 SSL證書

SSL證書資訊。

0x04 其他用於輔助的自動化Web應用指紋分析工具

1.WhatWebhttps://github.com/urbanadventurer/WhatWeb 2.Wappalyzer (推薦作為chrome外掛使用)https://github.com/AliasIO/Wappalyzerhttps://github.com/AliasIO/Wappalyzer/wiki 3.天蠍指紋庫https://github.com/Ms0x0/Dayu 4.Plecosthttps://github.com/iniqua/plecost 5.BlindElephant (年久失修)https://github.com/lokifer/BlindElephant 6.Website Analyzerhttps://github.com/wofeiwo/Website-Analyzer/ 7.cms-explorerhttps://github.com/FlorianHeigl/cms-explorer 8.shodan/fofa/zoomeye/傻蛋等

0x05 參考資料

1.Web For Pentester (Louis Nyffenegger) - fingerprinting章節 2.國產指紋庫平臺 – 天蠍指紋庫 - 破曉團隊 3.淺析國內指紋識別技術 - 北風飄然@金烏網路安全實驗室 4.SQLMap的前世今生(Part2):資料庫指紋識別 - 漁村安全(獵豹) 5.如何使用Wappalyzer API進行Web應用指紋識別 - 碳基體 6.網站技術指紋分析工具(Chrome擴充套件)—Website Analyzer - wofeiwo#80sec.co 7.淺談web指紋識別技術 - kelz 8.Web Analysis, Vulnerability Assessment and Exploitation using Backtrack5 9.御劍web指紋識別程式(新出的一款WIN平臺CMS指紋識別小工具) 10.網站指紋識別工具——WhatWeb v0.4.7釋出