2020-09-08 01:48:18
宽字节注入是SQL注入的一种特殊绕过方式,其核心原理是利用数据库编码对多字节字符的解析特性,绕过安全防护机制(如转义函数)实现注入攻击。
一、宽字节注入的底层机制
当数据库使用多字节编码(如GBK、BIG5)时,某些字符由两个字节组成。攻击者通过构造特定宽字节(如%df),可与数据库转义字符(如)组合形成合法多字节字符。例如,在GBK编码中,的十六进制为0x5c,若攻击者输入%df%27(%27是单引号'的URL编码),0xdf与0x5c会被数据库解析为汉字“运”,导致原本被转义的单引号恢复活性,从而闭合SQL语句并注入恶意代码。
二、关键防护绕过场景
以addslashes()函数为例,该函数会在单引号、双引号等字符前添加反斜杠进行转义。但在宽字节编码下,若用户输入%df',经过URL解码后为0xdf 0x27,addslashes()会将其转为0xdf 0x5c 0x27。此时,0xdf 0x5c被数据库识别为合法汉字,单引号0x27未被转义,从而绕过防护机制。这种绕过方式常见于PHP等使用addslashes()或magic_quotes_gpc的旧系统。
三、典型攻击流程
四、防御措施
注:GB2312因字符集范围较小,通常不存在宽字节注入风险,但GBK、BIG5等编码需重点防范。