简介
宽字节跨站漏洞多发生在GB系统编码。 对于GBK编码,字符是由两个字节构成,在%df遇到%5c时,由于%df的ascii大于128,所以会自动拼接%5c,吃掉反斜线。而%27 %20小于ascii(128)的字符就会保留。通常都会用反斜线来转义恶意字符串,但是如果被吃掉后,转义失败,恶意的xss代码可以继续运行。
什么是宽字节
GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际为两字节。(英文字母占据一个字节,汉字占据两个字节)。宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象。
宽字节SQL注入
先来复习下宽字节注入的形成原理:
防御方式:将 ' 转换为 \'
绕过方式:将 \消灭
常规编码
输入处理编码带入SQL结果
'
\'
%5c%27
id=1\'and
不能注入
GBK编码
MySQL在使用GBK编码时,会认为两个字符为一个汉字。
输入处理编码带入SQL结果
%df'
%df\'
%df%5c%27(運)
id=運' and
能注入
两个字符组合,认为是一个汉字
注:前一个ASCII码大于128才能到汉字的范围。
宽字节XSS漏洞
宽字节XSS与宽字节SQL注入的不同在于宽字节注入主要是通过
吃掉转义符再正常注入SQL语句,而宽字节XSS