越權漏洞介紹和修復參考

2021-10-07 08:41:54 字數 2566 閱讀 6211

0x00 背景

上圖,選擇orderid作為引數, 越權遍歷爬取其他人的資訊,類似選擇某個引數或者某個介面,通過拼接或者篡改資料的id進行請求其他id的內容,並且返回的資料存在敏感資訊,簡稱為越權漏洞。

惡意攻擊者可以利用漏洞攻擊做到:

水平越權,可以訪問同級使用者的身份證、手機號碼、納稅資訊等

垂直越權,可以訪問管理員的敏感資訊等。

修復思路

1、針對具有不同許可權的使用者,必須在ui遮蔽未授權的功能導航,必須在伺服器端對訪問的url進行許可權檢查,防止縱向越權訪問;

2、對於使用者資源的訪問,必須使用非直接物件引用、或訪問控制檢查,防止使用者訪問未授權的資源,防範橫向越權訪問。

0x01 修復思路

建議做乙個過濾器,對許可權進行全域性校驗(每次呼叫某個介面時,可先對許可權進行校驗)。大體流程是:第一步清洗url位址,並提取api介面名稱;第二步從session中提取當前登入使用者的userid;第三步提取當前使用者的角色id;第四步判斷當前使用者對應的角色是否有許可權訪問當前api介面(檢查垂直越權);最後判斷當前登入使用者是否對目標物件有操作許可權(檢查水平越權)。

0x02 **修復

首先是獲取url位址中的api介面名稱,這裡對url位址進行了一次url解碼,還是存在繞過的風險,因為當使用者%2523時,就可能繞過。

public static

string

getapiname(

string

url) throws exception

return

null;}

獲取userid時,建議從session中獲取,而不是在cookie中再新建乙個userid欄位,用於標識使用者身份。

從session中提取userid後,就要查詢與之對應的角色id

//userid為使用者id,roleid為角色id,通過userid獲取roleidpublic static int getroleid(int userid)

}catch

(exception e)

return

roleid;}

校驗垂直越權時,判斷當前使用者是否對指定的介面有訪問許可權,u_roleid為使用者名稱對應的角色id,a_roleid為api介面對應的角色id,api_name為使用者嘗試訪問的api介面名稱(這裡在系統架構評審,安全設計階段,就要檢查資料庫的許可權表設定時,api介面是否有指定對應的角色id)

publicstaticbooleancheckupprivilege

(int

userid, string api_name)

else}

}catch

(exception e)

returnfalse;}

最後再判斷一下是否是水平越權,s_userid為當前登入使用者的userid,p_userid為目標物件對應的userid,比如對訂單資訊進行操作時,可以先通過訂單號提取與之對應的userid,再進行判斷(當然,訂單表,在系統架構評審,安全設計階段,就要檢查訂單號是否有指定對應的使用者id)。

publicstaticbooleanchecklevelprivilege

(int

s_userid,int

p_userid)

else}

防止越權訪問任意檔案:

string permissionmask = system.getproperty("filemask"):

path path = testfile.topath():

string validpermissions = :

for (string validpermissions: validpermissions)

...}

上述**可以通過允許使用者設定檔案許可權來防止此類檔案許可權操縱。如果必須確保使用者擁有能夠設定檔案的許可權,則可以採用一種間接方式,即建立乙個允許使用者進行指定的合法檔案許可權列表,並且僅允許使用者從列表中進行選擇。通過這種方式,使用者提供的輸入將不會直接更改檔案許可權

防止越權刪除某引數的資料

public object remove(@pathvariable long addrid)

修復ICMP許可權許可和訪問控制漏洞

解決方案 配置防火牆或過濾路由器以阻止傳出的icmp資料報。阻止型別13或14和 或 0的icmp資料報 關閉ping,使得其他主機ping自己的主機時得不到回應包 echo 1 proc sys net ipv4 icmp echo ignore all能ping通 echo 0 proc sys...

驗證碼的三個常見漏洞和修復方法

把驗證碼儲存在cookie中 一般來說,我們會把驗證碼的值用session儲存起來,通過對比使用者提交的驗證碼和session中的驗證碼,就可以知道輸入是否正確。由於session會占用伺服器資源,我曾經想過是否可以把驗證碼的值加密後儲存在cookie中。不過事實證明,這只是異想天開罷了。假設驗證碼...

慢霧區披露以太坊代幣「假充值」漏洞細節和修復方案

今日塊訊 www.cppcns.com 7 月 11 日訊息7 月 9 日,慢霧區 發布以太坊代幣 假充值 漏洞攻擊預警,今天慢霧安全團隊正式披露以太坊代幣 假充值 漏洞細節及修復方案。根據慢霧區訊息,以太坊代幣 假充值 漏洞影響了相關中心化交易所 中心化錢包 代幣合約等,其中 3619 份代幣合約...