MySQL注入之宽字节注入

         宽字节注入时是利用mysql的一个特性,使用GBK编码的时候,会认为两个字符是一个汉字 ,例如%aa%5c 就是一个 汉字(前一个 ascii 码大于 128 才能到汉字的范围)。我们在过滤单引号的时候,往往利用的思 路是使用函数将‘ 转换为 \’替换反斜杠,反斜杠的GBK编码为%5C,根据GBK编码在前面加上%DE,%DF,%E0。。。都可以组成一个汉字,从而绕过过滤函数。这就是宽字节注入的原理。

         sqli第32关

         先看一下源代码,下述函数为过滤 ‘ \ 的函数,将 ‘ 转为 \’ , 将 \ 转为 \\ ,将 “ 转为 \”

 

因此可以使用宽字节注入,可以添加一个%df,将%5c吃掉即可,payload如下:

?id=-1%df%27%20union%20select%201,database(),3--+

 

 然后就可以通过union注入获取数据了。

 

          sqli第33关

          先看一下源代码,使用了addslashes()函数

 

 

 

 

payload和32关的一样,如下:

?id=-1%df%27%20union%20select%201,database(),3--+

 

 

        sqli第35关

       先看一下源代码

 

 35 关和 33 关是大致的一样的,唯一的区别在于 sql 语句的不同,区别就是 id 没有被单引号包括起来,那我们就没有必要去考虑 check_addslashes()函数的意 义了,直接提交 payload

 

 

 

 

             sqli第36关

            先看一下源代码,是使用了mysql_real_escape_string()函数进行的过滤

 

 

 

 

payload如下:

?id=-1%df%27union%20select%201,user(),3--+

 

posted @ 2022-10-06 03:53  自由和冒险  阅读(274)  评论(0)    收藏  举报