最為經典的單引號判斷法:
在引數後面加上單引號,比如:
://***/abc.php?id=1'如果頁面返回錯誤,則存在 sql 注入。
原因是無論字元型還是整型都會因為單引號個數不匹配而報錯。(如果未報錯,不代表不存在 sql 注入,因為有可能頁面對單引號做了過濾,這時可以使用判斷語句進行注入。)
其實所有的型別都是根據資料庫本身表的型別所產生的,在我們建立表的時候會發現其後總有個資料型別的限制,而不同的資料庫又有不同的資料型別,但是無論怎麼分常用的查詢資料型別總是以數字與字元來區分的,所以就會產生注入點為何種型別。
數字型判斷
當輸入的引數 x 為整型時,通常 abc.php 中 sql 語句型別大致如下:
select
*from
《表名》
where id = x
這種型別可以使用經典的 and 1=1 和 and 1=2 來判斷:
url 位址中繼續輸入 http://***/abc.php?id= x and 1=2 頁面執行錯誤,則說明此 sql 注入為數字型注入。
原因如下:
當輸入 and 1=1 時,後台執行 sql 語句:
select
*from
《表名》
where id = x and1=
1
沒有語法錯誤且邏輯判斷為正確,所以返回正常。
當輸入 and 1=2 時,後台執行 sql 語句:
select
*from
《表名》
where id = x and1=
2
沒有語法錯誤但是邏輯判斷為假,所以返回錯誤。
我們再使用假設法:如果這是字元型注入的話,我們輸入以上語句之後應該出現如下情況:
select
*from
《表名》
where id =
'x and 1=1'
select
*from
《表名》
where id =
'x and 1=2'
查詢語句將 and 語句全部轉換為了字串,並沒有進行 and 的邏輯判斷,所以不會出現以上結果,故假設是不成立的。
字元型判斷
當輸入的引數 x 為字元型時,通常 abc.php 中 sql 語句型別大致如下:
select
*from
《表名》
where id =
'x'
這種型別我們同樣可以使用 and 『1』='1 和 and 『1』='2來判斷:
url 位址中繼續輸入 http://***/abc.php?id= x』 and 『1』='2 頁面執行錯誤,則說明此 sql 注入為字元型注入。
原因如下:
當輸入 and 『1』='1時,後台執行 sql 語句:
select
*from
《表名》
where id =
'x'and
'1'=
'1'
語法正確,邏輯判斷正確,所以返回正確。
當輸入 and 『1』='2時,後台執行 sql 語句:
select
*from
《表名》
where id =
'x'and
'1'=
'2'
語法正確,但邏輯判斷錯誤,所以返回錯誤。 sql注入基礎
mysqli 轉義字串函式 mysqli real escape string db,string mysqli 預編譯 拼裝sql語句 把要進行的操作的sql語句提前寫好,把需要改變的元素變成佔位符 select id,username from user where user name and ...
SQL注入基礎
為了堅持而堅持,是撐不了多久的。sql注入就是指web應用程式對使用者輸入資料的合法性沒有判斷,前端傳入後端的引數是攻擊者可控的,並且引數代入資料庫查詢,攻擊者通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。sql注入漏洞的產生要滿足兩...
SQL注入基礎
函式名稱 系統使用者名稱 system user 系統使用者名稱 user 使用者名稱current user 當前使用者名稱 session user 連線資料庫的使用者名稱 database 資料庫名 version 資料庫版本 datadir 資料庫路徑 basedir 資料庫安裝路徑 ver...