我們將演示如何手工滲透測試web應用程序而不使用自動化工具。世界上大多數公司都非常關注對web應用程序的手工測試,而不是運行web應用程序掃描器——因為它會限制你的知識和技能,影響在測試中尋找漏洞的視野。
我將使用下面的程序:
NOWASP Mutiliadae
BURP Proxy
NOWASP Mutiliadae
NOWASP Mutiliadae是一個包含了40多個漏洞的web應用程序。它包括OWASP的top 10漏洞,也有其它組織的列表中的漏洞。其中有可以利用web應用程序掃描器(比如Vega, Acunetix, Nikto, w3af等)掃描出的小型和中型漏洞。我將使用這個程序的最新版本,它以面向對象的方式設計,這可以讓我們更好地理解web應用程序的所有漏洞。
Burp Suite
我將用到的另外一個工具是Burp Proxy。它是一個介于客戶端(瀏覽器程序,比如Firefox或者Chrome)和網站或服務器之間的代理。它將在我的本地計算機上運行,截獲瀏覽器和目標機(在我們的環境中,目標機是NOWASP Mutiliadae)之間的出站或入站流量。這個工具的主要作用在于,當你請求訪問一個服務器時,Burp Suite攔截從你的機器發往服務器的請求,你可以根據需要改變請求的內容。它也可以顯示請求的類型,是GET或是POST請求,或者是其它類型的請求。Burp也有另外一個功能,可以顯示你發往網站的參數列表。你可以根據檢查web應用程序的安全性的需要操作請求內容。為了攔截請求,你的Burp Proxy listener必須配置成監聽127.0.0.1 localhost的8080端口。然后你還需要設置瀏覽器的代理配置,完成之后,選擇Suite => proxy tab => Intercept,開啟攔截。我不會深入介紹所有的tab選項卡以及他們的功能。你可以查看Burp的手冊和文檔。
Web的工作流程
在開始之前,你應該了解web在后端是如何工作的,這些你在web瀏覽器是看不到的。當你訪問一個網站時,你的瀏覽器訪問web服務器上的一個文件,這個文件可以是html, php, js (JAVAScript), css, ASPX等等。使用Burp Suite,我們能觀察到下圖所示的請求。為了查看請求,我按上面的方法配置了Burp和瀏覽器,然后訪問下圖所示的HTML5 storage page。
一旦我點擊了超鏈接,Burp就會攔截這個請求,內容如下。你可以看到它是一個訪問服務器上的index.php頁面的請求。這里的參數是page,參數的值是html5-storage.PHP。
GET /chintan/index.php?page=html5-storage.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (windows NT 5.1; rv:27.0) Gecko/20100101 Firefox/27.0
Accept: text/html,Application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://localhost/chintan/
Cookie: showhints=0; username=chintan; uid=19; PHPSESSID=j53u16lcdkjq0eec6nfijphkd4
Connection: keep-alive
我想要訪問這個頁面,所以我轉發這個請求。如何你查看response選項卡,會發現我收到了一個“200 OK”的響應。
HTTP/1.1 200 OK
Date: Sat, 28 Dec 2013 23:30:08 GMT
Server: Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7
X-Powered-By: PHP/5.4.7
Logged-In-User: chintan
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
Content-Length: 46178
“200 OK”表示我的請求被成功執行,并給我返回了響應。如果觀察瀏覽器,就會發現所有的web頁面都已經加載了。
注意:你每次發送請求的時候,都會動態創建一個HTML文件。后臺的PHP文件會接收到你的請求,創建一個HTML文件并發送給你的瀏覽器,瀏覽器負責渲染頁面。你在web瀏覽器上看到的并不是一個web頁面,而是瀏覽器對頁面該怎樣圖形化展示的解釋。
“不要只看在web瀏覽器上看到的圖像,要經常練習以源代碼的方式查看web頁面以便熟悉它。你要盡可能熟悉JavaScript, XML, 以及所有的HTML標簽。”
如何入手
當開始測試時,初學者普遍存在的問題是該從哪里入手。我們都知道黑客的工作周期。第一個階段是信息收集或者偵查。在這個例子中,我將盡可能多得獲取關于網站和服務器的信息,并不需要瀏覽所有的web頁面。如果你注意到上面的請求和響應,我們已經得到了一些東西。有如下信息:
有很多種收集信息的方法。人們大多使用google,Recon-ng框架等應用程序安全測試工具。我將使用Burp Suite中的spider列出目標的所有頁面和文件夾。首先,打開history,選中你訪問的第一個頁面。右擊它,選擇add to the scope選項。
現在,如果你打開target選項卡,你會看到網站的范圍。在我的例子中是localhost,如下圖所示。
“它也會列出你不知道的訪問過的其它網站。比如有一個網站:有“like”按鈕,“share”按鈕,或者有掛在網站上的廣告。要想去除某些項,點擊filter欄,根據下圖設置你的選項,然后點擊空白處任意位置,你的修改就會被應用”
接著,正如我所說,我需要爬取這個主機。所以,我右擊localhost,選擇spider this host選項。如果目標應用程序中有表格,會彈出一個框,你需要填寫并提交表格的值。
在點擊之后,就會開始爬取你的目標主機。如果你打開spider選項卡,你會看到類似于下圖的東西。
“如果請求隊列變成了0,并且持續了足夠的時間,就說明完成了對web應用程序的爬取”
接著,打開target選項卡,你會看到web應用程序所有的頁面列表。會增加一些新的頁面。
代理設置
并沒有特別的設置或配置,我的配置如下圖。
我這樣設置的原因是,目標主機可能鏈接了其它網站的share按鈕,廣告等。我想攔截我自己和目標主機之間的所有通信,但是不需要其它網站的干擾。所以我選中了“Is in target scope.”復選框,只攔截在目標范圍內的請求。我也想攔截服務器返回的所有響應,這樣我就能知道我的請求被處理,或者重定向到了其它地方,等等。所以我選擇了攔截所有響應的復選框。






