WebGoat教程解析——Hijack a Session

WebGoat裏面關於會話劫持(Hijack a Session)這個課程的標準答案裏面除了使用WebScarab以外還使用了其他的工具來找出合法的SessionID以完成這個課程,實際上這個課程完全可以只使用WebScarab來完成。下面把我的解法分享下:

這個課程就是說因爲這個Web應用用來生成會話標識的算法不夠隨機,所以很容易被預測,從而要求我們發現會話標識生成的規律並且使用暴力破解的辦法找到一個有效的會話標識。

這裏我們使用WebScarab作爲代理來觀察瀏覽器和服務器之間的數據通信。先隨便輸入一點東西來觀察瀏覽器發送給服務器的請求。

從上圖可以看到有個WEAKIDCookie,這就是我們的攻擊目標,我們使用WebScarab的會話標識分析功能來分析這個會話標識。在WebScarab上點擊“SessionID Analysis”這個Tab頁面,然後在“Collection”子頁面的“Previous Requests”的下拉菜單中選取我們需要分析的那個請求,如下圖所示:

然後我們需要使WebScarab意識到Cookie裏面的WEAKID這個參數是會話標識。我們知道如果客戶端發送給Web服務器的請求裏面沒有會話標識的話,服務器會從新生成一個新的會話標識並通過Cookie返回給客戶端,利用這個特性,我們可以使WebScarab通過分析服務器返回的Cookie的辦法來識別會話標識。

這裏我們刪除現有的這個參數,然後點擊"Test"按鈕讓WebScarab進行分析。彈出類似如下的對話框表示WebScarab已經成功的識別出了會話標識的參數。

然後在取樣數量這裏我們輸入稍微大點的數字,比如50,然後點擊“Fetch”按鈕,WebScarab就會自動從服務器上獲取50個會話標識的樣例。

下面我們進入“SessionID Analysis”下的“Analysis”子頁面,在“Session Identifier”下拉菜單中選擇這個參數後可以看到WebScarab獲取的這些會話標識。

我們可以看到這些會話標識是非常有規律的,是被短橫線分割的2部分,前一部分是每次加1的有序排列的數字,後一部分也是不斷增加的有序排列的數字,我們可以猜測後一部分應該是時間戳。

再進一步仔細觀察後可以發現有些特別的地方,如上圖所示,會話標記第一部分的數字跳了一個。這說明中間跳掉的會話標記是被別的用戶使用了,我們的目標就是找到這個會話標識。

在我們這個例子中,根據我們發現的會話標識生成的規律,中間跳掉的這個會話標識的值應該是在19749-134994676329219749-1349946763392之間。

到這一步爲止,我們使用的方法都和WebGoat的標準答案裏面是一樣的,但是下面就不同了。下面我們使用WebScarab的模糊測試的功能來試圖找到這個會話標識。

我們先把相應的請求添加到模糊測試的模板裏面。在WebScarab的“Summary”頁面中,選擇目標請求後,右鍵菜單中可以看到“Use as fuzz template”的菜單項,點擊這個菜單項就可以把這個請求作爲模糊測試的基礎模板。

然後進入WebScarab的“Fuzzer”頁面。會發現系統已經自動幫我們分析出了所有可以做模糊測試的參數。點擊下面的“Source”按鈕添加模糊測試的源。

在彈出的對話框中,給這個源起一個名字比如“ForWeakID”輸入到“Description”裏面,然後我們使用正則表達式的方式來添加我們需要測試的數據,輸入這樣的正則表達式:19749-1349946763[2-3][0-9][0-9],然後點擊“Add”按鈕。注意這裏我們輸入的數據會使WebScarab測試從19749-134994676320019749-1349946763399的值,略微有些擴大範圍,這是因爲WebScarab只支持基本正則表達式,我們略微擴大一點測試的數據範圍,可以把這個正則表達式寫得簡單一點。

然後關閉彈出的對話框,再爲Cookie裏面的WEAKID選擇我們添加的源,就可以點擊“Start”按鈕開始運行了。

結果的分析還是需要人工進行,我們需要知道輸入有效地會話標識之後服務器會返回怎樣的數據。在WebGoat裏面我們知道一旦提交了正確的數據給服務器,服務器返回的數據裏面會包含“Congratulations”的消息,所以我們只需要檢查看哪個請求的返回有包含這樣的信息就好。

針對這個練習還有個技巧,我們只需要看返回的數據長度和其他的返回不一樣的就好,因爲有效的參數只有一個,所以包含有效參數的請求返回的數據長度一定和其他的不一樣。

如下圖所示,我看到有個返回的數據大小和其他不一樣的請求,點擊查看詳細信息,果然在服務器的返回裏面發現了“Congratulations”的消息,所以這個請求裏面帶的WEAKID參數的值19749-1349946763342就是我們要找的那個合法的會話標誌。

這時候我們實際上也已經完成這個課程了。刷新一下課程,就可以看到課程完成的標記。

我們也可以再驗證一下我們找到的這個有效的WEAKID的值。輸入任何信息後提交,然後使用WebScarab攔截瀏覽器發出的請求,把請求裏面的WEAKID參數改爲我們找到的這個值之後在提交給服務器,然後可以在頁面上看到課程顯示成功完成的信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章