來源:實驗樓
最為經典的單引號判斷法: 在參數后面加上單引號,比如:
http://xxx/abc.php?id=1'
如果頁面返回錯誤,則存在 Sql 注入。 原因是無論字符型還是整型都會因為單引號個數不匹配而報錯。
通常 Sql 注入漏洞分為 2 種類型:
- 數字型
- 字符型
數字型判斷:
當輸入的參 x 為整型時,通常 abc.php 中 Sql 語句類型大致如下: select * from <表名> where id = x
這種類型可以使用經典的 and 1=1
和 and 1=2
來判斷:
-
- Url 地址中輸入
http://xxx/abc.php?id= x and 1=1
頁面依舊運行正常,繼續進行下一步。
- Url 地址中輸入
-
- Url 地址中繼續輸入
http://xxx/abc.php?id= x and 1=2
頁面運行錯誤,則說明此 Sql 注入為數字型注入。
- Url 地址中繼續輸入
原因如下: 當輸入 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 地址中輸入
http://xxx/abc.php?id= x' and '1'='1
頁面運行正常,繼續進行下一步。
- Url 地址中輸入
-
- Url 地址中繼續輸入
http://xxx/abc.php?id= x' and '1'='2
頁面運行錯誤,則說明此 Sql 注入為字符型注入。同理
- Url 地址中繼續輸入