SQL二次注入

  1. 二次注入的原理:
    主要分两步,第一步就是进行数据库插入数据的时候,仅仅对其中的特俗字符进行了转义,但是数据库保存的数据仍然具有恶意内容。第二步就是在下一次进行数据的查询过程中,直接从数据库中取得恶意数据(开发者认为数据是可信的),这样就造成了SQL的二次注入。

  2. 实例:sqlilabs-less24
    二次注入会出现在注册的页面:
    在这里插入图片描述
    点击进入注册界面:
    在这里插入图片描述
    此时数据库中的users为:
    在这里插入图片描述

  • 我们们向数据库中插入恶意数据: username:wenhao’# password: 123456
    此时的数据已经插入到数据库当中,当我们再次访问时:
    在这里插入图片描述
  • 我们进行密码的修改: current password:123456 new password:asdf 我们再次查询数据库时

在这里插入图片描述
发现wenhao的账户密码被更改了,而wenhao’#的密码没有被更改,此时就是实现了SQL的二次注入

  • 这时候我们查阅源代码:
$username= $_SESSION["username"];
	$curr_pass= mysql_real_escape_string($_POST['current_password']);
	$pass= mysql_real_escape_string($_POST['password']);
	$re_pass= mysql_real_escape_string($_POST['re_password']);
	
	if($pass==$re_pass)
	{	
		$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
		$res = mysql_query($sql) or die('You tried to be smart, Try harder!!!! :( ');
		$row = mysql_affected_rows();
		echo '<font size="3" color="#FFFF00">';
		echo '<center>';
		if($row==1)
		{`在这里插入代码片`
			echo "Password successfully updated";
	
		}
		else
		{
			header('Location: failed.php');
			//echo 'You tried to be smart, Try harder!!!! :( ';
		}
  • 这是更改密码的php,我们将用户名和更改的密码带入到update语句
$sql = "UPDATE users SET PASSWORD='asdf' where username='wenhao'#' and password='$curr_pass' ";
  • 先用’闭合掉username的’引号,然后用#注释掉后面的语句,此时本来要更该wenhao’#的密码,但是username成了wenhao,所以wenhao’#的密码没有变,而wenhao的密码发生了改变。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值