Web應用指紋檢測
轉載自:http://www.freebuf.com/news/137497.html
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 等。
Web伺服器的基本功能就是提供Web資訊瀏覽服務。它只需支援HTTP協議、HTML文件格式及URL。與客戶端的網路瀏覽器配合。因為Web伺服器主要支援的協議就是HTTP,所以通常情況下HTTP伺服器和WEB伺服器是相等的(有沒有支援除HTTP之外的協議的web伺服器,作者沒有考證過),說的是一回事。
應用程式伺服器(簡稱應用伺服器),我們先看一下微軟對它的定義:"我們把應用程式伺服器定義為“作為伺服器執行共享業務應用程式的底層的系統軟體”。 就像檔案伺服器為很多使用者提供檔案一樣,應用程式伺服器讓多個使用者可以同時使用應用程式(通常是客戶建立的應用程式)"
通俗的講,Web伺服器傳送(serves)頁面使瀏覽器可以瀏覽,然而應用程式伺服器提供的是客戶端應用程式可以呼叫(call)的方法(methods)。確切一點,你可以說:Web伺服器專門處理HTTP請求(request),但是應用程式伺服器是通過很多協議來為應用程式提供(serves)商業邏輯 (business logic)。
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。
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
詳細的使用方法請參考
另外也可以參考 OWASP的目錄掃描工具 OpenDoor,開發比較活躍。
無論用什麼具體的目錄掃描工具,最終是為了發現某些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.
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錯誤頁面等。
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應用指紋分析工具
0×05 參考資料
相關推薦
Web應用指紋檢測
轉載自:http://www.freebuf.com/news/137497.html 0×01 Web 應用技術概覽 1.1 架構 大多數 web 應用可以粗略劃分為三個元件(component)。 1、客戶端, 大多數情況下是瀏覽器。 2、服務端, Web 伺服器接收
手工檢測Web應用指紋(分析網站技巧)
http://www.freebuf.com/news/137497.html?utm_source=tuicool&utm_medium=referral 0×01 Web 應用技術概覽 1.1 架構 大多數 web 應用可以粗略劃分為三個元件(com
[文章存檔]如何檢測 Azure Web 應用沙盒環境文件系統存儲量
http 系統 operation tor 占用 span lin environ target 鏈接:https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/aog-app-s
檢測到錯誤頁面web應用伺服器版本資訊洩露
比方說我現在訪問:http://localhost:8080/pages/xx.jsp,應該會報404,沒有該頁面,但是會顯示出所用伺服器的資訊:所以為了避免產生此類漏洞個,應該對錯誤進行處理,在web.xml新增對相應的錯誤頁面:<!-- 預設的錯誤處理頁面 --&g
web應用防火牆如何檢測並響應攻擊
WAF不用於傳統的防火牆,不止針對一些底層(網路層和傳輸層)的資訊進行阻斷,而是會深入到應用層,對所有資訊進行保護。web應用防火牆是通過檢測客戶端和應用服務之間的請求和響應內容來實現的。所以說,防火牆什麼時候能檢測,如何檢測以及檢測什麼就變得很重要。檢測什麼將決定其響應能力
MVC模式在Java Web應用程序中的實例分析
rip run writer fault esp 身份驗證 int 網站 table 結合六個基本質量屬性 可用性: 異常 可修改性: 1.維持語義的一致性,高內聚低耦合 2.維持現有的接口,Login依賴LoginIService接口,LoginService依賴ILog
MVC模式在Java Web應用程序中的實例
simple handler hand resolv let handle 增加 獨立 efault 1.可用性 使用SimpleMappingExceptionResolver實現異常處理 只需要在Spring的配置文件applicationContext.xml中增加
[Java.web]Web應用結構
webapps htm div web web.xml web-inf clas jar css 以Web應用放在 Tomcat\webapps\ 目錄下為例 day01 目錄 | |------------- html、jsp、css、js 文件等 |-
一個web應用的誕生(7)
user 用戶名 版本 結構 reg tar rem 比較 ict 現在所有的Py代碼均寫在default.py文件中,很明顯這種方法下,一旦程序變的負責,那麽無論對於開發和維護來說,都會帶來很多問題。 Flask框架並不強制要求項目使用特定的組織結構,所以這裏使用的組織結
Java-Servlet--《12-WEB應用中的普通Java程序如何讀取資源文件.mp4》 有疑問
疑問 文件 什麽 get java程序 blog java rop col \第五天-servlet開發和ServletConfig與ServletContext對象\12-WEB應用中的普通Java程序如何讀取資源文件.mp4; 多層時,DAO為了得到資源文件中的配置
【常見Web應用安全問題】---4、Directory traversal
控制 code 註冊 input site 硬盤管理 下載 num ron Web應用程序的安全性問題依其存在的形勢劃分,種類繁多,這裏不準備介紹所有的,只介紹常見的一些。 常見Web應用安全問題安全性問題的列表: 1、跨站腳本攻擊(CSS or
免費好用的web應用托管平臺
屌絲程序猿 第一次 targe 機器 三種 練手 進行 模板 可能 1.前言 以前非常久以前。想找一個免費的空間部署一個屬於自己的技術博客真是太難了,使用過SAE,可是非常快就面臨收費了,後面也就不了了之了。眼下自己又找到一個免費的PAAS平臺。能夠部署各種語言的web
電子書 flaskweb開發:基於Python的Web應用開發實戰.pdf
商業 機器 免費 影評 而且 視頻軟件 python程序 規範 初級 作為PythonWeb開發的微框架,Flask獨樹一幟。它不會強迫開發者遵循預置的開發規範,為開發者提供了自由度和創意空間。 《圖靈程序設計叢書·Flask Web開發:基於Python的Web應用開
Linux服務器內核參數優化(適合Apache,Nginx,Squid等多種web應用)
linux 服務器 防火墻 net.ipv4.tcp_fin_timeout=2net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_recycle=1net.ipv4.tcp_syncookies=1net.ipv4.tcp_keepalive_time=600net.i
摘記:Web應用系統測試內容
目標 最小化 ica 界面 電子郵件 描述 郵件 時間 運行 表示層: 內容測試,包括整體審美、字體、色彩、拼寫、內容準確性和默認值 Web站點結構,包括無效的鏈接或圖形 用戶環境,包括Web瀏覽器版本和操作系統配置(
如何保障Web應用安全性
設置 security crs 訪問控制 安全性 代理服務器 uri 權限控制 安全 通過加密算法對關鍵數據進行加密 設置IP黑白名單來進行訪問控制 通過過濾器防禦跨站腳本攻擊XSS和CRSF 通過安全框架( Shiro、Spring Security
Repractise基礎篇:Web應用開發七日談
一些事 mit 個人 性能 簡單的 第五天 第一天 ogg 喜歡 Repractise基礎篇:Web應用開發七日談 本來想的僅僅是畫一個例如以下的七日圖來說說Web開發的。隨後又想了想這似乎是一個非常棒的Web開發相關的知識介紹。應用開發是一個非常有意
Web應用程序開發,基於Ajax技術的JavaScript樹形控件
實現 web應用 建立 tar 框架 目前 動態生成 方案 技術問題 感謝http://www.cnblogs.com/dgrew/p/3181769.html#undefined 在Web應用程序開發領域,基於Ajax技術的JavaScript樹形控件已經被廣泛使用,
keepalived 實現web應用的高可用
高可用 keepalived 項目需求:公司需要我做privacyIDEA認證服務器的高可用,我的思路是在兩臺服務器上搭兩套應用程序,後端存儲公用一個mysql數據庫,沒有mysql數據庫可以主備的形式,然後再做一下數據庫的異地備份。基本思路就是這樣的。我主要介紹一下使用keepalived實現高可用
HTML5開發移動web應用——SAP UI5篇(7)
function manifest supported 1.3 配置文件 ini 使用 .get return SAPUI5中支持利用Component對組件進行封裝。想封裝一個組件,Component的基本代碼例如以下: sap.ui.define([ "sap