手工檢測Web應用指紋的一些技巧
優(yōu)采云 發(fā)布時(shí)間: 2022-09-05 10:10手工檢測Web應用指紋的一些技巧
* 本文作者:m00n1ight,本文屬FreeBuf原創(chuàng )獎勵計劃,未經(jīng)許可禁止轉載
0x01 Web 應用技術(shù)概覽1.1 架構
大多數 web 應用可以粗略劃分為三個(gè)組件(component)。
1、客戶(hù)端, 大多數情況下是瀏覽器。
2、服務(wù)端, Web 服務(wù)器接收客戶(hù)端的HTTP請求并進(jìn)行響應。另外,有時(shí)候 Web服務(wù)器只轉發(fā)請求到應用服務(wù)器(Application Server),由應用服務(wù)器來(lái)處理請求。
3、后端存儲, 后端存儲一般是DBMS,用于查詢(xún)和存儲數據。
所有組件都有不同行為,這些不同行為將影響漏洞的存在性和可利用性。所有組件(無(wú)論是客戶(hù)端還是服務(wù)端)都有可能產(chǎn)生漏洞或者其他安全問(wèn)題。
1.2 客戶(hù)端技術(shù)
主流的客戶(hù)端技術(shù)每天都在被大量互聯(lián)網(wǎng)用戶(hù)使用,包括 HTML, JavaScript, Flash … 他們常用的瀏覽器則是 Chrome, Firefox, Opera, IE/Edge, Safari 等。另外,包括Android應用的 webview 以及部分PC客戶(hù)端應用(比如QQ或者某些游戲登陸器),也會(huì )引入一部分 web 客戶(hù)端技術(shù)。
1.3 服務(wù)端技術(shù)
在服務(wù)端,盡管使用任何技術(shù)的任何Web應用都有或多或少的潛在漏洞,但對于某些特定技術(shù)(如PHP, Struts2等)的網(wǎng)站,則相對更容易產(chǎn)生漏洞。簡(jiǎn)單劃分的話(huà)服務(wù)端技術(shù)大概有以下幾類(lèi)。
1、Web服務(wù)器(Web Server), 包括 Apache, lighttpd, Nginx, IIS.
2、應用服務(wù)器(Application Server), 包括 Tomcat, Jboss, Oracle Application server .
3、編程語(yǔ)言, 包括 PHP, Java, Ruby, Python, C#. 對于后三種語(yǔ)言,一些常見(jiàn)的框架包括 Ruby-on-Rails, .Net MVC, Django 等。
1.4 后端存儲技術(shù)
對于大多數中小型網(wǎng)站,數據庫和Web服務(wù)器是在同一臺主機的。常見(jiàn)的后端存儲技術(shù)包括:
1、關(guān)系型數據庫, 包括 MySQL, Oracle, DB2, SQL Server, PostgreSQL, SQLite 等。
2、NoSQL, 包括 MongoDB, CouchDB, Redis 等。
3、目錄訪(fǎng)問(wèn), 包括 openLDAP, Active Directory。
0x02 Web 服務(wù)器指紋分析2.1 Web 服務(wù)器指紋內容
我們想要尋找哪些信息。
1、Web服務(wù)器名稱(chēng),版本
2、Web服務(wù)器后端是否有應用服務(wù)器
3、數據庫(DBMS)是否部署在同一主機(host),數據庫類(lèi)型
4、是否使用反向代理(reverse proxy)
5、是否使用負載均衡(load balancing)
6、Web應用使用的編程語(yǔ)言
2.2 手工檢測技巧2.2.1 HTTP分析
使用chrome開(kāi)發(fā)者工具或者burpsuite交互式抓包分析HTTP數據。
1、重點(diǎn)觀(guān)察 響應頭(Response Header)的 Server, X-Powered-By, Set-Cookie 字段。
2、使用畸形 Host字段的 HTTP請求試探,觀(guān)察響應頭。
比如 Struts2 的特征之一就是會(huì )設置特殊的JSESSIONID的cookie字段。
Set-Cookie: JSESSIONID=C09CBBF************7CF6D25D4F0
又或者以freebuf為例,你可以觀(guān)察到兩個(gè)有趣的字段,Server字段以及WP-Super-Cache。
Server字段說(shuō)明 freebuf 的服務(wù)器版本是 Apache 2.2.21
WP-Super-Cache 字段則表明 freebuf 使用名為 WP Super Cache 的 Wordpress 插件。
2.2.2 瀏覽網(wǎng)站2.2.2.1 關(guān)注HTML源碼
重點(diǎn)關(guān)注以下幾處
1、上傳與下載功能
2、認證表單與URL(login,logout, reset password)
3、后臺管理頁(yè)面(administration section)
4、數據輸入點(diǎn),例如”留言板,聯(lián)系我們,*敏*感*詞*,商品評論,搜索,編輯器”等
觀(guān)察這些位置的HTML源碼(特殊的class名稱(chēng))及其注釋(comment)部分,可能暴露有價(jià)值信息。
2.2.2.2 根據網(wǎng)站頁(yè)面后綴判斷
通常而言
1、存在.php結尾的文件說(shuō)明該web應用是用PHP寫(xiě)的。
2、存在.jsp或者.do的文件,說(shuō)明該web應用是由Java寫(xiě)的。
3、存在.asp或者.aspx結尾的文件,說(shuō)明該web應用可能是由VB或者C#寫(xiě)的。
需要注意的是(低概率事件),某些腦洞奇特的管理員/開(kāi)發(fā)者/運維可能會(huì )將Java編寫(xiě)的程序用.php的結尾,或者讓某些PHP應用使用.do結尾。
如果網(wǎng)站路徑存在 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 開(kāi)發(fā)的。
2.2.2.3 favicon.ico
可以通過(guò)默認 favicon.ico 來(lái)判斷CMS,比如 Drupal 的默認icon是一個(gè)水滴狀的物體。在HTML源碼處搜索關(guān)鍵詞icon或者shortcut。
幾個(gè)例子
2.2.2.4 robots.txt
有些cms會(huì )有默認robots.txt,所以我們可以通過(guò)robots.txt來(lái)幫助判斷CMS。下面的是舉了一個(gè)Joomla的robots.txt例子。由于robots.txt只是君子協(xié)議,所以你懂的,在滲透測試時(shí)它完全在說(shuō)明你應該檢查哪些目錄。
# 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
<p>
#
# 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/</p>
2.2.2.5 目錄掃描(directory/pages busting)
可以使用wfuzz進(jìn)行目錄掃描。
python wfuzz.py -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ
詳細的使用方法請參考
另外也可以參考 OWASP的目錄掃描工具 OpenDoor,開(kāi)發(fā)比較活躍。
:///stanislav-web/OpenDoor/wiki
無(wú)論用什么具體的目錄掃描工具,最終是為了發(fā)現某些404頁(yè)面, SQL錯誤頁(yè)面或者其他異常頁(yè)面,這些頁(yè)面暴露的信息可能可以反映服務(wù)器類(lèi)型與版本。除此以外,對于多數網(wǎng)站的后臺管理頁(yè)面通常都屬于某些常用的路徑(即包含在字典中),因此我們在大多數情況可以通過(guò)目錄掃描來(lái)獲得。如果已知CMS類(lèi)型,可以直接參考文檔來(lái)判斷后臺默認管理頁(yè)面的路徑。
2.2.2.6 刻意構造錯誤
錯誤頁(yè)面可以給你提供關(guān)于服務(wù)器的大量信息??梢酝ㄟ^(guò)構造含有隨機字符串的URL,并訪(fǎng)問(wèn)它來(lái)嘗試得到404頁(yè)面。
Tomcat的默認404頁(yè)面
Ruby on Rails的默認404頁(yè)面
還有幾種方法可以構造錯誤。比如在URL中添加特殊字符(NULL),%27(Single Quote),%22(Double Quote)?;蛘咴赨RL中刪除部分參數,刪除部分cookie中的參數(chrome 插件 edit this cookie)。
不熟練的Django開(kāi)發(fā)者可能會(huì )開(kāi)啟調試模式
Tomcat 5XX的錯誤時(shí)可能拋出異常會(huì )顯示調用棧
對于PHP的應用,還有一個(gè)很常用的技巧來(lái)構造錯誤。比如將/index.php?name=hacker替代為/index.php?name[]=hacker。
關(guān)鍵是要仔細閱讀這些錯誤信息。雖然這聽(tīng)起來(lái)有點(diǎn)蠢,但是你肯定會(huì )驚訝于會(huì )有多少開(kāi)發(fā)者認為兩個(gè)錯誤頁(yè)面是一樣的,即使是錯誤消息的內容完全不同。The evil is in the detail.
0x03 Web應用指紋特征總結3.1 HTTP響應頭(HTTP response header) 特征