SQL注入之判斷注入類型
注入類型分為數字型和字符型和搜索型
例如數字型語句:select * from table where id =3,則字符型如下:select * from table where name=’admin’。可見在測試時需要添加引號去閉合參數時才能使頁面返回正確的是字符型注入,不需要添加的是數字型注入。
1.數字型直接帶入查詢:
select * from <表名> where id = x and 1=1
select * from <表名> where id = x and 1=2
2.字符型需閉合后帶入查詢:
select * from <表名> where id = 'x' and '1'='1'
select * from <表名> where id = 'x' and '1'='2'
3.搜索型:
一般出現在查詢搜索處,要進行搜索型注入,我們還得了解一下sql數據查詢中where子句使用Like操作符的知識,Like操作符所起的作用就是模糊查詢,要使用Like進行模糊查詢必須還要配合通配符才能完成,”%”就是Like操作符中的一種通配符,它代表零個或多個任意字符,為了大家理解,為大家舉了一些例子:
Like 'sina%' //返回以sina開始的任意字符
Like '%sina' //返回以sina結尾的任意字符
Like '%sina%' //返回以包含sina的任意字符
a%’ and 1=1 -- 正常
a%’ and 1=2 -- 錯誤
SQL注入之判斷是否存在注入
1.顯錯注入的判斷方法
如這么一個網站www.example.com/index.php?id=1,首先第一步我們先進行是否存在注入的判斷,先在數字1后加單引號 ',若頁面處錯,則存在Sql注入,但注入點是否可利用還和服務端代碼和服務器配置息息相關(如過濾一些危險函數或者限制參數的長度時就不可以利用)。其次還可以使用邏輯符號來判斷是否存在注入,參數后加and 1=1和and 1=2,若and 1=1頁面返回正常,and 1=2返回錯誤時,則存在Sql注入(這是Sql語法運算符的特點,SQL AND & OR 運算符如果第一個條件和第二個條件都成立,則 AND 運算符顯示一條記錄。如果第一個條件和第二個條件中只要有一個成立,則 OR 運算符顯示一條記錄。),否則不一定存在注入。 同理也可以使用or來判斷是否存在注入。需要注意的是,我們需要根據注入點的類型來判斷是否需要在整個參數中添加注釋符或引號。
2.不顯錯的判斷方法
在單引號and和or下都不報錯時,也可能存在注入,由於服務器可能配置在參數錯誤時依然返回原有頁面,這樣即使存在注入頁面也不會發生變化了。我們可利用頁面返回時間來判斷是否存在注入,如and if(1=0,1, sleep(10)),注意是否需要使用單引號或者注釋符。不同的數據庫有不同的延時函數,需要結合具體情況來使用。