SQL 注入詳解 SQL 注入詳解


SQL 注入原理

SQL注入攻擊指的是通過構建特殊的輸入作為參數傳入Web應用程序,而這些輸入大都是SQL語法里的一些組合,通過執行SQL語句進而執行攻擊者所要的操作,其主要原因是程序沒有細致地過濾用戶輸入的數據,致使非法數據侵入系統

SQL 注入分類
1. 數字型注入
當輸入的參數為整型時,則有可能存在數字型注入漏洞。

假設存在一條 URL 為:HTTP://www.aaa.com/test.php?id=1
可以對后台的 SQL 語句猜測為:
SELECT * FROM table WHERE id=1

判斷數字型漏洞的 SQL 注入點
① 先在輸入框中輸入一個單引號 '
這樣的 SQL 語句就會變為:
SELECT * FROM table WHERE id=1',
不符合語法,所以該語句肯定會出錯,導致腳本程序無法從數據庫獲取數據,從而使原來的頁面出現異常。

② 在輸入框中輸入 and 1 = 1
SQL語句變為:
SELECT * FROM table WHERE id=1 and 1 = 1
語句正確,執行正常,返回的數據與原始請求無任何差異。

③ 在數據庫中輸入 and 1 = 2
SQL 語句變為:
SELECT * FROM table WHERE id=1 and 1 = 2
雖然語法正確,語句執行正常,但是邏輯錯誤,因為 1 = 2 為永假,所以返回數據與原始請求有差異。

如果以上三個步驟全部滿足,則程序就可能存在數字型 SQL 注入漏洞

2. 字符型注入
當輸入參數為字符串時,則可能存在字符型注入漏洞。數字型與字符型注入最大的區別在於:數字型不需要單引號閉合,而字符型一般需要使用單引號來閉合

字符型注入最關鍵的是如何閉合 SQL 語句以及注釋多余的代碼

假設后台的 SQL 語句如下:
SELECT * FROM table WHERE username = 'admin'

判斷字符型漏洞的 SQL 注入點:
① 還是先輸入單引號 admin' 來測試
這樣的 SQL 語句就會變為:
SELECT * FROM table WHERE username = 'admin''。
頁面異常。

② 輸入:admin' and 1 = 1 --
注意:在 admin 后有一個單引號 ',用於字符串閉合,最后還有一個注釋符 --(兩條杠后面還有一個空格!!!)。
SQL 語句變為:
SELECT * FROM table WHERE username = 'admin' and 1 = 1 --
頁面顯示正確。

③ 輸入:admin' and 1 = 2 --
SQL 語句變為:
SELECT * FROM table WHERE username = 'admin' and 1 = 2 --
頁面錯誤。

滿足上面三個步驟則有可能存在字符型 SQL 注入。

3. 其他類型
其它類型比如Cookie 注入、POST 注入、延時注入等。

POST注入:注入字段在 POST 數據中
Cookie注入:注入字段在 Cookie 數據中
延時注入:使用數據庫延時特性注入
搜索注入:注入處為搜索的地方
base64注入:注入字符串需要經過 base64 加密


參考:https://blog.csdn.net/weixin_43915762/article/details/87909751


免責聲明!

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



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