原文連結:https://blog.csdn.net/weixin_49349476/article/details/131362007
(一)、什麼是越權漏洞
1、瞭解越權漏洞:
越權漏洞是指一個使用者或者一個攻擊者透過利用系統中某一漏洞,可以獲得超過其正常許可權的許可權。也就是說,越權漏洞會使攻擊者能夠執行未經授權的操作或訪問受保護的資源
簡單來說,你幹了原本你不能幹的事情,例如,原本是vip才能看的影片,你不充值,而是透過某一個方法也能看,這就是越權。透過實現越權的地方,這個地方就是存在越權漏洞
2、越權漏洞的分類:
水平越權:許可權是同級別的,但是是給不同的物件使用。例如:一般不同的使用者只有對自己資訊修改的許可權,如果出現使用者A能對使用者B的資訊進行修改,這就是水平越權
垂直越權:從低許可權到高許可權的翻越。例如普通使用者到了超級使用者
交叉越權:水平越權與垂直越權的集合
3、越權漏洞產生的原因
越權漏洞產生關鍵點:
使用者提交(主動或被動)的資料內容被帶入到資源操作(增刪改查)邏輯中
後端程式未對請求操作資源的使用者身份進行合理判斷
越權漏洞產生的主要原因是由於程式在設計或者程式碼實現上沒有考慮許可權控制的問題。攻擊者可以使用這個漏洞,透過修改或者篡改程式中的引數或資料,使得程式在處理之前沒有對資料進行合理的授權驗證,讓攻擊者獲得程式中本不應該擁有的許可權,從而進行攻擊
舉個例子,如上圖,使用者A只能對自己的訂單15167,進行編輯,使用者B只能對自己的訂單15166進行編輯。這是正常情況,如果使用者A在提交自己訂單時候,對利用抓包工具對其抓包,然後把自己的訂單號15167改為了15166,即使用者A提交的資訊,不是自己的訂單,而是使用者B的訂單,如果後臺程式沒有對身份驗證,之後就處理了A的請求。越權漏洞就這樣產生。
4、越權測試規範
在越權測試的時候,是有一些要求的,如下:
越權讀取的時候,能讀取到的真實資料不超過5組,嚴禁進行批次讀取。
帳號可註冊的情況下,只允許用自己的2個帳號驗證漏洞效果,不要涉及線上正常 使用者的帳號,越權增刪改,請使用自己測試帳號進行。帳號不可註冊的情況下,如 果獲取到該系統的賬密並驗證成功,如需進一步安全測試,請諮詢管理員得到同意 後進行測試
(二)越權測試案例
1、水平越權
場景1;在某些購火車票、機票等功能,需要提交使用者的身份id(使用者的手機號,身份證、證件號等唯一標識),
場景2:在某些查詢快遞資訊等功能,需要提交物件id(例如訂單號、記錄號)
場景3、在下載某些檔案時候,如果檔案非常長的大,檔案都會有檔案id,檔案下載也是透過檔案id下載
漏洞測試:
這些場景使用到的身份id、物件id、檔案id,都是數字組成,在利用bp進行抓包之後,對這些id遍歷爆破,從某個id開始,不斷的+1遞增,不斷嘗試爆破。如果能對其中一個,提交成功,購買車票成功、查詢訂單號成功、下載檔案成功。這些不是屬於自己的許可權返回,這就是水平越權。可能嚴重情況的後果就是洩露使用者的敏感資訊
如果不是id,而是使用者名稱,也可以採用字典爆破,使用id一般比較方便。
(注:爆破是隻是為了方便檢測是否有這個漏洞,如果檢測到一個,已經到達了目的,建議就立馬停止)
在修改使用者名稱,測試越權漏洞:
2、垂直越權漏洞:
在皮卡丘靶場有一個案例:
有兩個賬戶,admin,和pikachu,其中,admin賬戶可以增加賬戶資訊,pikachu沒有這個增加賬戶這個許可權。我們想做垂直越權,讓pikachu也能夠增加賬戶資訊。
第二步:檢視pikachu的cookie資訊,複製到剛剛抓到資料包的cookie欄位中(伺服器識別使用者身份,就是根據cookie,這一步就是把請求使用者的身份換成pikachu)
在現實中的,許可權和人數往往成反比的,越高的許可權,擁有的人越少。總不可能各個都是管理員吧,高許可權的人往往比較少,負責管理一個系統,責任極其重要,不能隨便給一個人高許可權。
在登入時候,要識別登陸是否是管理員許可權,一般採用白名單的方法判斷,白名單的意思是,對於登入的使用者,判斷是否存在於管理員表中,如果存在就是判斷為管理員,反之則不是。根據這一點中,開發者一般採用幾種方法
方法一:利用前端js實現(機率較小)
在登入時候,直接在前端,判斷是否管理員,這一種可能是沒有接觸安全意識的開發者使用,這的確可能發生。因為一般高許可權的使用者非常少,只需要判斷該使用者是不是在高許可權使用者中,就可以。
針對這個方法,直接禁用js的觸發方法,就可以直接繞過。(輕輕鬆鬆的,就進入了)
方法二:帶入資料庫中查詢(機率交大)
在這一方法中,有兩種情況:
a:有一些開發者,是直接把所有的管理員資訊,存放到一個表中,在登入時候,會到這個表中查詢,判斷登入使用者是不是管理員賬戶
b:會在使用者表中新增一個角色欄位,來判斷是否是管理員,例如user_type、user_status、role_id、is_admin等
所以,在垂直越權漏洞測試中常見的測試點:
註冊使用者時,是否包含角色相關欄位。例如,在註冊的時候,對其抓包,發現一個欄位role_id,這個可能是角色判斷欄位,而且值為1,就可以嘗試測試,更改值為0,或者2,進行測試,然後登入檢視,如果存在管理員許可權,說明這裡就存在垂直越權
cookies中是否包含角色相關欄位,一些網站開發是把判斷角色的資訊是放在cookie中,對其抓包之後,檢視cookie,是否存在該相關資訊。
下面是一個根據cookies中,檢視是否包含角色相關欄位的案例
在註冊使用者時候,對其抓包,發現cookie中含有admin欄位
然後修改admin的值為1,進行提交,發現登入使用者變成了管理員許可權
(三)總結
越權漏洞的主要產生原因是在程式開發過程中沒有充分考慮許可權控制的問題,攻擊者可以透過篡改引數或者資料,獲得不應該擁有的許可權或者資源。
越權漏洞對於系統的安全性和穩定性產生極大的威脅,攻擊者可以竊取敏感資訊、篡改資料或者破壞系統的正常執行。
防範越權漏洞的措施包括嚴格的許可權控制、資料合法性驗證、程式碼審計、修復已知的漏洞以及安全程式設計實踐等。
對於網站或者應用程式的管理員來說,定期進行安全審計和漏洞掃描是必要的,及時修復已知的漏洞可以在攻擊發生前消除安全風險。
最後,對於使用者來說,在使用各種線上服務時,應當遵守一些常規的安全措施,例如不輕信陌生人的資訊或連結,不在公共場合或者不安全的網路環境下登陸敏感賬戶等。同時,不要輕易洩露自己的個人資訊,保護好自己的賬戶密碼等敏感資訊。