SQL注入基礎

2021-10-05 07:02:02 字數 1879 閱讀 3731

最為經典的單引號判斷法:

在引數後面加上單引號,比如:

://***/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...