- 黑客攻防從入門到精通(Web技術實戰(zhàn)篇)
- 明月工作室 王棟
- 4000字
- 2020-05-22 18:52:16
2.3 Web應用程序的內容與功能
隨著應用程序功能越來越多,結構越來越復雜,對其進行有效的解析就顯得格外重要。我們不但要了解應用程序的功能,更要知道應用程序運行機制的每一個方面、核心安全機制及其在服務器和客戶端上使用的技術,這樣就可以確定應用程序可能存在的漏洞和主要受攻擊面。
2.3.1 抓取站點內容——網絡爬蟲介紹
網絡爬蟲(又被稱為網頁蜘蛛、網絡機器人,在FOAF社區(qū)中間更常被稱為網頁追逐者),是一種按照一定的規(guī)則,自動地抓取萬維網信息的程序或者腳本。另外,一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。
1.網絡爬蟲的組成結構
在網絡爬蟲的系統(tǒng)框架中,主過程由控制器、解析器、資源庫3部分組成。控制器的主要工作是負責給多線程中的各個爬蟲線程分配工作任務。解析器的主要工作是下載網頁,進行頁面的處理,主要是將一些JS腳本標簽、CSS代碼內容、空格字符、HTML標簽等內容處理掉,爬蟲的基本工作由解析器完成。資源庫用來存放下載到的網頁資源,一般都采用大型的數(shù)據(jù)庫存儲,如Oracle數(shù)據(jù)庫,并對其建立索引。
(1)控制器。
控制器是網絡爬蟲的中央控制器,它主要負責根據(jù)系統(tǒng)傳過來的URL鏈接,分配一線程,然后啟動線程調用爬蟲爬取網頁的過程。
(2)解析器。
解析器是網絡爬蟲的主要部分,其負責的工作主要有:下載網頁的功能,對網頁的文本進行處理,如過濾功能、抽取特殊HTML標簽的功能、分析數(shù)據(jù)功能。
(3)資源庫。
資源庫是用來存儲網頁中下載下來的數(shù)據(jù)記錄的容器,并提供生成索引的目標源。中大型的數(shù)據(jù)庫產品有Oracle、Sql Server等。
2.聚焦爬蟲工作原理以及關鍵技術概述
網絡爬蟲是一個自動提取網頁的程序,它為搜索引擎從萬維網上下載網頁,是搜索引擎的重要組成部分。傳統(tǒng)爬蟲從一個或若干個初始網頁的URL開始,獲得初始網頁上的URL,在抓取網頁的過程中,不斷從當前頁面上抽取新的URL放入隊列,直到滿足系統(tǒng)的一定停止條件。聚焦爬蟲的工作流程較為復雜,需要根據(jù)一定的網頁分析算法過濾與主題無關的鏈接,保留有用的鏈接并將其放入等待抓取的URL隊列,然后,它將根據(jù)一定的搜索策略從隊列中選擇下一步要抓取的網頁URL,并重復上述過程,直到達到系統(tǒng)的某一條件時停止。另外,所有被爬蟲抓取的網頁將會被系統(tǒng)存貯,進行一定的分析、過濾,并建立索引,以便之后的查詢和檢索;對于聚焦爬蟲來說,這一過程所得到的分析結果還可能對以后的抓取過程給出反饋和指導。
相對于通用網絡爬蟲,聚焦爬蟲還需要解決3個主要問題。
(1)對抓取目標的描述或定義。
(2)對網頁或數(shù)據(jù)的分析與過濾。
(3)對URL的搜索策略。
抓取目標的描述和定義是決定網頁分析算法與URL搜索策略如何制訂的基礎。而網頁分析算法和候選URL排序算法是決定搜索引擎所提供的服務形式和爬蟲網頁抓取行為的關鍵所在。這兩個部分的算法又是緊密相關的。
圖2-7所示為網絡爬蟲分布示意圖。

圖2-7 網絡爬蟲分布示意圖
3.抓取目標描述
現(xiàn)有聚焦爬蟲對抓取目標的描述可分為基于目標網頁特征、基于目標數(shù)據(jù)模式和基于領域概念3種。
基于目標網頁特征的爬蟲所抓取、存儲并索引的對象一般為網站或網頁。根據(jù)種子樣本獲取方式可分為以下3種。
(1)預先給定的初始抓取種子樣本。
(2)預先給定的網頁分類目錄和與分類目錄對應的種子樣本,如Yahoo!分類結構等。
(3)通過用戶行為確定的抓取目標樣例,分為:① 用戶瀏覽過程中顯示標注的抓取樣本;② 通過用戶日志挖掘得到訪問模式及相關樣本。
其中,網頁特征可以是網頁的內容特征,也可以是網頁的鏈接結構特征,等等。
2.3.2 Wireshark抓包步驟詳解
Wireshark是非常流行的網絡封包分析軟件,功能十分強大,可以截取各種網絡封包,顯示網絡封包的詳細信息。使用Wireshark的人必須了解網絡協(xié)議,否則就看不懂Wireshark了。
為了安全考慮,Wireshark只能查看封包,而不能修改封包的內容,或者發(fā)送封包。
Wireshark能獲取HTTP,也能獲取HTTPS,但是不能解密HTTPS,所以Wireshark看不懂HTTPS中的內容。如果處理HTTP、HTTPS還是用Fiddler,其他協(xié)議如TCP, UDP就用Wireshark。
圖2-8所示為Wireshark開始界面。

