sql注入--二次注入

sql注入–二次注入

靶场:sqli-labs-master
下载链接:靶场下载链接

二次注入原理:利用新建账户中的’或者其他sql语句,在更新密码等操作时达到修改某个原特定账户的目的

第24关关键代码:pass_change.php

<?php

//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");



if (isset($_POST['submit']))
{
	
	
	# Validating the user input........
	$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' ";
		echo $sql;
		echo "</br>";
		$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!!!! :( ';
		}
	}
	else
	{
		echo '<font size="5" color="#FFFF00"><center>';
		echo "Make sure New Password and Retype Password fields have same value";
		header('refresh:2, url=index.php');
	}
}
?>
<?php
if(isset($_POST['submit1']))
{
	session_destroy();
	setcookie('Auth', 1 , time()-3600);
	header ('Location: index.php');
}
?>

关键语句:

$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";

这就会把原来的username拼接到更新的sql语句中然后更新密码。造成二次注入
24关:
在这里插入图片描述
首先新建一个用户,用户名为:admin’ 密码为:123123
在这里插入图片描述
然后进行登录
在这里插入图片描述
登录之后可以修改密码
这里进行抓包观察
在这里插入图片描述
可以看到,这是一个POST请求,提交数据给pass_change.php页面
放包之后可以看到
在这里插入图片描述
提示我们还需要更进一步,可以观察输出的sql语句(我自己添加的,方便观察)
可以看到,admin’账户的名字中的’与更新语句的单引号进行了闭合,那么这就会报错,更新肯定不成功。
思考怎样才能进行注入呢?很简单,我们在创建用户时,在’后面加上一个#,就会把后面的语句注释掉,也就是说,语句变成了这样

PDATE users SET PASSWORD='111111' where username='admin' #'XXXXXX  

只需要满足username=admin即可更新,这样就达到了我们通过创建的新用户来更新管理员账户的目的

动手尝试
创建新用户admin’ # 在这里插入图片描述
此时先尝试登陆admin用户
使用admin密码111111进行尝试登陆
在这里插入图片描述
登陆失败

登陆admin’ #过后。进入修改密码页面
这时,就直接尝试修改密码为111111,抓包观察
在这里插入图片描述
拦截返回包观察
在这里插入图片描述
提示我们成功更新
这时尝试使用admin 密码111111进行登陆
在这里插入图片描述
在这里插入图片描述
可以看到,已经成功登陆进了管理员账户
显然刚刚的更新密码操作过程执行的语句为:

UPDATE users SET PASSWORD='111111' where username='admin' #' and password='123123'

就成功的将管理员账户的密码修改了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值