1. 程式人生 > >手工檢測Web應用指紋(分析網站技巧)

手工檢測Web應用指紋(分析網站技巧)

http://www.freebuf.com/news/137497.html?utm_source=tuicool&utm_medium=referral

0×01 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。


0×02 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。

1fb.png

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

2drupal.png

幾個例子

<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

詳細的使用方法請參考

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

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

2.2.2.6 刻意構造錯誤

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

Tomcat的預設404頁面

3tomcat404.png

Ruby on Rails的預設404頁面

4 rails404.png

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

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

5django-error.png

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

6tomcat500.png

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

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

0×03 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錯誤頁面等。

7oracle-error.png

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-0×03-5.Socket。

3.4.3 Nmap OS指紋

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

3.4.4 SSL證書

SSL證書資訊。

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

8whatweb.png

0×05 參考資料