圖2-8 Wireshark開始界面
Wireshark是捕獲機器某一塊網卡的網絡包,當你的機器上有多塊網卡的時候,你需要選擇一個網卡,雙擊進入捕獲界面,如圖2-9所示。

圖2-9 Wireshark捕獲界面
Wireshark捕獲界面主要分為這幾個部分。
(1)Display Filter(顯示過濾器),用于過濾。
使用過濾是非常重要的,初學者使用Wireshark時,將會得到大量的冗余信息,在幾千甚至幾萬條記錄中,以至于很難找到自己需要的部分。過濾器會幫助我們在大量的數(shù)據(jù)中迅速找到所需要的信息。
(2)Packet List Pane(封包列表),顯示捕獲到的封包、有源地址和目標地址及端口號。
封包列表的面板中顯示編號、時間戳、源地址、目標地址、協(xié)議、長度以及封包信息,可以看到不同的協(xié)議用了不同的顏色顯示。
(3)Packet Details Pane(封包詳細信息),顯示封包中的字段。
這個面板是最重要的,用來查看協(xié)議中的每一個字段。
各行信息分別如下。
Frame:物理層的數(shù)據(jù)幀概況。
Ethernet II:數(shù)據(jù)鏈路層以太網幀頭部信息。
Internet Protocol Version 4:互聯(lián)網層IP包頭部信息。
Transmission Control Protocol:傳輸層T的數(shù)據(jù)段頭部信息,此處是TCP。
Hypertext Transfer Protocol:應用層的信息,此處是HTTP協(xié)議。
(4)Dissector Pane(16進制數(shù)據(jù))。
(5)Miscellanous(地址欄,雜項)。
利用Wireshark軟件進行抓包捕獲數(shù)據(jù)的操作如圖2-10所示。

