sql注入原理,利用與防護


一、sql注入原理

注入攻擊的本質就是把用戶輸入的數據當作代碼來執行。所以注入攻擊有兩個必要條件

1.用戶能夠控制的輸入。

2.原本程序要執行的代碼,拼接了用戶輸入的數據。

二、sql注入分類

按照請求方法可以分為:GET請求、POST請求

按照參數類型可以分為:數字型、字符型

按照數據返回結果分為:回顯、報錯、盲注

盲注又分為:布爾盲注、延時盲注

三、sql注入測試方法

一般測試語句:

or 1=1 --+ 'or 1=1 --+ "or 1=1 --+
)or 1=1 --+ ')or 1=1 --+ ")or 1=1--+
"))or 1=1 --+    

 

 

 

ps: #  url編碼后為 %23 ,可以用 --+ 替換

常用測試函數:

函數名 作用
version() 數據庫版本
user() 數據庫用戶名
database() 數據庫名
@@datadir() 數據庫路徑
@@version_compile_os 操作系統版本

 

 
 
 
 
 

測試流程:

這里是在本地搭建的一個 sqli 的靶場,用來自己做練習,感覺還不錯。

文章最后附帶的有鏈接,小伙伴們可以自行下載。

1.檢測sql注入類型

 

 直接在url處添加 單引號 發現網站報錯、說明sql語句出錯,就可能存在注入

2.閉合sql語句

  一般有兩種方法:

  a.使用 # 號,把本行 # 號后面的內容注釋調,這樣就可以避免sql語句出錯,使我們構造的 payload 可以正確執行

  b.根據sql語句,用符號進行閉合

 

 這里就直接用 # 進行注釋了,可以看到網站的頁面回復了正常

3.探測字段列數

假設列數為 4 進行測試,頁面出錯,說明小於 4 列

然后列數為 3 進行測試,頁面正常,說明存在 3 列

 

4.查看顯示位,進行測試

 

 

 可以看到數據庫的版本信息,說明存在sql注入漏洞

 

四、sql注入防護技巧

數據與代碼分離

對用戶輸入的數據進行嚴格過濾

對特殊字符進行轉義

使用預編譯語句

使用安全函數

檢查數據類型


免責聲明!

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



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