今天開始要介紹的是存取控制缺陷(Access Control Flaws)的課程,裡面包含兩個單元,分別是不安全的直接物件參考 (Insecure Direct Object References)及遺失功能層級的存取控制 (Missing Function Level Access Control),今天就讓我們先來看看不安全的直接物件參考吧。
不安全的直接物件參考 (Insecure Direct Object References)
首先,什麼叫做直接物件參考 (Direct Object References)呢?直接物件參考的意思就是,伺服器僅靠著客戶端所輸入的資訊就去存取相對應的資料或物件,並回傳給客戶端。
舉個例子,假設今天小明想看自己在1111大特價下訂的訂單,訂單編號是135874469,因此他登入了購物網的網站,並點選了觀看訂單詳細資訊的網址如下。
https://xxx.shop.xx/order/135874469
對這種含有個人資料或帳戶機敏資料的頁面來說,網頁伺服器在接受了這個網址的請求後,會先判斷發出這個請求的客戶端是否為合法使用者,接著才會去撈取這筆訂單資訊,也就是說,只要該網頁的登入使用者不是小明,或是網頁不是在登入狀態的話,伺服器就不應該把這筆訂單的資料回傳。
進一步說明,如果今天是小明登入的話,他想怎麼看135874469這筆訂單都沒問題,但他沒辦法看到別人所下訂的135874470訂單,別人也不能看到小明的這筆訂單,這樣才是安全的,不要覺得沒有人會這麼無聊會去那邊改編號看別人資料,其實只要對資安有點概念的都會這麼無聊,看到很像流水號的編號就想改一改試試看,也時不時會在各個網站中發現這樣的風險存在。
那我們就馬上進到第2步的挑戰來試試看吧,題目中提供了一組帳號及密碼,而這題要我們輸入欄位內資訊並登入。
第2步的挑戰只是要讓我們對於不安全的登入有個認識,所以這題就只要把題目提供的帳號「tom」、「cat」填入對應的欄位就好了。
按下Submit按鈕後就發現成功囉!
馬上進到第3步的挑戰,在這題中是希望我們可以觀察伺服器實際回傳回來的資訊跟顯示在螢幕上的資訊有什麼不同,因為有時候寫程式的時候會無意間讓伺服器回傳過多不必要的資訊到客戶端,雖然只顯示了其中部分的資料,但只要去看封包的原始資訊,就會讓不應該讓客戶端取得的資料外洩。
首先我們按下頁面「View Profile」的按鈕,發現列出了下圖的資訊。
同時我們利用ZAP攔截伺服器回傳的資訊,發現回傳的資訊不只有上圖出現的那三項,還有「role」及「userId」兩項。
因此我們根據題目要求,把兩個沒顯示的欄位用逗號相連,把「role, userId」輸入欄位後送出。
接著就順利過關啦!
那今天就先介紹到這邊囉~也祝大家今天都購物愉快啦!