Error-based

1.将聚合函数count()和group by语句联合起来迫使sql查询语句返回错误(主键重复)

  须知:

    floor:函数只返回整数部分,小数部分舍弃。

    round:函数四舍五入,大于0.5的部分进位,不到则舍弃。

    floor(rand(0)*2)前面产生的随机数是确定的011011...

    1>mysql在遇到select count(*) from tables group by x;这语句的时候会建立一个虚拟表

 

        (其中key是主键,不可重复)

    2>取第一条数据,执行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,因为主键不可重复,所以报错([Err] 1062 - Duplicate entry '1' for key 'group_key'),所以至少要三条数据才可以,确定出错

    a>floor(rand()*2)产生的随机数不确定,所以可能只需要两条记录就出错了,如下

  注意:如果是select count(*),floor(rand(0)*2) from user group by 2;可以看成select count(*) from user group by floor(rand(0)*2)

2.列名重复

  放在第一个select后面,每个列名后面会+1

  select * from (select NAME_CONST(version(),1),NAME_CONST 

(version(),1))x
  join:连接函数
  select * from(select * from `table` a join `table` b)c

 3.xpath语法错误

  正常语法:select extractvalue(1,'/a/b');
  报错语法:
  select updatexml(1,concat(0x7e,(select @@version),0x7e),1)
  select extractvalue(1,concat(0x7e,(select @@version),0x7e))

    

 

posted @ 2017-07-13 23:37  黑暗中的小郎君  阅读(596)  评论(0编辑  收藏  举报