一、漏洞描述
越權訪問(Broken Access Control,簡稱BAC)是Web應用程序中一種常見的漏洞,由於其存在範圍廣、危害大,被OWASP列為Web應用十大安全隱患的第二名。
該漏洞是指應用在檢查授權時存在紕漏,使得攻擊者在獲得低權限用戶賬戶後,利用一些方式繞過權限檢查,訪問或者操作其他用戶或者更高權限。越權漏洞的成因主要是因為開發人員在對數據進行增、刪、改、查詢時對客戶端請求的數據過分相信而遺漏了權限的判定,一旦權限驗證不充分,就易致越權漏洞。
二、漏洞分類
越權訪問漏洞主要分為水平越權、垂直越權。
水平越權:指攻擊者嘗試訪問與他擁有相同權限的用戶資源。例如,用戶A和用戶B屬於同一角色,擁有相同的權限等級,他們能獲取自己的私有數據(數據A和數據B),但如果系統只驗證了能訪問數據的角色,而沒有對數據做細分或者校驗,導致用戶A能訪問到用戶B的數據(數據B),那麼用戶A訪問數據B的這種行為就叫做水平越權訪問。
垂直越權:由於後臺應用沒有做權限控制,或僅僅在菜單、按鈕上做了權限控制,導致惡意用戶只要猜測其他管理頁面的URL或者敏感的參數信息,就可以訪問或控制其他角色擁有的數據或頁面,達到權限提升的目的。
三、漏洞產生的原因
通常情況下,一個 Web 程序功能流程是登錄 - 提交請求 - 驗證權限 - 數據庫查詢 - 返回結果。如果驗證權限不足,便會導致越權。常見的程序都會認為通過登錄後即可驗證用戶的身份,從而不會做下一步驗證,最後導致越權。
1. 通過隱藏 URL
實現控制訪問有些程序的管理員的管理頁面只有管理員才顯示,普通用戶看不到,利用 URL 實現訪問控制,但 URL 洩露或被惡意攻擊者猜到後,這會導致越權攻擊。
2. 直接對象引用
這種通過修改一下參數就可以產生水平越權,例如查看用戶信息頁面 URL 後加上自己的 id 便可查看,當修改為他人的 ID 號時會返回他人的信息,便產生了水平越權。
3. 多階段功能
多階段功能是一個功能有多個階段的實現。例如修改密碼,可能第一步是驗證用戶身份信息,號碼驗證碼類的。當驗證成功後,跳到第二步,輸入新密碼,很多程序會在這一步不再驗證用戶身份,導致惡意攻擊者抓包直接修改參數值,導致可修改任意用戶密碼。
4. 靜態文件
很多網站的下載功能,一些被下載的靜態文件,例如 pdf、word、xls 等,可能只有付費用戶或會員可下載,但當這些文件的 URL 地址洩露後,導致任何人可下載,如果知道 URL 命名規則,則會便利服務器的收費文檔進行批量下載。
5. 平臺配置錯誤
一些程序會通過控件來限制用戶的訪問,例如後臺地址,普通用戶不屬於管理員組,則不能訪問。但當配置平臺或配置控件錯誤時,就會出現越權訪問。
四、漏洞利用
利用靶場進行越權漏洞演練:
首先註冊一個普通用戶
這個靶場在“修改資料”處存在垂直越權漏洞,所以點擊修改資料,抓包:
可以看到admin=0;shenfen=2兩個參數。通過調試,我們發現shenfen參數1決定是否為管理員,admin為1代表是管理員,為0代表不是管理員。所以我們將改admin改為1,shenfen參數改為1:
繼續抓包,繼續修改。因為修改這個資料參數可能要經過好幾個頁面的判定。
最後我們終於進入了後臺,以普通用戶的名字,管理員的權限。
五、防範措施
1、前後端同時對用戶輸入信息進行校驗,雙重驗證機制
2、 執行關鍵操作前必須驗證用戶身份,驗證用戶是否具備操作數據的權限
3、特別敏感操作可以讓用戶再次輸入密碼或其他的驗證信息。
4、可以從用戶的加密認證 cookie 中獲取當前用戶 id,防止攻擊者對其修改。或在 session、cookie 中加入不可預測、不可猜解的 user 信息。
5、直接對象引用的加密資源ID,防止攻擊者枚舉ID,敏感數據特殊化處理
6、永遠不要相信來自用戶的輸入,對於可控參數進行嚴格的檢查與過濾