宽字节注入
漏洞原理
一般程序员用gbk编码做开发的时候,会用 set names 'gbk'
来设定,这句话等同于
set
character_set_connection = ‘gbk’,
character_set_result = ‘gbk’,
character_set_client = ‘gbk’;
漏洞发生的原因是执行了 set character_set_client = 'gbk';
之后,mysql就会认为客户端传过来的数据是gbk编码的,从而使用gbk去解码,而mysql_real_escape
是在解码前执行的。
但是直接用 set names 'gbk'
的话real_escape
是不知道设置的数据的编码的,就会加 %5c 。此时server拿到数据解码 就认为提交的字符+%5c是gbk的一个字符,这样就产生漏洞了。
宽字节注入是由于不同编码中中英文所占字符的不同所导致的。
通常来说,在GBK编码当中,一个汉字占用2个字节。而UTF-8编码中,一个汉字占用3个字节。
在一般的sql