简介 宽字节注入,它的作用可以绕过转义,也是绕过转义的其中一个办法 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,php代码:mysql_query("SET
宽字节注入,它的作用可以绕过转义,也是绕过转义的其中一个办法
宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,php代码:mysql_query("SET NAMES 'gbk'");这样配置会引发编码转换从而导致的注入漏洞。(GBK导致的问题)
utf-8 3个字节
gbk 2个字节
具体原理如下:
当GPC开启(php.ini
magic_quotes_gpc = On)或使用addslashes函数过滤提交的参数时,测试注入点使用的单引号 ' 就会被转义为: \'
这个的作用就是对敏感函数的转义,让我们无法注入。
如果存在宽字节注入,我们输入%df%27时首先经过上面提到的转义就会变成%df%5c%27(%5c就是反斜杠)。之后再数据库查询由于使用了GBK多字节编码,即在汉字编码范围内两个字节会被编码为一个汉字,然后MySQL服务器会对查询语句进行了GBK编码%df%5c转换成汉字,而单引号逃出了,这个时候就可以注入了。
%df不是固定的,可以自己组合。只要是汉字就可以。
测试存在宽字节注入,下面就是使用办法。
宽字节注入图1
宽字节注入图2
用工具就是把链接直接丢到sqlmap里面如:http://localhost:8080/sql1/sql1.php?title=1%bb 后面的%bb不能去掉。
-----------------------------------------------------------------
摘抄:
宽字节注入原理:
GBK 占用两字节
ASCII占用一字节
PHP中编码为GBK,函数执行添加的是ASCII编码,MYSQL默认字符集是GBK等宽字节字符集。
输入%df和函数执行添加的%5C,被合并成%df%5C。由于GBK是两字节,这个%df%5C被MYSQL识别为GBK。导致本应的%df\变成%df%5C。%df%5C在GBK编码中没有对应,所以被当成无效字符。
%DF’ :会被PHP当中的addslashes函数转义为“%DF\'” ,“\”既URL里的“%5C”,那么也就是说,“%DF'”会被转成“%DF%5C%27”倘若网站的字符集是GBK,MYSQL使用的编码也是GBK的话,就会认为“%DF%5C%27”是一个宽字符。也就是“縗’”
例如:http://www.xxx.com/login.php?user=%df’ or 1=1 limit 1,1%23&pass=
其对应的sql就是:
select * fromcms_user where username = ‘運’ or 1=1 limit 1,1#’ and password=”
获取信息办法:13:10083/index.php?id=-10%df' union select 1,databases()%23