風炫安全WEB安全學習第三十八節課 越權漏洞演示與講解
越權漏洞
0x01 漏洞介紹

越權漏洞的危害與影響主要是與對應業務的重要性相關,比如說某一頁面服務器端回應(不局限于頁面回傳的資訊,有時資訊在回應包中,頁面不一定能看見)中回傳登錄名、登錄密碼、手機號、×××等敏感資訊,如果存在平行越權,通過對用戶ID的遍歷,就可以查看所有用戶的敏感資訊,這也是一種變相的脫褲,而且很難被防火墻發現,因為這和正常的訪問請求沒有什么區別,也不會包含特殊字符,具有十足的隱秘性,
水平越權
水平越權指的是攻擊者嘗試訪問與他擁有相同權限的用戶的資源,怎么理解呢?比如某系統中有個人資料這個功能,A賬號和B賬號都可以訪問這個功能,但是A賬號的個人資訊和B賬號的個人資訊不同,可以理解為A賬號和B賬號個人資料這個功能上具備水平權限的劃分,此時,A賬號通過攻擊手段訪問了B賬號的個人資料,這就是水平越權漏洞,
垂直越權
權限ID不變,權限型別改變;如普通用戶可使用管理員權限進行操作,如你登錄時,發現cookie中有一個roleID的角色引數,那么可以通過修改該ID為1或者0,根據具體情況來定,就可以使用管理員權限了!
0x02 漏洞利用
基于用戶ID的越權
舉個例子:
https://www.xxx.com/user1/userinfo.php?user_id=user1
https://www.xxx.com/user1/userinfo.php?user_id=10001
我們登陸某個系統后,看到某些功能上獲取資訊的方式類似于上鏈接時,可以初步判斷獲取資訊的方式為根據user_id來獲對應的用戶資訊,如果引數為用戶名,我們可以手機用戶名字典來列舉資訊,根據回傳值判斷是否存在問題,當然如果列舉較大,系統用戶數量又不是很多的情況下,可以嘗試注冊新用戶,利用新用戶的用戶名來測驗是否可以獲取到用戶資訊,
如果引數為一個固定的數字串時,遍歷數字串即可,這種情況下是系統對每個注冊用戶進行了一個用戶id的排序,在眾多的開源CMS上都有使用,當然這個字串也有可能是隨機,如果是隨機的,量不大的情況下可以采用遍歷的形式獲取,量較大可以利用burp的亂數爆破,或者同樣自己注冊賬戶來測驗,
基于功能物件ID的越權
舉個例子:
https://www.xxx.com/user1/userticket.php?user_order=100001
https://www.xxx.com/user1/userticket.php?user_order=49ba59ab
此問題大量存在于用戶訂單、購買、查詢等功能的商家CMS上,例如以上地址,如果user_order是訂單編號,那么我們可以嘗試遍歷訂單地址來查詢是否存在越權,如果編號并不是單純的訂單數字串,而是類似如上的編碼字串,相信自己的運氣的話可以嘗試某些編碼的情況,例如BASE64、MD5,猜測不到,或者不能明顯的看出來是如果做的處理,注冊新賬號重新下單,會是簡單方便的選擇,
基于未授權訪問的越權
舉個例子:
https://www.xxx.com/user1/[email protected]
在一些系統上登陸用戶后,可以看到類似如上的地址鏈接,可能你會覺得這個跟問題1類似,但是也有可能多一張問題情況,在非登陸的情況下仍然可以訪問到詳細資訊,如果可以,則證明后端對身份的效驗只是基于引數user,并沒有效驗用戶的session是否已登陸,此問題曾發現于一個系統后端支付訂單復核的功能中,問題可想而知,
基于功能地址的越權
舉個例子:
https://www.xxx.com/user/getuserinfo.php
如上地址,正常情況下,只訪問此后臺地址時,一般會跳轉到登陸地址,或者登陸后用來查看某個具體的功能,獲取資料的情況根據訪問的鏈接地址來,理論上此功能并不存在越權可能,因為沒有我們可以修改的引數,但是對權限及功能的限制可能只局限于用戶選單的限制,根據常用鏈接,可以猜測是否存在以下地址:
/getuserorder.php
/adduser.php
/deluser.php
/getalluser.php
/todetailpage.php
/ordercreate.php......
因為在絕大部分系統中,開發為了方便區別功能和頁面,通常會利用對應的英文來命名檔案,但這些檔案并不是任意用戶都可以訪問到的,所以可以猜測訪問地址是否英文的拼接來猜測路徑,對于此問題的快捷測驗是獲取一個高權限賬號,當然對于未授權測驗來說,很難實作,
基于介面身份的越權
https://www.xxx.com/user/userinfo.php
post:
{'userid':'10001','username':'name','userage':'18','usermobile':'18080808888'}
例如如上介面,修改用戶資訊,當我們點擊某個系統的修改自身資料時,會發送一個類似的json資料包,其中userid對應我們自己的用戶id,修改后,可以修改對應id的用戶資料,修改方式類似問題1,區別在于一個頁面可見,一個頁面不直觀可見,一個查詢,一個修改,需要配合其他越權查詢漏洞,或者賬號來識別是否修改成功,
0x03 如何修復
建議做一個過濾器,對權限進行全域校驗(每次呼叫某個介面時,可先對權限進行校驗),大體流程是:第一步清洗URL地址,并提取Api介面名稱;第二步從session中提取當前登錄用戶的userid;第三步提取當前用戶的角色id;第四步判斷當前用戶對應的角色是否有權限訪問當前Api介面(檢查垂直越權);最后判斷當前登錄用戶是否對目標物件有操作權限(檢查水平越權),
推薦使用JWT 驗證
參考:
http://blog.evalshell.com/2020/12/23/風炫安全web安全學習第三十八節課-越權漏洞演示與/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/246767.html
標籤:其他
