越權漏洞是比較常見的漏洞型別,越權漏洞可以理解為,乙個正常的使用者a通常只能夠對自己的一些資訊進行增刪改查,但是由於程式設計師的一時疏忽未對資訊進行增刪改查的時候沒有進行乙個判斷,判斷所需要操作的資訊是否屬於對應的使用者,可以導致使用者a可以操作其他人的資訊。
許可權攻擊可以分為水平許可權攻擊和垂直許可權攻擊。
水平許可權攻擊,也叫作訪問控制攻擊。web應用程式接收到使用者請求,修改某條資料時,沒有判斷資料的所屬人,或者在判斷資料所屬人時從使用者提交的表單引數中獲取了userid。導致攻擊者可以自行修改userid修改不屬於自己的資料。所有的更新語句操作,都可能產生這個漏洞。
顯而易見,越權操作會導致站點的資料不安全,使用者可以操作本不屬於自己操作範圍的資料。
我們來看看攻擊案例,web應用在修改使用者個人資訊時,從使用者提交的表單中獲取userid,執行修改操作:
表單中,將使用者的userid作為隱藏字段,提交給處理修改個人資訊的應用。
下面是修改個人資訊的後台**:
int userid=integer.valueof( request.getparameter("userid"));
string pass=request.getparameter("pass");
jdbcconnection conn = null;
try %>
攻擊者只需要猜中管理所有使用者的頁面url就可以越權操作了。
這種情況似乎很容易被忽略,包括我現在著手的乙個專案也是才發現這樣的乙個問題。那麼應該如何解決呢?其實也很容易。就是從使用者的加密認證cookie中獲取當前使用者id,並且在執行的sql語句中加入當前使用者id作為條件語句。由於cookie是加密的,所以攻擊者無法修改加密資訊。
int userid=integer.valueof( getuseridfromcookie(request));
string pass=request.getparameter("pass");
jdbcconnection conn = null;
try {
conn = new jdbcconnection();
object params = new object[2];
params[0] = pass;
params[1] = userid;
final string sql = "update user set pass=? where userid=?";
conn.execupdate(sql,params);
conn.closeconn();
**中通過getuseridfromcookie方法,從加密的cookie中獲取當前使用者的id,並加入判斷。
這種攻擊很容易防禦,只需要在每個頁面的載入之前進行許可權驗證即可。乙個普通的許可權系統,選單是通過資料庫中對應許可權和角色來進行字串拼接形成的,而不是靜態的通過在頁面上進行許可權判斷決定的。
web安全 平行越權和垂直越權
目錄 0x01 什麼是越權 0x02 越權測試過程 0x03 常見越權漏洞 國航某 可越權訪問其他訂單 涉及70w左右 暴風某站平行越權 使用者敏感資訊洩露 越權訪問漏洞指應用在檢查授權時存在紕漏,使得攻擊者在獲得低許可權使用者賬戶後,可以利用一些方式繞過許可權檢查,訪問或者操作到原本無權訪問的高許...
橫向越權 縱向越權安全漏洞
橫向越權 攻擊者嘗試訪問與他擁有相同許可權的使用者的資源 縱向越權 低級別攻擊者嘗試訪問高階別使用者的資源 橫向越權場景 1 在使用者忘記密碼重置密碼時,回答對了問題進入密碼重置階段時,如果知道其他使用者的使用者名稱,很容易改變此使用者的密碼,然後就可以進行越權訪問了。public serverre...
橫向越權與縱向越權安全漏洞
攻擊者嘗試訪問與他擁有相同許可權的使用者的資源例如乙個使用者a可以通過自己訂單號訪問自己的訂單詳情,同時使用者b在知道了a的訂單號之後,可以通過相同的介面訪問到a的訂單詳情,這是十分危險的。經典案例 使用者在修改密碼時會向伺服器傳送使用者名稱和新密碼,如果有惡意使用者截獲了這個修改密碼的介面,就可以...