一、概述
如果使用A用戶的權限去操作B用戶的數據,A的權限小於B的權限,如果能夠成功操作,則稱之為越權操作。 越權漏洞形成的原因是后台使用了不合理的權限校驗規則導致的。
一般越權漏洞容易出現在權限頁面(需要登錄的頁面)增、刪、改、查的的地方,當用戶對權限頁面內的信息進行這些操作時,后台需要對當前用戶的權限進行校驗,看其是否具備操作的權限,從而給出響應,而如果校驗的規則過於簡單則容易出現越權漏洞。
因此,在在權限管理中應該遵守:
1.使用最小權限原則對用戶進行賦權;
2.使用合理(嚴格)的權限校驗規則;
3.使用后台登錄態作為條件進行權限判斷,別動不動就瞎用前端傳進來的條件;
二、平行越權
A用戶和B用戶屬於同一級別用戶,但各自不能操作對方個人信息,,A用戶如果越權操作B用戶的個人信息的情況稱為平行越權操作。
1.首先打開pikachu中的over permission登錄
我們可以看到點擊提交會得到一個get請求
http://127.0.0.1:89/pikachu/vul/overpermission/op1/op1_mem.php?username=lucy&submit=點擊查看個人信息
分析get請求可以發現相當於我們把當前的用戶名提交給后台后台把對應的信息返回回來了。
我們可以將URL中修改username后的值后提交,獲取到用戶的個人信息,比如將Lucy改為Kobe
我們查看他的后台代碼:產生漏洞的原因是后台通過get請求獲取到當前登錄態的值后並沒有進行嚴謹的校驗權限對比,使得用戶可以越權獲取別的用戶的個人信息。
解決這個問題我們需要后台添加一個驗證,就是當我們提交用戶名給后台,后台需要驗證當前用戶名與提交用戶名是否相同。相同才返回結果給前台。
三.垂直越權
1.我們首先用超級管理員登錄:admin 123456
擊添加用戶,輸入用戶的信息后,點擊創建
創建成功后,打開burp suite,把抓取到的post請求的包發送到Repeater
在Repeater中,點擊Go后,可以看到顯示的信息是和pikachu頁面是一樣的
接下來回到pikachu頁面,點擊退出登錄,在bp中點擊Go后再點擊Follow redirection(跟隨重定向),可以看到bp顯示的是和pikachu頁面一樣的畫面,因為重定向之后,后台檢測到當前登陸態已經退出登錄
在pikachu頁面中登陸普通用戶的賬戶,可以看到普通管理員只有查看權限,並沒有添加或者修改用戶權限
uploading-image-268846.png
接下來打開burp suite,獲取普通用戶登陸后的get請求,把get請求獲取到的cookie復制下來
Cookie: PHPSESSID=rk8r3magr6d9sdd89g9q27kcng
接下來返回到pikachu頁面,點擊刷新,可以看到多出了一個用戶,說明存在着一個垂直越權漏洞,也就是說我們可以通過普通用戶去進行超級管理員的操作。
我們看一下登錄后的代碼:它會去判斷輸入的賬戶是否為管理員,如果是則進入管理員頁面,否則就進入普通用戶頁面
看添加用戶的源代碼,只是對當前用戶是否登錄進行判斷,沒有判斷登錄用戶是否有沒有當前請求的權限,這樣就構成垂直越權漏洞。
解決也是在這里添加一個判斷,判斷前端用戶是否有當前請求的權限。