php宽字节注入,SQL注入之宽字节注入(MySQL)

本文探讨了在PHP环境中,当数据库使用GBK编码时,如何通过宽字节注入绕过转义机制进行SQL注入攻击。通过示例代码展示了注入过程,并解释了原理。提醒开发者注意对特殊字符的过滤处理,以增强应用程序的安全性。
摘要由CSDN通过智能技术生成

0x00 应用场景

在注入时通常会使用单引号、双引号等特殊字符。在应用中,通常为了安全,开发者会开启php的magic_quotes_gpc,或者使用addslashes、mysql_real_escape_string等函数对客户端传入的参数进行过滤,则注入的单引号或双引号就会被"\"转义,但是,如果服务端的数据库使用的是GB2312、GBK、GB18030等宽字节的编码时,则依然会造成注入。

0x01 测试代码

$conn = mysql_connect('localhost','root','root');

mysql_select_db('messages',$conn);

if (isset($_GET['id'])) {

$id = addslashes($_GET['id']); //转义id

$sql = "select * from msg where id='$id';";

echo $sql."
";

$result = mysql_query($sql);

$rows = @mysql_fetch_assoc($result);

if ($rows) {

echo '

foreach ($rows as $key => $value) {

echo '

';

echo '

'.$key.'----'.$value.'';

echo '

';

}

echo '

';

} else {

echo mysql_error();

}

} else {

echo "please input id.";

}

?>

bd48f6143138f9fa2f33136dabe65350.png

0x02 宽字节注入原理

当MySQL使用的是GBK编码时,0xbf5c会被当做一个字符(双字节字符),其中5c是"\"

当注入语句为http://127.0.0.1/test.php?id=2%bf'时

在数据库中bf会和转义符"\"形成一个双字节字符"縗",从而单引号逃逸

f79ee48dd3f8088f943bcb9358cae8ad.png

06de9737f98a50d96e1a2430656d8e87.png

若未作声明则文章版权归本人(@reber)所有,转载请注明原文链接:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值