如何判斷是字符型注入還是數字型注入


字符型注入和數字型注入區別#

通常 Sql 注入漏洞分為 2 種類型
數字型
字符型
其實所有的類型都是根據數據庫本身表的類型所產生的,在我們創建表的時候會發現其后總有個數據類型的限制,而不同的數據庫又有不同的數據類型,但是無論怎么分常用的查詢數據類型總是以數字與字符來區分的,所以就會產生注入點為何種類型。

數字型判斷##

當輸入的參 x 為整型時,通常 abc.php 中 Sql 語句類型大致如下:

select * from <表名> where id = x

這種類型可以使用經典的 and 1=1 和 and 1=2 來判斷:

Url 地址中輸入 www.xxx.com/abc.php?id= x and 1=1

頁面依舊運行正常,繼續進行下一步。

Url 地址中繼續輸入 www.xxx.com/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

沒有語法錯誤但是邏輯判斷為假,所以返回錯誤。

我們再使用假設法:

如果這是字符型注入的話,我們輸入以上語句之后應該出現如下情況:

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 地址中輸入 www.xxx.com/abc.php?id= x' and '1'='1

頁面運行正常,繼續進行下一步。

Url 地址中繼續輸入 www.xxx.com/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'

語法正確,但邏輯判斷錯誤,所以返回正確。


免責聲明!

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



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