1. 首先了解SQL注入的原理:
SQL Injection:就是透過把SQL指令插入到Web表單遞交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的SQL指令。
具體來說,它是利用現有應用程序,將(惡意的)SQL命令注入到後台資料庫引擎執行的能力,它可以透過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的資料庫,而不是依照設計者意圖去執行SQL語句。例如先前的許多影視網站外洩VIP會員密碼大多就是透過WEB表單遞交查詢字元暴出的,這類表單特別容易受到SQL注入式攻擊. (來自百度)
也就是說網站頁麵包含與資料庫互動的部分(例如新聞網站的查找功能),而當在網站輸入資料信息,資料資訊被程式化後傳入資料庫執行的過程中,網站的開發人員沒有對這些傳入資料庫的對應資料做安全處理(例如過濾特殊字元、編碼等),導致駭客可以將惡意程式碼(也就是包含非法SQL語句的SQL指令)透過網站前段傳入資料庫,並在資料庫中執行這些具有駭客目的的SQL語句,造成資料庫資訊外洩、損壞等後果。
2. SQL注入的一般分類
依照注入點型別來分類
(1)數字型注入點
許多網頁連結有類似的結構 http://www.example.com/12.php?id=1 基於此種形式的注入,一般被叫做數字型注入點,緣由是其註入點id 類型為數字,在大多數的網頁中,諸如查看用戶個人信息,查看文章等,大都會使用這種形式的結構傳遞id等信息,交給後端,查詢出數據庫中對應的訊息,回給前台。這一類的SQL 語句原型大概為 select * from 表名where id=1 若存在註入,我們可以建構出類似與如下的sql注入語句進行爆破:select * from 表名where id=1 and 1=1
(2)字元型注入點
網頁連結有類似的結構 http://xwww.example.com/users.php?user=admin 這種形式,其註入點user 類型為字元類型,所以稱為字元型注入點。這一類的 SQL 語句原型大概為 select * from 表名 where user='admin' 值得注意的是這裡相比於數字型注入類型的sql語句原型多了引號,可以是單引號或者是雙引號。若存在註入,我們可以構造出類似與如下的sql注入語句進行爆破:select * from 表名 where user='admin' and 1=1 ' 我們需要將這些煩人的引號給處理掉。
(3)搜尋型注入點
這是一類特殊的注入型別。這類注入主要是指在進行資料搜尋時沒過濾搜尋參數,一般在連結位址中有 "keyword=關鍵字" 有的沒有顯示在的連結位址裡面,而是直接透過搜尋框表單提交。此類注入點提交的SQL 語句,其原形大致為:select * from 表名where 字段like '%關鍵字%' 若存在註入,我們可以構造出類似與如下的sql注入語句進行爆破:select * from 表名where 字段like '%測試%' and '%1%'='%1%'
#3. 如可判斷是否存在SQL注入(小白總結,僅供參考)
簡單點講就是:
所有的輸入只要和資料庫進行互動的,都有可能觸發SQL注入
SQL注入依照數據提交的方式可分為:
(1)GET 注入:提交資料的方式是GET , 注入點的位置在GET 參數部分。例如有這樣的一個連結http://xxx.com/news.php?id=1 , id 是注入點。
(2)POST 注入:使用 POST 方式提交數據,注入點位置在 POST 資料部分,常發生在表單中。
(3)Cookie 注入:HTTP 請求的時候會帶上客戶端的 Cookie, 注入點存在 Cookie 當中的某個欄位中。
(4)HTTP 頭部注入:注入點在 HTTP 請求頭部的某個欄位中。例如存在 User-Agent 字段中。嚴格講的話,Cookie 其實應該也是算頭部注入的一種形式。因為在 HTTP 請求的時候,Cookie 是頭部的一個欄位。
依照提交方式分類後,你會發現SQL注入最長發生的位置在連結位址、資料參數、cookie資訊以及HTTP請求頭等位置。
了解了可能存在SQL注入的位置,然後我們需要判斷在這些位置上是否能夠觸發SQL注入,最簡單的方式就是在對應位置輸入and 1=1 (以及and 1=1 的變換形式)來判斷。對於不同的注入點類型,例如字元型需要適當添加單引號,而對於數位型的注入點則不需要。
4. SQL注入的高階分類(依照執行效果分類)
# (1)基於布林的盲注:即可以根據回頁來判斷條件真假的注入。
(2)基於時間的盲注:即不能根據頁面返回內容判斷任何信息,用條件語句查看時間延遲語句是否執行(即頁面返回時間是否增加)來判斷。
(3)基於報錯注入:即頁面會傳回錯誤訊息,或直接將注入的語句的結果回傳在頁面中。
(4)聯合查詢注入:可以使用union的情況下的注入。
(5)堆疊查詢注入:可以同時執行多條語句的注入。
(6)寬位元組注入:利用gbk是多位元組的編碼,兩個位元組代表一個漢字
本文僅供大家學習。切勿惡意攻擊他人網站。
推薦教學:SQL線上影片教學
#以上是sql注入詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!