文章目錄
- 一、確定用戶輸入入口點
- 1.1 URL文件路徑
- 1.2 請求參數
- 1.3 HTTP消息頭
- 1.4 帶外通道
- 二、確定服務端技術
- 2.1 提取版本信息
- 2.2 HTTP指紋識別
- 2.3 文件拓展名
- 2.4 目錄名稱
- 2.5 會話令牌
- 2.6 第三方代碼組件
- 小結
??枚舉盡可能多的應用程序內容只是解析過程的一個方面。分析應用程序的功能、行為及使用的技術,確定它暴露的關鍵受攻擊面,并開始想出辦法探查其中可供利用的漏洞,這項任務也同樣重要。值得研究的一些重要方面如下。
- 應用程序的核心功能:用于特定目的時可利用它執行的操作。
- 其他較為外圍的應用程序行為,包括站外鏈接、錯誤消息、管理與日志功能、重定向使用等。
- 核心安全機制及其運作方式,特別是會話狀態、訪問控制以及驗證機制與支持邏輯(用戶注冊、密碼修改、賬戶恢復等)。
- 應用程序處理用戶提交的輸入的所有不同位置:每個URL、查詢字符串參數、POST數據、cookie以及類似內容。
- 客戶端使用的技術,包括表單、客戶端腳本、厚客戶端組件(Java applet、ActiveX控件和Flash)和cookie。
- 服務器端使用的技術,包括靜態與動態頁面、使用的請求參數類型、SSL使用、Web服務
器軟件、數據庫交互、電子郵件系統和其他后端組件。 - 任何可收集到的、關于服務器端應用程序內部結構與功能的其他信息(客戶端可見的功能和行為的后臺傳輸機制)
一、確定用戶輸入入口點
??在檢查枚舉應用程序功能時生成的HTTP請求的過程中,可以確定應用程序獲取用戶輸人(由服務器處理)的絕大部分位置。需要注意的關鍵位置包括以下幾項。
- 每個URL字符串,包括查詢字符串標記。
- URL查詢字符串中提交的每個參數。
- POST請求主體中提交的每個參數。
- 每個cookie。
- 極少情況下可能包括由應用程序處理的其他所有HTTP消息頭,特別是user-Agent、Referer、Accept、Accept-Language和Host消息頭。
1.1 URL文件路徑
??通常,查詢字符串之前的URL部分并不被視為是進入點,因為人們認為它們只是服務器文件系統上的目錄和文件的名稱。但是,在使用REST風格的URL的應用程序中,查詢字符串之前的URL部分實際上可以作為數據參數,并且和進入點一樣重要,因為用戶輸入就是查詢字符串本身。
典型的REST風格的URL可以采用以下格式:
http://eis/shop/browse/electronics/iPhone3G/
在這個示例中,字符串electronics和iPhone3G應被視為存儲搜索功能的參數。
1.2 請求參數
??多數情況下,在URL查詢字符串、消息主體和HTTP cookie中提交的參數都是明顯的用戶輸入進入點。但是,一些應用程序并不對這些參數使用標準的name=value格式,而是使用定制的方案。定制方案采用非標準查詢字符串標記和字段分隔符,甚至可能在參數數據中嵌入其他數據方案(如XML)。例如:
- /dir/file;foo=bar&foo2=bar2;
- /dir/file?foo=bar$foo2=bar2;
- /dir/file/foo%3dbar%26foo2%3dbar2;
- dir/foo.bar/file;
- /dir/foo=bar/file;
- /dir/file?param=foo:bar;
- /dir/file?data=83cfoo%3ebar%3c*2ffoo%3e%3cfoo2%3ebar2%3c82ffoo2%3e。
1.3 HTTP消息頭
??許多應用程序執行定制的日志功能,并可能會記錄HTTP消息頭(如Referer和User-Agent )的內容。應始終將這些消息頭視為基于輸入的攻擊的可能進入點。
??一些應用程序還對Referer消息頭進行其他處理。例如,應用程序可能檢測到用戶已通過搜索引擎到達,并提供針對用戶的搜索查詢的定制響應。一些應用程序可能會回應搜索術語,或者嘗試突出顯示響應中的匹配表達式。一些應用程序則通過動態添加HTML關鍵字等內容,并包含搜索引擎中最近的訪問者搜索的字符串,以提高它們在搜索引擎中的排名。
??應用程序向通過不同設備(如筆記本電腦、移動電話、平板電腦)進行訪問的用戶呈現不同的內容,應用程序通過檢查user-Agent消息頭實現這一目的。通過偽造流行移動設備的user-Agent消息頭,攻擊者可以訪問其行為與主要界面不同的簡化用戶界面。由于這種界面通過服務器端應用程序中的不同代碼路徑生成,并且可能并未經過嚴格的安全測試。
1.4 帶外通道
??最后一類用戶輸入進入點是帶外通道,應用程序通過它接收攻擊者能夠控制的數據。如果只是檢查應用程序生成的HTTP流量,攻擊者可能根本無法檢測到其中一些進入點,發現它們往往需要全面了解應用程序所執行的各種功能。通過帶外通道接收用戶可控制的數據的Web應用程序包括:
- 處理并顯示通過SMTP接收到的電子郵件消息的Web郵件應用程序;
- 具有通過HTTP從其他服務器獲取內容功能的發布應用程序;
- 使用網絡嗅探器收集數據并通過Web應用程序界面顯示這些數據的入侵檢測應用程序;
- 任何提供由非瀏覽器用戶代理使用的API接口(如果通過此接口處理的數據與主Web應用程序共享)的應用程序,如移動電話應用程序。
二、確定服務端技術
2.1 提取版本信息
??許多Web服務器公開與Web服務器軟件本身和所安裝組件有關的詳細版本信息。例如,HTTPServer消息頭揭示大量與安裝軟件有關的信息:
??除server消息頭外,下列位置也可能揭露有關軟件類型和版本的信息:
- 建立HTML頁面的模板;
- 定制的HTTP消息頭;
- URL查詢字符串參數。
2.2 HTTP指紋識別
??從理論上說,服務器返回的任何信息都可加以定制或進行有意偽造,Server消息頭等內容也不例外。大多數應用程序服務器軟件允許管理員配置在server HTTP消息頭中返回的旗標。但,蓄意破壞的攻擊者仍然可以利用Web服務器的其他行為確定其所使用的軟件。Httprecon工具是一款HTTP指紋識別工具,以不同的可信度報告各種可能的Web服務器。
2.3 文件拓展名
??URL中使用的文件擴展名往往能夠揭示應用程序執行相關功能所使用的平臺或編程語言。例如:
- asp——Microsoft Active Server Pages
- aspx——Microsoft ASP.NET
- jsp—Java Server Pages
- cfm—Cold Fusion
- php—PHP語言
- d2w—WebSphere
- pl-—Perl語言
- py-Python語言
- dll—-—通常為編譯型本地代碼(C或C++)
- nsf或ntf————Lotus Domino。
??即使應用程序在它公布的內容中并不使用特定的文件擴展名,但我們一般還是能夠確定服務器是否執行支持該擴展名的技術。例如,如果應用程序上安裝有ASP.NET,請求一個不存在的.aspx文件將返回一個由ASP.NET框架生成的錯誤頁面。
??但是,請求一個擴展名不同的不存在的文件將返回一個由Web服務器生成的常規錯誤消息。
??之所以出現上述不同的行為,是因為許多Web服務器將特殊的文件擴展名映射到特定的服務器端組件中,不同的組件處理錯誤的方式(包括請求不存在的內容)也各不相同。
2.4 目錄名稱
??一些子目錄名稱常常表示應用程序使用了相關技術。例如:
- servlet—Java servlet
- pls—Oracle Application Server PL/SQL網關
- cfdocs或cfide—-Cold Fusion
- SilverStream —- SilverStream Web服務器
- WebObjects或{function}.woa----Apple webObjects
- rails——-Ruby on Rails。
2.5 會話令牌
?? 許多Web服務器和Web應用程序平臺默認生成的會話令牌名稱也揭示其所使用技術的信息,例如:
- JSESSIONID———Java平臺
- ASPSESSIONID——Microsoft IIS服務器
- ASP.NET_Sessionld——Microsoft ASP.NET
- CFID/CFTOKEN ——Cold Fusion
- PHPSESSID——PHP。
2.6 第三方代碼組件
??許多Web應用程序整合第三方代碼組件執行常見的功能,如購物車、登錄機制和公告牌。這些組件可能為開源代碼,或者從外部軟件開發者購買而來。如果是這樣,那么相同的組件會出現在因特網上的大量其他Web應用程序中,可以根據這些組件了解應用程序的功能。通常,其他應用程序會利用相同組件的不同特性,確保攻擊者能夠確定目標應用程序的其他隱藏行為和功能。而且,軟件中可能包含其他地方已經揭示的某些已知漏洞,攻擊者也可以下載并安裝該組件,對它的源代碼進行分析或以受控的方式探查其中存在的缺陷。
小結
??滲透測試步驟:
-
確定全部用戶輸入入口點,包括URL、查詢字符串參數、PosT數據、cookie和其他由應用程序處理的HTTP消息頭。
-
分析應用程序使用的查詢字符串格式。幾乎所有定制方案仍然使用名/值模型的某種變化形式,因此要設法了解名/值對如何被封裝到已經確定的非標準URL中。
-
確定任何向應用程序處理過程引入用戶可控制或其他第三方數據的帶外通道。
-
查看應用程序返回的HTTP服務器旗標。
注意,在某些情況下,應用程序的不同區域由不同的后端組件處理,因此可能會收到不同的server消息頭。
-
檢查所有定制HTTP消息頭或HTML源代碼注釋中包含的任何其他軟件標識符。(6)運行Httprecon工具識別Web服務器。
-
如果獲得關于Web服務器和其他組件的詳細信息,搜索其使用的軟件版本,確定在發動攻擊時可供利用的所有漏洞。
-
分析應用程序URL列表,確定任何看似重要的文件擴展名、目錄或其他提供服務器使用技術相關線索的內容。
-
分析應用程序發布的全部會話令牌的名稱,確定其使用的技術。
-
使用常用技術列表或Google推測服務器所使用的技術,或者查找其他明顯使用相同技術的Web站點和應用程序。
-
在Google上搜索可能屬于第三方軟件組件的任何不常見的cookie、腳本、HTTP消息頭名稱,并進行分析