如果你沒有積極地參與Web應(yīng)用程序開發(fā),幾乎就不可能了解HTTP協(xié)議的內(nèi)部工作機(jī)理,也幾乎沒有機(jī)會(huì)知道Web應(yīng)用程序與數(shù)據(jù)庫(kù)進(jìn)行交互的不同方法,也無法真正知道,當(dāng)用戶點(diǎn)擊了一個(gè)鏈接或在瀏覽器的URL中鍵入字符時(shí)會(huì)發(fā)生什么。
如果你以前并沒有編程技能,也沒有積極地參與Web應(yīng)用程序的開發(fā),就不可能有效地執(zhí)行滲透測(cè)試。作為滲透測(cè)試人員,你需要Web應(yīng)用程序和HTTP協(xié)議的基礎(chǔ)知識(shí)。
作為滲透測(cè)試人員,理解信息流是如何從客戶端達(dá)到服務(wù)器,再返回服務(wù)器是非常重要的。舉個(gè)例子,一位給你修電視的技術(shù)人員在接觸電視的任何零件之前,必須理解電視的內(nèi)部工作原理。本文將討論一些實(shí)施滲透測(cè)試時(shí)的重要HTTP方法,旨在幫助沒有Web應(yīng)用滲透測(cè)試知識(shí)的滲透測(cè)試人員能夠充分利用已有工具,成功地實(shí)施端到端的Web滲透測(cè)試。
實(shí)施滲透測(cè)試的重要HTTP方法
在客戶端將請(qǐng)求發(fā)送給服務(wù)器時(shí),它還應(yīng)當(dāng)通知服務(wù)器對(duì)目標(biāo)源采取的行動(dòng)。例如,如果一個(gè)用戶僅希望查看一個(gè)網(wǎng)頁(yè)的內(nèi)容,就會(huì)激發(fā)GET方法,通知服務(wù)器將網(wǎng)頁(yè)上的內(nèi)容發(fā)送給客戶端的Web瀏覽器。
本文將討論幾種方法,其宗旨就是要使?jié)B透測(cè)試人員明確,在兩端之間發(fā)生了哪些類型的數(shù)據(jù)交換。
GET/POST方法
GET方法通過URL將參數(shù)傳遞給Web應(yīng)用程序。它取得表單中的所有輸入并將其附加到URL。這種方法有些局限性;你在URL中通過GET方法最多只能傳遞255個(gè)字符,如果超過了這個(gè)數(shù)字,多數(shù)服務(wù)器就會(huì)在不發(fā)出警告的情況下截下超過限制的字符,或者會(huì)返回一個(gè)HTTP 414錯(cuò)誤。使用GET方法的另一個(gè)重要問題是,輸入的內(nèi)容成為URL的一部分而易于被嗅探。如果用戶鍵入了用戶名和口令,而這些值都通過GET方法被傳遞給服務(wù)器,那么Web服務(wù)器上的任何人都可以從Apache或IIS的日志文件中找到用戶名和口令。如果你收藏了URL,傳遞的值也會(huì)連同URL以明文的形式被保存。GET方法最初僅用于從服務(wù)器來恢復(fù)數(shù)據(jù),但是許多開發(fā)人員用它向服務(wù)器發(fā)送數(shù)據(jù)。
POST方法類似于GET方法,它用于從服務(wù)器上檢索數(shù)據(jù),但它是通過請(qǐng)求主體來傳遞內(nèi)容的。因?yàn)閿?shù)據(jù)是在請(qǐng)求主體中傳送的,所以攻擊者就很難檢測(cè)并攻擊底層操作。
HEAD方法
攻擊者使用HEAD方法來確認(rèn)服務(wù)器的類型,因?yàn)榉?wù)器僅通過HTTP頭來響應(yīng)而無需發(fā)送任何負(fù)載。這是一種快速發(fā)現(xiàn)服務(wù)器版本和日期的方法。
TRACE方法
在使用TRACE方法時(shí),檢索服務(wù)器會(huì)通過響應(yīng)主體中的原始請(qǐng)求消息,返回TRACE響應(yīng)。TRACE方法用于確認(rèn)中間設(shè)備(例如,代理服務(wù)器和防火墻)對(duì)請(qǐng)求做出的任何修改。有些代理服務(wù)器會(huì)在數(shù)據(jù)包經(jīng)過時(shí)編輯HTTP頭部,而這可以通過使用TRACE方法來確認(rèn)。TRACE方法用于測(cè)試目的,你可以跟蹤另一端接收了什么。微軟的IIS服務(wù)器有一個(gè)與TRACE方法相同的TRACK命令。有一種更加高級(jí)的攻擊稱為XST(跨站跟蹤),它利用跨站腳本攻擊(XSS)和TRACE方法來竊取用戶的cookies。
PUT和DELETE方法
PUT和DELETE方法是WebDAV(HTTP協(xié)議的一個(gè)擴(kuò)展)的一部分,它支持對(duì)Web服務(wù)器上的文檔和文件進(jìn)行管理。開發(fā)者用WebDAV將制作完成的網(wǎng)頁(yè)上傳到web服務(wù)器。PUT用于上傳數(shù)據(jù)到服務(wù)器,而DELETE用于刪除數(shù)據(jù)。
OPTIONS方法
OPTIONS方法用于查詢服務(wù)器所支持的方法。有一種方法可以很容易查詢服務(wù)器支持什么:使用所有Linux發(fā)行版都內(nèi)置的Netcat(nc)實(shí)用程序。我們可以在80端口上連接網(wǎng)站,然后使用OPTIONS方法查詢服務(wù)器所支持的方法。我們可以使用HTTP/1.1向服務(wù)器發(fā)送請(qǐng)求。返回的響應(yīng)就可以確認(rèn)服務(wù)器所支持方法,連同其它信息,如內(nèi)容長(zhǎng)度、日期,等等。