接下來進到HTTP Proxies的部分,在這邊主要是要讓讀者可以了解Proxy的概念,以及學會如何使用一些流量攔截工具。
那首先就來介紹一下Proxy是什麼吧。Proxy其實就是一個中間人的概念,它的位置在Client跟Server中間,因此若Client想要跟Server連線時,所有的封包都會由Client出發,先到Proxy,最後才抵達Server;反之亦然,如果Server要回傳處理結果到Client,一樣會先到達Proxy,最後才到達Client,就如下圖的概念。
用Proxy的話就代表你的所有流量在到達Server都會先被Proxy所接收,也就是說,如果你的流量是沒有加密的話,所有流經Proxy的流量都有可能會被攔截及竊取,也可能在被竄改後才再送到Server去。既然Proxy這麼危險,為什麼還有這麼多人要用Proxy呢?其實Proxy是有很多用途的,例如VPN也算是一種Proxy,有時候如果某個網站只接受來自某個國家的連線,也可以使用Proxy先連到該國家後再連到該網站。所以,只要記得使用加密連線,以及使用可信任的Proxy,就可以安心使用Proxy功能。
這次我們要練習的則是利用OWASP官方提供的工具ZAP來模擬出Proxy,並且利用ZAP來練習竄改Client送到Server的Request。
首先,到官方github(網址:https://github.com/zaproxy/zaproxy/wiki/Downloads )下載符合自己作業系統版本的ZAP並安裝,接著將ZAP要收取流經哪個Port的流量,記得在這邊要設定成跟WebGoat不一樣,而且目前沒有被電腦其他服務占用的Port,如果WebGoat使用預設8080 Port的人,因為8080 Port已經被WebGoat服務占用了,所以就要把ZAP改成收取其他Port的流量,這邊以8090舉例作設定。
首先把ZAP打開,選擇Tools的Options。
接著選擇Local Proxies,並把Port改成8090,接著按下OK就完成了。
接著我們要在瀏覽器作相對應的設定,讓在瀏覽器操作時的流量可以先流經ZAP再出去。這裡我以Chrome為例,首先打開設定,並搜尋proxy找到開啟proxy設定的選項,如下圖。
接著選擇LAN設定,並把Proxy的資訊填入欄位中,並按確定就修改完成了。
這時候ZAP已經會收取所有流經瀏覽器的流量,這時我們可以點選WebGoat任何一頁,再看看ZAP視窗,就會發現網頁產生的所有流量都出現在ZAP的視窗中了。
但現在這種狀態就只是把所有流量列出來而已,如果想要竄改流經的流量的話,就可以先按下ZAP畫面上方快速功能列一個綠色的點,如下圖處,這樣ZAP就會幫你把下一個從Client發出的Request給攔截住先不讓他傳到Server去,接著你就可以對這個Request作一些呼呼哈哈的事情了。
馬上就進到本課程第6步的練習,在這個練習中要來測試我們知不知道如何操作ZAP,包含攔截流量跟對Request進行修改,首先我們按下綠鈕準備攔截下一個Request,並在網頁的欄位上打上任一字元後送出,這是我們就可以看到ZAP已經攔截到這個Request了。
接著我們根據題目的要求對於封被內容進行修改,包含把POST改為GET、加入「x-request-intercepted:true」到Header中,並將「changeMe」參數的值設定為「Requests are tampered easily」。
這裡有幾個陷阱,首先,Request的方法如果是Get的話,參數的給法要改成加在網址後面,另外,根據觀察第一次傳出來的請求內容,他會將字串的空白以加號來表示 ,因此最後我們將Request修改完成如下圖,並按下快速功能列的播放圖示來把竄改過的Request送出。
最後,我們就會發現伺服器收到的Request是符合要求的,並且通過練習啦!
提醒一下,如果要暫停練習ZAP時,記得要把瀏覽器的Proxy設定取消,否則可能會造成無法正常瀏覽網站喔。
以上是今天介紹如何利用ZAP工具達到攔截封包效果,另外有一個也很有名的封包攔截工具叫做BurpSuite也可以做到一樣的效果,大家可以自己選擇習慣的工具來進行練習囉。