介绍
利用受害者尚未失效的身份信息,诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下向服务器发送请求从而完成非法操作
成因
网站的cookie在浏览器中不会过期,只要不退出或者不关闭浏览器在这期间访问网站都是登录的状态,此时攻击者发送构造好的脚本或者链接会执行成功
危害
盗用受害者的身份,以受害者的名义发送请求。
分类
GET型
只需要构造URL,然后诱导受害者访问利用。
POST型
构造自动提交的表单,诱导受害者访问或者点击
CSRF与XSS的区别
XSS:
攻击者发现xss漏洞—构造代码—发送给受害人—受害人打开—攻击者获得受害人的cookie—完成攻击
CSRF:
攻击者发现csrf漏洞—构造代码-发送给受害人—受害人打开—受害人执行代码—完成攻击
CSRF借助用户权限完成攻击,而XSS是盗取用户的权限
漏洞挖掘
1、抓取一个正常的数据包,若没有referer字段和token,那么有可能存在csrf
2、若有referer字段,但是去掉referer字段后在重新提交,如果提交还有效基本上确定存在csrf
3、对网站增删改查的地方进行研究,判断请求是否可以进行伪造(未使用token,修改账号不需要旧密码等)
4、确认凭证的有效期(cookie,session没有随着浏览器关闭或者账号退出而清理掉)
漏洞防御
1、验证http referer字段
http头中referer字段记录了http请求的来源地址。
例:
从dvwa的brute force页面挑转到csrf页面,在csrf界面中查看referer字段值为:http://192.168.101.59/DVWA-master/vulnerabilities/brute/
brute force页面url:http://192.168.101.59/DVWA-master/vulnerabilities/brute/
csrf页面url:http://192.168.101.59/DVWA-master/vulnerabilities/csrf/
而攻击者请求csrf界面不是从本网站内跳转过来的,所以referer的值会指向攻击者自己的网站。增加referer的验证不是本网站ip或者域名开头的拒绝请求。
2、请求地址中增加token并验证
在请求中用户的验证信息都存在于cookie中,因此攻击者可以不去了解这些信息而直接利用用户自己的cookie通过验证。
增加不能伪造的随机产生的token在参数中,验证请求中的token参数,若token没有或者不正确可以认为是csrf攻击拒绝访问
3、http头中自定义属性并验证
在http的请求头中增加自定义属性
burp生成POC
完,我这个版本没有这个功能,好吧。
先抓取数据包,右键,engagement tools—>generate csrf poc。下一步好像是生成了攻击代码能直接保存成html文件把,要不就是需要自己把攻击代码复制出来保存成html文件,然后打开攻击代码就执行了