<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    通過某大學生的的畢業設計復習java-sql審計

    VSole2021-12-01 14:58:29

    sql注入原理:業務端代碼從客戶端接收到惡意payload之后沒有進行過濾直接進行sql語句拼接并且執行造成sql注入

    本人正在拜讀一本代碼審計的書感覺非常的棒,剛剛好室友在挑戰自己,就順便整理一下知識點!

    1.原生jdbc連接無過濾造成sql注入

    我們看下面這段代碼,首先從客戶端接收傳進來的id的值拼接成sql語句,然后Statement去編譯拼接的sql語句,將結果傳給rs之后讀出,這里沒有對傳進來的值進行任何過濾,嘗試去構造sql語句造成注入

    String sql = "select * from user where id ="+req.getParameter("id");       PrintWriter out = resp.getWriter();       out.println("Statement Demo");       out.println("SQL: "+sql);       try {           Statement st = conn.createStatement();           ResultSet rs = st.executeQuery(sql);           while (rs.next()){               out.println("<br>Result: "+ rs.getObject("name"));          }      } catch (SQLException throwables) {           throwables.printStackTrace();      }
    

    正常訪問

    構造測試payload進行測試,可以看到這邊是執行了構造過的payload,返回了開發者不想讓我們看到的內容

    2.原生jdbc預編譯開發失誤導致sql注入

    上面第一種存在sql注入的情況是因為每次執行都會將sql語句進行編譯在數據庫中執行,為了防止sql注入,可以使用prepareStatement進行預編譯sql語句,使用占位符來傳可改變的值,但是因為sql語句已經編譯過,所以按道理來說這里傳進來的值只會被當作字符串數據處理不作為sql語句的一部分,傳進來的值不參與編譯也就是不會在sql里執行,但是開發者也可能出錯就是在使用prepareStatement時仍然使用sql拼接而不是用占位符或者在預編譯之后再次執行sql語句!

    我們首先看一下不存在sql注入的代碼,使用問號占位符,預編譯sql語句,從下面第二張圖可以看到這時候sql語句是一個問號而我們傳進去的值不在數據庫中運行并且沒有返回結果的!可以比較好的防止sql注入,這時候我們來講講為什么預編譯可以防止sql注入,當我們sql執行的時候大致會經歷幾個階段分別是編譯--優化--緩存--執行,當使用prepareStatement時,他是將上述的步驟已經執行過了,將結果放到了緩存當中,用戶的輸入只作為數據進行填充而不是sql的一部分,然后服務器從緩存中獲得已經編譯之后的語句,替換掉用戶輸入的數據執行以達到防止sql注入的目的!

    String sql = "select * from user where id = ?";       PrintWriter out = resp.getWriter();       out.println("prepareStatement Demo");       out.println("SQL: "+sql);       try {           PreparedStatement pst = conn.prepareStatement(sql);           pst.setString(1,req.getParameter("id"));           ResultSet rs = pst.executeQuery();           while (rs.next()){               out.println("<br>Result: "+ rs.getObject("id"));          }
    image-20211107193812360
    

    看了安全代碼,我們看以下預編譯依舊存在問題的代碼

    雖然使用預編譯但是sql語句依舊是拼接的!就會造成sql注入,看第一行,開發者忘記使用占位符導致sql語句依舊是拼接進去的

      String sql = "select * from user where id ="+req.getParameter("id");       PrintWriter out = resp.getWriter();       out.println("prepareStatement Demo");       out.println("SQL: "+sql);       try {           PreparedStatement pst = conn.prepareStatement(sql);           ResultSet rs = pst.executeQuery();           while (rs.next()){               out.println("<br>Result: "+ rs.getObject("id"));          }      } catch (SQLException throwables) {           throwables.printStackTrace();      }
    

    3.分析mybatis框架類sql注入的情況

    使用mybatis的好處是將sql整合到一個地方避免代碼中出現大量的sql語句并且其接近原生sql。比較靈活,但是當xml里的sql語句是用$做占位符時,sql語句依舊是拼接而成的,這時候便會存在sql注入

    select * from user1 where name = ${name}
    

    下圖可以看到傳進來的值已經被執行了

    4.審計室友的畢業設計

    搭好室友的畢業設計之后,簡單看了一下,這是一個商城后臺管理系統,SSM框架的,然后找了一下入口點,發現只有登錄界面是開放的入口。其他的地方權限都做了token驗證,然后看他登錄是怎么寫的

     @RequestMapping("/login")   public String login(User user)  {       if (userService.login(user)==1)      {
               return "head";      }       else {           return "login";      }  }
    

    看看上面寫的,就很簡單粗暴,然后就跟進去看server層里看看寫了什么判斷邏輯沒有。

      @Override   public int login(User user) {       return userMapper.login(user);  }
    

    看了一下也沒問題,繼續往下走,發現室友mybatis里的sql全部是使用$拼接的!這不就成了么

     <!--    登陸驗證-->   <select id="login" parameterType="user" resultType="java.lang.Integer">       select count(*)       from user       where user_name = '${userName}'         and password = '${password}'   </select>
    

    根據一開始controller里寫的,是判斷返回值等于1,然后就可以登錄后臺,這時候就可以構造sql讓返回值等于1!

    然后他所有的sql都是使用$,存在大量的sql注入,以此說明了讀書還是要認真!不要老聽老頭過時的技術!自己要有思考!

    推薦實操:SQL注入進階

    PC端練習地址:http://mrw.so/6eK95U

    在掌握了基本的注入手段后。我們嘗試繞過各種針對SQL注入的防護,并繼續注入。

    sql注入sql練習
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    Brute Force 是暴力破解的意思,是指黑客利用窮舉工具并配合合理的密碼字典,來猜解用戶的密碼。這里主要介紹Burp Suite工具,與DVWA的Brute Force模塊。在DVWA中打開Brute Force模塊,如圖1所示。
    本篇文章是MongoDB數據庫信息泄露漏洞復現,記錄了實際中常見的MongoDB數據庫未授權訪問漏洞并如何使用,主要分為七個部分:MongoDB簡介、MongoDB安裝、MongoDB基本操作、MongoDB相關工具使用、MongoDB漏洞復現、MongoDB實戰和MongoDB防御措施。
    干貨 | 6款漏掃工具
    2022-04-04 07:23:37
    幾款比較好用的漏洞掃描工具。
    SQL 注入漏洞一直以來備受大家關注,雖然沒有十年前那么多,但是還是有非常多的線上系統存在這樣的安全問題,如今數據安全問題越來越受重視,而 SQL 注入漏洞能直接影響企業的數據安全。對于初學者而言,如果想學習相關技術以及鍛煉漏洞的測試和利用,有哪些靶場可以使用呢?今天給大家整理了幾個關于 SQL 注入漏洞靶場的項目和線上環境。
    針對DVWA編寫一個用于輔助SQL注入的工具
    sql注入原理:業務端代碼從客戶端接收到惡意payload之后沒有進行過濾直接進行sql語句拼接并且執行造成sql注入本人正在拜讀一本代碼審計的書感覺非常的棒,剛剛好室友在挑戰自己,就順便整理一下知識點!看了一下也沒問題,繼續往下走,發現室友mybatis里的sql全部是使用$拼接的!
    VuCSA,全稱為Vulnerable Client-Server Application,即包含安全漏洞的客戶端-服務器應用程序,該工具主要為安全學習而設計,廣大研究人員可以利用VuCSA來學習、研究和演示如何對非HTTP厚客戶端執行安全滲透測試。該工具基于Java語言開發,并提供了JavaFX圖形化用戶界面。=
    XML外部實體注入
    2022-07-28 22:32:56
    0x01:簡單了解XMLXML 指可擴展標記語言。XML的特點及作用:特點:1. xml與操作系統、編程語言的開發平臺都無關
    漏洞及滲透練習平臺 數據庫注入練習平臺 花式掃描器 信息搜集工具 WEB工具 windows域滲透工具 漏洞利用及攻擊框架 漏洞POC&EXP 中間人攻擊及釣魚 密碼pj 二進制及代碼分析工具 EXP編寫框架及工具 隱寫相關工具 各類安全資料 各類CTF資源 各類編程資源 Python
    sql注入已經出世很多年了,對于sql注入的概念和原理很多人應該是相當清楚了,SSTI也是注入類的漏洞,其成因其實是可以類比于sql注入的。BladeBlade 是 Laravel 提供的一個既簡單又強大的模板引擎。它不是面向最終用戶的,而是一個Java類庫,是一款程序員可以嵌入他們所開發產品的組件。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类