我們將演示如何手工滲透測(cè)試web應(yīng)用程序而不使用自動(dòng)化工具。世界上大多數(shù)公司都非常關(guān)注對(duì)web應(yīng)用程序的手工測(cè)試,而不是運(yùn)行web應(yīng)用程序掃描器——因?yàn)樗鼤?huì)限制你的知識(shí)和技能,影響在測(cè)試中尋找漏洞的視野。
我將使用下面的程序:
NOWASP Mutiliadae
BURP Proxy
NOWASP Mutiliadae
NOWASP Mutiliadae是一個(gè)包含了40多個(gè)漏洞的web應(yīng)用程序。它包括OWASP的top 10漏洞,也有其它組織的列表中的漏洞。其中有可以利用web應(yīng)用程序掃描器(比如Vega, Acunetix, Nikto, w3af等)掃描出的小型和中型漏洞。我將使用這個(gè)程序的最新版本,它以面向?qū)ο蟮姆绞皆O(shè)計(jì),這可以讓我們更好地理解web應(yīng)用程序的所有漏洞。
Burp Suite
我將用到的另外一個(gè)工具是Burp Proxy。它是一個(gè)介于客戶端(瀏覽器程序,比如Firefox或者Chrome)和網(wǎng)站或服務(wù)器之間的代理。它將在我的本地計(jì)算機(jī)上運(yùn)行,截獲瀏覽器和目標(biāo)機(jī)(在我們的環(huán)境中,目標(biāo)機(jī)是NOWASP Mutiliadae)之間的出站或入站流量。這個(gè)工具的主要作用在于,當(dāng)你請(qǐng)求訪問(wèn)一個(gè)服務(wù)器時(shí),Burp Suite攔截從你的機(jī)器發(fā)往服務(wù)器的請(qǐng)求,你可以根據(jù)需要改變請(qǐng)求的內(nèi)容。它也可以顯示請(qǐng)求的類型,是GET或是POST請(qǐng)求,或者是其它類型的請(qǐng)求。Burp也有另外一個(gè)功能,可以顯示你發(fā)往網(wǎng)站的參數(shù)列表。你可以根據(jù)檢查web應(yīng)用程序的安全性的需要操作請(qǐng)求內(nèi)容。為了攔截請(qǐng)求,你的Burp Proxy listener必須配置成監(jiān)聽(tīng)127.0.0.1 localhost的8080端口。然后你還需要設(shè)置瀏覽器的代理配置,完成之后,選擇Suite => proxy tab => Intercept,開(kāi)啟攔截。我不會(huì)深入介紹所有的tab選項(xiàng)卡以及他們的功能。你可以查看Burp的手冊(cè)和文檔。
Web的工作流程
在開(kāi)始之前,你應(yīng)該了解web在后端是如何工作的,這些你在web瀏覽器是看不到的。當(dāng)你訪問(wèn)一個(gè)網(wǎng)站時(shí),你的瀏覽器訪問(wèn)web服務(wù)器上的一個(gè)文件,這個(gè)文件可以是html, php, js (JAVAScript), css, ASPX等等。使用Burp Suite,我們能觀察到下圖所示的請(qǐng)求。為了查看請(qǐng)求,我按上面的方法配置了Burp和瀏覽器,然后訪問(wèn)下圖所示的HTML5 storage page。
一旦我點(diǎn)擊了超鏈接,Burp就會(huì)攔截這個(gè)請(qǐng)求,內(nèi)容如下。你可以看到它是一個(gè)訪問(wèn)服務(wù)器上的index.php頁(yè)面的請(qǐng)求。這里的參數(shù)是page,參數(shù)的值是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
我想要訪問(wèn)這個(gè)頁(yè)面,所以我轉(zhuǎn)發(fā)這個(gè)請(qǐng)求。如何你查看response選項(xiàng)卡,會(huì)發(fā)現(xiàn)我收到了一個(gè)“200 OK”的響應(yīng)。
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”表示我的請(qǐng)求被成功執(zhí)行,并給我返回了響應(yīng)。如果觀察瀏覽器,就會(huì)發(fā)現(xiàn)所有的web頁(yè)面都已經(jīng)加載了。
注意:你每次發(fā)送請(qǐng)求的時(shí)候,都會(huì)動(dòng)態(tài)創(chuàng)建一個(gè)HTML文件。后臺(tái)的PHP文件會(huì)接收到你的請(qǐng)求,創(chuàng)建一個(gè)HTML文件并發(fā)送給你的瀏覽器,瀏覽器負(fù)責(zé)渲染頁(yè)面。你在web瀏覽器上看到的并不是一個(gè)web頁(yè)面,而是瀏覽器對(duì)頁(yè)面該怎樣圖形化展示的解釋。
“不要只看在web瀏覽器上看到的圖像,要經(jīng)常練習(xí)以源代碼的方式查看web頁(yè)面以便熟悉它。你要盡可能熟悉JavaScript, XML, 以及所有的HTML標(biāo)簽。”
如何入手
當(dāng)開(kāi)始測(cè)試時(shí),初學(xué)者普遍存在的問(wèn)題是該從哪里入手。我們都知道黑客的工作周期。第一個(gè)階段是信息收集或者偵查。在這個(gè)例子中,我將盡可能多得獲取關(guān)于網(wǎng)站和服務(wù)器的信息,并不需要瀏覽所有的web頁(yè)面。如果你注意到上面的請(qǐng)求和響應(yīng),我們已經(jīng)得到了一些東西。有如下信息:
有很多種收集信息的方法。人們大多使用google,Recon-ng框架等應(yīng)用程序安全測(cè)試工具。我將使用Burp Suite中的spider列出目標(biāo)的所有頁(yè)面和文件夾。首先,打開(kāi)history,選中你訪問(wèn)的第一個(gè)頁(yè)面。右擊它,選擇add to the scope選項(xiàng)。
現(xiàn)在,如果你打開(kāi)target選項(xiàng)卡,你會(huì)看到網(wǎng)站的范圍。在我的例子中是localhost,如下圖所示。
“它也會(huì)列出你不知道的訪問(wèn)過(guò)的其它網(wǎng)站。比如有一個(gè)網(wǎng)站:有“like”按鈕,“share”按鈕,或者有掛在網(wǎng)站上的廣告。要想去除某些項(xiàng),點(diǎn)擊filter欄,根據(jù)下圖設(shè)置你的選項(xiàng),然后點(diǎn)擊空白處任意位置,你的修改就會(huì)被應(yīng)用”
接著,正如我所說(shuō),我需要爬取這個(gè)主機(jī)。所以,我右擊localhost,選擇spider this host選項(xiàng)。如果目標(biāo)應(yīng)用程序中有表格,會(huì)彈出一個(gè)框,你需要填寫并提交表格的值。
在點(diǎn)擊之后,就會(huì)開(kāi)始爬取你的目標(biāo)主機(jī)。如果你打開(kāi)spider選項(xiàng)卡,你會(huì)看到類似于下圖的東西。
“如果請(qǐng)求隊(duì)列變成了0,并且持續(xù)了足夠的時(shí)間,就說(shuō)明完成了對(duì)web應(yīng)用程序的爬取”
接著,打開(kāi)target選項(xiàng)卡,你會(huì)看到web應(yīng)用程序所有的頁(yè)面列表。會(huì)增加一些新的頁(yè)面。
代理設(shè)置
并沒(méi)有特別的設(shè)置或配置,我的配置如下圖。
我這樣設(shè)置的原因是,目標(biāo)主機(jī)可能鏈接了其它網(wǎng)站的share按鈕,廣告等。我想攔截我自己和目標(biāo)主機(jī)之間的所有通信,但是不需要其它網(wǎng)站的干擾。所以我選中了“Is in target scope.”復(fù)選框,只攔截在目標(biāo)范圍內(nèi)的請(qǐng)求。我也想攔截服務(wù)器返回的所有響應(yīng),這樣我就能知道我的請(qǐng)求被處理,或者重定向到了其它地方,等等。所以我選擇了攔截所有響應(yīng)的復(fù)選框。