邏輯漏洞(-)


  邏輯錯誤漏洞是指由於程序邏輯不嚴或邏輯太復雜,導致一些邏輯分支不能夠正常處理或處理錯誤,一般出現在任意密碼修改(沒有舊密碼驗證)、越權訪問、密碼找回、交易支付金額。

  一般挖掘邏輯漏洞有兩個重點:業務流程和HTTP/HTTPS請求篡改。

 

  繞過授權驗證:

  1. 水平越權:就是相同級別(權限)的用戶或者同一角色不同的用戶之間,可以越權訪問、修改或者刪除的非法操作。如果出現次漏洞,那么將可能會造成大批量數據泄露,嚴重的甚至會造成用戶信息被惡意篡改。

    public String execute(){

      int id = Interger.parseInt(request.getParameter("userId"));

      String password = request.getParameter("password");

      String password2 = request.getParameter("password2");

      if (!("".equals(password) || ("".equals(password2))){

        return ERROR;

      }

      if (!password.equals(password2)){

        return ERROR;

      }

 

      User u = new UserBiz().findUserById(id);

      u.setPassword(password);

      boolean flag = new UserBiz().saveOrUpdate(u);  // 更新對象

      if (flag){

        return SUCCESS;

      }

      else{

        return ERROR;

      }

  }

  通過上面代碼分析,沒有任何錯誤,但是在邏輯上卻存在嚴重的漏洞,假設有兩個用戶,一個用戶名Admin,UserId是1,另一個用戶名是Guest,UserId為2,Guest進行密碼修改時,攔截HTTP請求,然后將UserId修改為1,如果存在水平越權操作,那么Admin的密碼就會被修改為Guest修改的密碼。這樣就可以獲取Admin的用戶權限。

  在修改密碼這樣的問題,一樣加上舊密碼與修改密碼來防范。

 

 垂直越權:垂直越權是不同級別之間或不同角色之間的越權;垂直越權又別分為向上越權與向下越權。比如,某些網站,像發布文章、刪除文章等操作屬於管理員該做的事情。假設一個匿名用戶也可以做相同的事情,這就叫做向上越權;向下越權是一個高級用戶可以訪問低級用戶信息(這也是不行的,這回暴漏用戶的隱私)。

 

  解決向上越權是比較容易處理的事情,如果管理員表與普通用戶是同一張數據庫表,就必須要存在權限驗證字段,權限驗證字段用來區分是否為管理員。

  如果不在同一張表,在過濾器中直接取出管理員信息即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM