打开Less-9页面,可以看到页面中间有一句Please input the ID as parameter with numeric value,那么先使用ID这个参数通过GET方式传入一个数值。
注入语句:?id=1。可以看出没有回显查询结果。
接着试一下?id=1',发现和?id=1的页面没有区别,没有报错也无法判断成功还是失败。此时就可以考虑另一种盲注的方式:时间盲注。
时间盲注与布尔型注入的区别在于,时间盲注是利用sleep()或benchmark()等函数让数据库执行的时间变长,根据返回页面的时间来判断使用的注入语句成功与否。时间盲注多与if函数结合使用。如:if(a,b,c),此if语句的含义是,如果a为真则返回值为b,否则返回值为c。
根据本关的名字提示,得知SQL语句是单引号闭合,接着尝试?id=1' and if(1=1,sleep(2),0) --+和?id=1' and if(1=2,sleep(2),0) --+确定真的存在注入点,使用前一条注入语句时,网页两秒之后刷新成功,而使用第二条语句,直接返回,由此确定存在注入点。
思路:
注入语句:?id=1' and if(length(database())>1,sleep(2),1)--+,由此可以判断出当前数据库名。
此时就可以将上面注入语句中的database()换成自己想要使用的语句,不断猜解得出数据,同上一关。
第十关和第九关的思路是一样的,只是在注入语句中将闭合SQL语句使用的单引号换成了双引号。
确定存在注入点的语句:?id=1" and if(1=1,sleep(2),0) --+、?id=1" and if(1=2,sleep(2),0) --+。