今天來介紹Authentication Flaws這個課程,簡單來說就是利用網頁中身分認證的設計缺陷,進而達到取得帳號權限目的的意思,而在WebGoat中將這個部分分為3個部分,分別為Authentication Bypasses 、JWT tokens及Password reset,分別將於後續介紹。
首先是身分驗證繞過的部分,主要分為幾種方式,包含觀察網頁是否有隱藏表單輸入欄位、請求中的參數是否可以被修改或移除、及強行瀏覽不允許存取的頁面等。
馬上就進到挑戰的部分,首先,Paypal以前曾經有過一個雙因子驗證 (Two factor authentication, 2FA)的漏洞,首先你要有一組可用的帳號及密碼,然而這時卻因為沒有帶手機而無法接收雙因子認證的認證碼,導致無法登入,但Paypal貼心的提供另一個功能,也就是只要你回答得出之前曾經記錄在系統的安全認證問題,就可以略過收認證簡訊的部分成功登入。
透過擷取回答安全問題的HTTP請求,發現請求的內容如下,其中有兩個參數分別叫做「securityQuestion0」and「securityQuestion1」。
而Paypal的這個漏洞利用方式就是,在請求中將這兩個參數及其值移除,並繼續將請求送出,就可以在不知道問題答案的狀況下順利通過安全問題,並取得該帳號的存取權。
在這一題我們就利用類似的方式來解題吧,這一題要我們利用非正常方式略過安全認證問題。
首先,我們先觀察在兩個欄位中填入隨意值後送出,利用ZAP把請求攔截下來,並看看HTTP請求長什麼樣子,而我們也可以發現這些參數的值都是藏在隱藏的表單欄位中的。
在這一題,如果模仿剛剛提到的Paypal漏洞是不會有結果的,也就是如果直接把secQuestion0跟secQuestion1兩個參數刪掉是不能過關的,在不知道該怎麼辦的狀況下,決定偷偷看一下提示,發現提示中有提到在這一題內並不是要將參數刪掉,而是要對參數進行竄改。
所以我們就將兩個參數的名稱改掉後再送出。
接著就發現過關了,並可以可以直接修改密碼了!
參考資料:
[1] https://henryhoggard.co.uk/blog/Paypal-2FA-Bypass