天天看點

判斷sql注入漏洞的類型

轉載自:https://blog.csdn.net/D_pokemon/article/details/77899640

通常 Sql 注入漏洞分為 2 種類型:

  • 數字型
  • 字元型

其實所有的類型都是根據資料庫本身表的類型所産生的,在我們建立表的時候會發現其後總有個資料類型的限制,而不同的資料庫又有不同的資料類型,但是無論怎麼分常用的查詢資料類型總是以數字與字元來區分的,是以就會産生注入點為何種類型。

5.2.1 數字型判斷:

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

select * from <表名> where id = x

這種類型可以使用經典的

and 1=1

and 1=2

來判斷:

    1. Url 位址中輸入

      http://xxx/abc.php?id= x and 1=1

      頁面依舊運作正常,繼續進行下一步。
    1. Url 位址中繼續輸入

      http://xxx/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
           

沒有文法錯誤但是邏輯判斷為假,是以傳回錯誤。

我們再使用假設法:如果這是字元型注入的話,我們輸入以上語句之後應該出現如下情況:

  1. select * from <表名> where id = 'x and 1=1'

  2. select * from <表名> where id = 'x and 1=2'

查詢語句将 and 語句全部轉換為了字元串,并沒有進行 and 的邏輯判斷,是以不會出現以上結果,故假設是不成立的。

5.2.2 字元型判斷:

當輸入的參 x 為字元型時,通常 abc.php 中 SQL 語句類型大緻如下:

select * from <表名> where id = 'x'

這種類型我們同樣可以使用

and '1'='1

and '1'='2

來判斷:

    1. Url 位址中輸入

      http://xxx/abc.php?id= x' and '1'='1

      頁面運作正常,繼續進行下一步。
    1. Url 位址中繼續輸入

      http://xxx/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'
           

文法正确,但邏輯判斷錯誤,是以傳回正确。同學們同樣可以使用假設法來驗證。

--------------------- 本文來自 Daniel-0 的CSDN 部落格 ,全文位址請點選:https://blog.csdn.net/D_pokemon/article/details/77899640?utm_source=copy