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