風炫安全WEB安全學習第三十八節課 越權漏洞演示與講解php
越權漏洞的危害與影響主要是與對應業務的重要性相關,好比說某一頁面服務器端響應(不侷限於頁面返回的信息,有時信息在響應包中,頁面不必定能看見)中返回登陸名、登陸密碼、手機號、×××等敏感信息,若是存在平行越權,經過對用戶ID的遍歷,就能夠查看全部用戶的敏感信息,這也是一種變相的脫褲,並且很難被防火牆發現,由於這和正常的訪問請求沒有什麼區別,也不會包含特殊字符,具備十足的隱祕性。web
水平越權shell
水平越權指的是攻擊者嘗試訪問與他擁有相同權限的用戶的資源,怎麼理解呢?好比某系統中有我的資料這個功能,A帳號和B帳號均可以訪問這個功能,可是A帳號的我的信息和B帳號的我的信息不一樣,能夠理解爲A帳號和B帳號我的資料這個功能上具有水平權限的劃分。此時,A帳號經過攻擊手段訪問了B帳號的我的資料,這就是水平越權漏洞。json
垂直越權後端
權限ID不變,權限類型改變;如普通用戶可以使用管理員權限進行操做。如你登陸時,發現cookie中有一個roleID的角色參數,那麼能夠經過修改該ID爲1或者0,根據具體狀況來定,就可使用管理員權限了!安全
舉個例子:服務器
https://www.xxx.com/user1/userinfo.php?user_id=user1 https://www.xxx.com/user1/userinfo.php?user_id=10001
咱們登錄某個系統後,看到某些功能上獲取信息的方式相似於上連接時,能夠初步判斷獲取信息的方式爲根據user_id來獲對應的用戶信息,若是參數爲用戶名,咱們能夠手機用戶名字典來枚舉信息,根據返回值判斷是否存在問題。固然若是枚舉較大,系統用戶數量又不是不少的狀況下,能夠嘗試註冊新用戶,利用新用戶的用戶名來測試是否能夠獲取到用戶信息。cookie
若是參數爲一個固定的數字串時,遍歷數字串便可,這種狀況下是系統對每一個註冊用戶進行了一個用戶id的排序,在衆多的開源CMS上都有使用,固然這個字符串也有多是隨機,若是是隨機的,量不大的狀況下能夠採用遍歷的形式獲取,量較大能夠利用burp的隨機數爆破,或者一樣本身註冊帳戶來測試。session
舉個例子:ide
https://www.xxx.com/user1/userticket.php?user_order=100001 https://www.xxx.com/user1/userticket.php?user_order=49ba59ab
此問題大量存在於用戶訂單、購買、查詢等功能的商家CMS上,例如以上地址,若是user_order是訂單編號,那麼咱們能夠嘗試遍歷訂單地址來查詢是否存在越權。若是編號並非單純的訂單數字串,而是相似如上的編碼字符串,相信本身的運氣的話能夠嘗試某些編碼的狀況,例如BASE6四、MD5。猜想不到,或者不能明顯的看出來是若是作的處理,註冊新帳號從新下單,會是簡單方便的選擇。
舉個例子:
https://www.xxx.com/user1/user.php?user=user1@user.com
在一些系統上登錄用戶後,能夠看到相似如上的地址連接,可能你會以爲這個跟問題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。區別在於一個頁面可見,一個頁面不直觀可見,一個查詢,一個修改。須要配合其餘越權查詢漏洞,或者帳號來識別是否修改爲功。
建議作一個過濾器,對權限進行全局校驗(每次調用某個接口時,可先對權限進行校驗)。大致流程是:第一步清洗URL地址,並提取Api接口名稱;第二步從session中提取當前登陸用戶的userid;第三步提取當前用戶的角色id;第四步判斷當前用戶對應的角色是否有權限訪問當前Api接口(檢查垂直越權);最後判斷當前登陸用戶是否對目標對象有操做權限(檢查水平越權)。
推薦使用JWT
驗證
參考:
http://blog.evalshell.com/2020/12/23/風炫安全web安全學習第三十八節課-越權漏洞演示與/