csrf漏洞复现(附源码)

4 篇文章 0 订阅

csrf全称跨站请求伪造,攻击者盗用受害者用户的身份,以受害者的身份发送恶意请求

下面进行复现,(本人前端、后端小白,代码有些不规范,大佬们见谅)

这里我创建了三个文件

login.php是用户的登入页面

main.php是商品购买页面

sqlcon.php存放操作数据库的各个函数。

源码如下:

以下代码不只存在csrf漏洞,还存在SQL盲注 有兴趣的可以注一下

login.php页面

<!DOCTYPE html>
<html>
<head>
	<title>login</title>
</head>
<body>
<form action="login.php" method="GET">
<p>username: <input type="text" name="username"><br/></p>
<p>password: <input type="text" name="password"><br/></p>
<input type="submit" value="登入" name="login">
</form>
</body>
</html>
<?php
	include 'sqlcon.php';
	$cookie = loginsql();
	if ($cookie == "kong") {
		echo "请输入正确的用户名或密码";
	}
?>



main.php页面
<?php
	include 'sqlcon.php';
	if ($_COOKIE['user'] !='xuanling')	
	{
		exit();
	}
	chaxunprice("apple");
	chaxunprice("banana");
	if ($_GET['buy']) {
		buy($_GET['shangpin'],$_GET['geshu']);
		header('Location: http://127.0.0.1/csrf/main.php');
	}
?>




sqlcon.php页面
<?php
	function sqlconn(){ //连接数据库函数
		$servername = "localhost"; //数据库所在主机名
		$username = "root"; //使用的数据库的用户名 
		$password = "root"; //使用的数据库的用户的密码
		$dbname = "sql";  //用户所使用的数据库
		$conn = mysqli_connect($servername, $username, $password, $dbname);
		if (!$conn) {
    		die("连接失败: ".$dbname);
		} 
		else{
			return $conn;
		}
	}
	function loginsql(){ //登入判断函数
		$conn = sqlconn();
		$sql = "select password from user where username='{$_GET['username']}'";
		$result = $conn->query($sql);
		if ($result->num_rows > 0)
		{
			$row = $result->fetch_assoc();
			if ($row['password'] === $_GET['password']){
				setCookie("user",'xuanling');
				header('Location: http://127.0.0.1/csrf/main.php');
			}else{
				return "kong";
			}
		}
	}
	function chaxunprice($name){
		$conn = sqlconn();
		$sql = "select * from produce where name='$name'";
		$result = $conn->query($sql);
		if ($result->num_rows > 0)
		{
			$row = $result->fetch_assoc();
			echo '商品:'.$row['name'].'  剩余:'.$row['sum'].' 价格:'.$row['price'].'元';
			print <<<EOT
			<form action="main.php" method="GET">
			<input type="text" value=$name name=shangpin readonly="readonly">
			购买的个数:<input type="text" value="1" name='geshu'>
			<input type="submit" name='buy' value="购买">
			</form>
EOT;
		}
		$conn->close();
	}
	function buy($name,$sum){
                if ($_COOKIE['user'] !='xuanling')	
		{
			break;
		}
		$conn = sqlconn();
		$sql = "update produce set sum=sum-$sum where name = '$name'";
		$conn->query($sql);
		$conn->close();
	}
?>

 

构造恶意请求:这里伪装xuanling用户构造恶意请求。为了方便我直接将cookie值设置为xuanling

apple的初始个数是43,如果不知道用户的cookie,将下面的恶意代码发给用户,用户如果此时正在浏览该商品页面,那么用户在不知道的情况下购买了22个apple,(下面url也可以转换成短连接,以增加其隐藏性,让受害者更容易相信,有很多转换短连接的网站大家自行百度)

http://127.0.0.1/csrf/main.php?shangpin=apple&geshu=22&buy=%E8%B4%AD%E4%B9%B0

结果如下:

在实际情况下,如果修改密码的页面存在csrf漏洞,那么可能攻击者就有可以构造出修改密码的恶意代码。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值