sql注入之宽字节注入

利用场景:

1,网站对客户端输入的引号等字符进行了转义

2,网站数据库采用了gbk编码

代码分析:

<?php
//header("Content-Type: text/html; charset=gb2312");
$id=isset($_GET['id'])?addslashes($_GET['id']):11;//使用addslashes()对参数$id进行了过滤
$con=mysqli_connect('localhost','root','root');
mysqli_select_db($con,'sql');
$sql="select * from users where id='$id'";
echo "sql语句是:".$sql.'<br />';
$result=mysqli_query($con,$sql);
if (!$result) {
	echo "查询失败";
}
while ($row=mysqli_fetch_row($result)) {
	echo "id 是".$row[0].'<br>';
	echo "名字是".$row[1].'<br>';
}
mysqli_close($con);
 ?>

 可以看到在第二行addslashes($_GET['id']),使用了addslashes()函数对传入的参数$id的值进行了过滤。

 addslashes()函数的用法

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。

预定义字符是:

  • 单引号(')
  • 双引号(")
  • 反斜杠(\)
  • NULL

提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。

 测试

1,正常:http://127.0.0.1/sqlunion.php?id=11

2,过滤反斜杠(\):http://127.0.0.1/sqlunion.php?id=11\

3,过滤双引号("):http://127.0.0.1/sqlunion.php?id=11"

无法进行测试:可以看到由于引入了反斜杠(\),无法让sql语句报错。

设置数据库为gbk编码

直接修改数据库编码不成功的可以在代码中加上这一句:

访问:127.0.0.1/sqlunion.php?id=5%df'

5%df'在传入后变成了5%df\'  而\的url编码是%5c   所以最后变成了 5%df%5c‘  变成了  5運  

而多了的一个单引号导致了报错。

又可以愉快的测试了:

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值