圖2-10 抓包捕獲數(shù)據(jù)
步驟1 選中你要截取的數(shù)據(jù)包,雙擊該條目。
步驟2 彈出的顯示框是該數(shù)據(jù)包的詳細信息。
2.3.3 Web應用程序的傳遞參數(shù)解析
Web頁面是動態(tài)和交互的,Web頁面之間的數(shù)據(jù)交換往往存在一些參數(shù)的傳遞。不管是通過哪種語言平臺編寫Web頁面處理程序,其參數(shù)傳遞的方式方法類似且多種多樣。常見方式主要包括通過URL地址、Application/Session、Cache、Cookies以及基于服務器文件或數(shù)據(jù)庫等。
URL地址傳遞參數(shù)方式在Web頁面程序處理中非常常見,其形式是以頁面地址后面附帶參數(shù)的方式瀏覽頁面,如“http://test.net/Expert/PostNew.asp? room=301”,其中“room=301”即傳遞的參數(shù)名稱和值。以ASP.NET程序中URL參數(shù)傳遞處理為例,其簡單處理過程如下。
發(fā)送頁面處理程序a.aspx:
Send_url = "b.aspx? name=" + paraValue; Response.Redirect(s_url);
接收頁面處理程序b.aspx:
Receive_value=Request.QueryString["name"];
URL地址傳遞參數(shù)方式的特點主要表現(xiàn)在以下幾個方面。
(1)URL地址法簡潔易用,可同時傳遞多個字符型參數(shù)。
(2)URL地址法可以很方便地在頁面之間切換并傳遞參數(shù),無須額外的處理,基于正常情況下不會產生性能損失。
(3)URL傳遞參數(shù)長度受限,最大為2K。
(4)URL只能傳遞字符型參數(shù)。
(5)信息泄露。URL地址在客戶端可見,會泄露信息,可能被黑客用來攻擊系統(tǒng)。
在Web應用程序使用URL地址作為傳遞參數(shù)的過程中可能會出現(xiàn)以下幾種常見的應用問題。
(1)因URL傳遞參數(shù)長度受限,最大為2K,在應用中可能會出現(xiàn)超出范圍時的處理錯誤。
(2)URL只能傳遞字符型參數(shù),在應用中,經常會傳遞一些中文名的參數(shù)或URL地址,因為發(fā)送頁面和接收頁面的字符編碼方式不一樣而導致參數(shù)解析處理錯誤,參數(shù)包含中文時出現(xiàn)亂碼或者參數(shù)接收錯誤。
(3)Web程序中對字符編碼的方法多種多樣,但是有些方法對一些特殊字符,如! @ # $&* ( ) = : / ; ? + ’中的某些不能進行編碼,因此對參數(shù)中包含某些特殊字符時不能正確處理,當參數(shù)中包含這些特殊字符時,軟件接收處理出現(xiàn)異常。
(4)URL可以傳遞一定長度大小字符型參數(shù),在應用中通過URL接收的參數(shù)經常需要進行邏輯處理,如類型轉換或者數(shù)字計算操作等,處理過程中開發(fā)人員可能會對參數(shù)在界面輸入時限制處理不充分,而且開發(fā)人員在后續(xù)邏輯處理中過分信任傳遞過來的參數(shù)而未進行充分邏輯判斷,導致在后續(xù)的邏輯處理中出現(xiàn)邊界處理或者類型轉換的錯誤,從而程序出現(xiàn)異常甚至崩潰。
(5)URL地址中的參數(shù)經常與數(shù)據(jù)庫SQL語句中的參數(shù)關聯(lián),如果開發(fā)人員對SQL語句參數(shù)化處理不完善,通過URL地址傳遞參數(shù)也容易引起SQL注入問題,參數(shù)中包含特殊字符、類型或者長度不符合要求時導致程序出錯,甚至可以通過這個入口破壞或者獲取數(shù)據(jù)庫信息;
(6)URL顯示傳遞參數(shù),容易產生信息泄露問題,一些關鍵信息URL地址在客戶端可見,這些信息可能被黑客用來攻擊系統(tǒng)。
針對采用URL地址傳遞參數(shù)的Web程序,為發(fā)現(xiàn)及解決其應用問題,可通過以下幾個方面進行測試。
(1)分析軟件需求,是否需要處理超過2K大小的參數(shù),如需要則通過Web界面控件或者URL輸入超出2K大小參數(shù)進行測試,通過這種方式可以發(fā)現(xiàn)軟件是否可以正常處理超出2K大小參數(shù)的需求問題;如無須求也可以通過此測試檢測軟件在參數(shù)大小超過2K時是否進行了相應的限制或者錯誤處理。
(2)通過Web界面控件或者URL輸入中文字符參數(shù)進行測試,檢測軟件在接收頁面時處理是否正常,是否出現(xiàn)亂碼或者異常錯誤。
(3)通過Web界面控件或者URL輸入各種特殊字符,如! @ # $& * ( ) = : / ; ? + ’等,檢測軟件接收處理是否正常,是否可以顯示處理必需的特殊字符。
(4)通過Web界面控件或者URL輸入參數(shù)邊界值,同時包括輸入各種類型參數(shù),檢測軟件運行是否正常。
(5)通過Web界面控件或者URL輸入包含跟數(shù)據(jù)庫SQL語句相關的一些特殊字符參數(shù)和一些關鍵字符串等,檢測軟件是否存在SQL注入問題,同時也可以采用一些安全測試工具對URL輸入參數(shù)進行SQL注入的滲透測試。
(6)檢測URL參數(shù)中是否包含關鍵信息,并可通過安全測試工具進行惡意破壞或者攻擊測試。
針對URL地址傳遞參數(shù)應用問題,在應用中有以下建議。
(1)在安全性要求較高的系統(tǒng)中不推薦使用這種方法,只適合在一些安全性要求不高、頁面邏輯比較簡單的場合。
(2)對參數(shù)長度超出2K的傳遞建議不要采取此方式。
(3)對地址信息進行編碼,且保證發(fā)送頁面和接收頁面編碼和解碼方式對應一致。
(4)對從URL地址中接收的參數(shù)信息進行邊界和類型校驗。
(5)為防止信息泄露,對URL傳遞的參數(shù)進行加密處理,同時需要考慮加密和解密過程的性能損失。
(6)為防止信息泄露,也可對URL進行重寫,經過一定算法重組的URL信息,在IE中不顯示真正的參數(shù)或者網頁鏈接信息。
Web頁面參數(shù)傳遞方式多種多樣,各有優(yōu)缺點,用戶在開發(fā)和測試過程中,針對各自特點選擇相應方式進行設計和相關處理。在Web頁面處理程序測試過程中,測試人員應先充分了解Web頁面參數(shù)傳遞采用的方式,如果采用URL地址進行參數(shù)傳遞,則根據(jù)其特點和應用中常見的問題,采用正確的方法進行測試,以解決各種應用問題,提高Web應用程序的質量。