一、數字型注入
當輸入的參數爲整形時,若是存在注入漏洞,能夠認爲是數字型注入。
測試步驟:
(1) 加單引號,URL:www.text.com/text.php?id=3’
對應的sql:select * from table where id=3’ 這時sql語句出錯,程序沒法正常從數據庫中查詢出數據,就會拋出異常;
(2) 加and 1=1 ,URL:www.text.com/text.php?id=3 and 1=1
對應的sql:select * from table where id=3’ and 1=1 語句執行正常,與原始頁面如任何差別;
(3) 加and 1=2,URL:www.text.com/text.php?id=3 and 1=2
對應的sql:select * from table where id=3 and 1=2 語句能夠正常執行,可是沒法查詢出結果,因此返回數據與原始網頁存在差別
若是知足以上三點,則能夠判斷該URL存在數字型注入。
二、字符型注入
當輸入的參數爲字符串時,稱爲字符型。字符型和數字型最大的一個區別在於,數字型不須要單引號來閉合,而字符串通常須要經過單引號來閉合的。
例如數字型語句:select * from table where id =3
則字符型以下:select * from table where name=’admin’
所以,在構造payload時經過閉合單引號能夠成功執行語句:
測試步驟:
(1) 加單引號:select * from table where name=’admin’’
因爲加單引號後變成三個單引號,則沒法執行,程序會報錯;
(2) 加 ’and 1=1 此時sql 語句爲:select * from table where name=’admin’ and 1=1’ ,也沒法進行注入,還須要經過註釋符號將其繞過;
Mysql 有三種經常使用註釋符:
-- 注意,這種註釋符後邊有一個空格
# 經過#進行註釋
/* */ 註釋掉符號內的內容
所以,構造語句爲:select * from table where name =’admin’ and 1=1—’ 可成功執行返回結果正確;
(3) 加and 1=2— 此時sql語句爲:select * from table where name=’admin’ and 1=2 –’則會報錯
若是知足以上三點,能夠判斷該url爲字符型注入。
php