MySQL宽字节注入漏洞分析_php中mysql gbk宽字节编码 注入漏洞以及解决办法.

php中MYSQL数据库,如果是GBK编码.一定要小心GBK宽字节编码漏洞

宽字节注入

sql注入中的宽字节国内最常使用的gbk编码,这种方式主要是绕过addslashes等对特殊字符进行转移的绕过。反斜杠()的十六进制为%5c,在你输入%bf%27时,函数遇到单引号自动转移加入\,此时变为%bf%5c%27,%bf%5c在gbk中变为一个宽字符“縗”。%bf那个位置可以是%81-%fe中间的任何字符。不止在sql注入中,宽字符注入在很多地方都可以应用

看代码 inject.php文件

$sql = "SELECT * FROM user WHERE user='{$user}'";

$rs = $db->select($sql);

正常情况下 magic_quote_gpc 为ON,如果输入

http://www.phpff.com/safe/inject.php?user=11′ and 1=2 #

SQL语句就会变成

SELECT * FROM user WHERE user='1\' and 1=2 #'

自动加上了\转义,如果构造特殊的宽字节编码呢?

http://www.phpff.com/safe/inject.php?user=11%df%27 and 1=2 #

SQL语句就变成

SELECT * FROM user WHERE user='11運' and 1=2#'

是不是注入上了。

那么11%df会被解析成 11運,而 %27被邪恶的解析成 '就绕过了gpc转义,就构造注入了

解决办法:

1.把原来的set names gbk 改成

mysql_set_charset("gbk", $this->conn);

2.使用mysql_real_escape_string过滤参数

$user = mysql_real_escape_string($user);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值