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 @   自由和冒险  阅读(223)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示