mysql

Posted on 2022-01-07 10:38  Fnalist123  阅读(70)  评论(0)    收藏  举报

 mysql  make_set函数:

  通常用于concat等函数被禁止使用的场景,可以结合updatexml等函数进行报错注入

  make_set函数可以返回相应位的字符串,语法格式为:

  MAKE_SET(bits,str1,str2,…)    

    bits将输入的值转为二进制  然后会倒过来,从低位到高位,去除1所对应位置的字符串并返回

  测试sql语句如下:

    select make_set(1,'a','b','c','d');

    

 

    bits为1  数字1转为2进制为 00000001   倒过来从低位到高位为10000000  故取只有第一位为1  故取第一个字符串a并返回

    

    select make_set(2,'a','b','c','d');

              

 

    bits为2  数字2转换为2进制为00000010  倒过来从低位到高位为01000000  第二位为1  于是取第二个字符串b 并返回

 

    select make_set(3,'a','b','c','d');

        

 

    

    bits为3  数字3转换为2进制为00000011  倒过来从低位到高位为11000000  第一位和第二位为1  取第一个和第二个字符串并返回

 

    select make_set(1|4,'a','b','c','d');

    

 

     bits为1 | 4  先取数字1的二进制为00000001  数字4的二进制为00000100  然后或运算后为 00000101   依旧倒过来为10100000  可以看到第一位和第三位为1 于是取a和c并返回