pikachu靶場之越權漏洞(Over Permission)
概述
如果使用A使用者的許可權去操作B使用者的資料,A的許可權小於B的許可權,如果能夠成功操作,則稱之為越權操作。 越權漏洞形成的原因是後臺使用了 不合理的許可權校驗規則導致的。
由於沒有使用者許可權進行嚴格的判斷,導致低許可權的賬號(比如普通使用者)可以去完成高許可權賬號(比如超級管理員)範圍內的操作。
一般越權漏洞容易出現在許可權頁面(需要登入的頁面)增、刪、改、查的的地方,當用戶對許可權頁面內的資訊進行這些操作時,後臺需要對 對當前使用者的許可權進行校驗,看其是否具備操作的許可權,從而給出響應,而如果校驗的規則過於簡單則容易出現越權漏洞。
因此,在在許可權管理中應該遵守:
1.使用最小許可權原則對使用者進行賦權;
2.使用合理(嚴格)的許可權校驗規則;
3.使用後臺登入態作為條件進行許可權判斷,別動不動就瞎用前端傳進來的條件;
平行越權:A使用者和B使用者屬於同一級別使用者,但各自不能操作對方個人資訊,,A使用者如果越權操作B使用者的個人資訊的情況稱為平行越權操作。
垂直越權:A使用者許可權高於B使用者,B使用者越權操作A使用者的許可權的情況稱為垂直越權。
越權漏洞屬於邏輯漏洞,是由於許可權校驗的邏輯不夠嚴謹導致的。
每個應用系統其使用者對應的許可權是根據其業務功能劃分的,而每個企業的業務又都是不一樣的。
因此越權漏洞很難通過掃描工具發現,往往需要通過手動進行測試。
水平越權
在pikachu靶場中,點選右上角的“點一下提示”可以看到賬戶和密碼
登陸頁面成功後,點選檢視個人資訊,頁面就出現了個人的資訊
通過bp抓包,可以看到每次點選檢視個人資訊,他就通過get請求提交到後臺,而get請求中,他是把當前的使用者名稱傳到後臺的。接下來測試修改使用者名稱後提交,看是否存在漏洞。
把請求傳送到Repeater,修改username的值為kobe,提交後,可以看到獲取了kobe這個使用者的個人資訊,說明存在著一個越權漏洞!
或者直接在pikachu頁面的URL中修改username的值後提交,獲取到使用者的個人資訊
檢視原始碼分析漏洞產生原因:通過程式碼可以看到後臺通過get請求獲取到當前登入態的值後並沒有進行嚴謹的校驗許可權對比(比如傳進來的值是kobe,通過校驗後應該獲取的是kobe的資訊)
垂直越權
點選pikachu靶場右上角的提示,可以看到超級管理員和普通使用者的賬戶密碼
輸入超級管理員的賬號密碼,登陸成功後,可以看到使用者的資訊
點選新增使用者,輸入使用者的資訊後,點選建立
建立成功後,開啟burp suite,把抓取到的post請求的包傳送到Repeater
在Repeater中,點選Go後,可以看到顯示的資訊是和pikachu頁面是一樣的
接下來回到pikachu頁面,點選退出登入,在bp中點選Go後再點選Follow redirection(跟隨重定向),可以看到bp顯示的是和pikachu頁面一樣的畫面,因為重定向之後,後臺檢測到當前登陸態已經退出登入
在pikachu頁面中登陸普通使用者的賬戶,可以看到普通管理員只有檢視許可權,並沒有新增或者修改使用者許可權
接下來開啟burp suite,獲取普通使用者登陸後的get請求,把get請求獲取到的cookie複製下來
Cookie: PHPSESSID=6n3juhvf93hh91p0n0icqu6mre
把之前bp獲取到的超級管理員的post請求傳送到Repeater中
開啟Repeater,把Repeater中的cookie替換成我們複製儲存下來的普通使用者的cookie後提交
接下來返回到pikachu頁面,點選重新整理,可以看到多出了一個使用者,說明存在著一個垂直越權漏洞,也就是說我們可以通過普通使用者去進行超級管理員的操作。
檢視原始碼分析漏洞原因:
首先檢視登陸頁面的原始碼,它會去判斷輸入的賬戶是否為管理員,如果是則進入管理員頁面,否則就進入普通使用者頁面
新增使用者的原始碼中,登入態只是通過$_SESSION去取到賬戶和密碼,只是去判斷當前的使用者有沒有登陸,但它沒有去驗證當前使用者的許可權,導致存在垂直越權漏洞!