CSRF (Cross-site request forgery,跨站请求伪造)也被称为One Click Attack或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户请求受信任的网站。
CSRF运用最多的地方就是一些钓鱼网站,目的可以是为了获取某网站的管理员权限或者一些危险请求(比如说银行卡转账),burpsuite可以将抓的包进行更改,生成为CSRF PoC,作用是用户一访问html或者其他网址(如果是php可以重定向),受害者就会重复发送一个请求包

拿我博客的注册页面为例


(超硬核打码)
生成的CSRF就长这样

将代码保存到html打开就可以执行
可以看见用户组没有叫ssss的用户


点击之后就有了

因为受害者浏览器记录了登录的账号,有了账号的cookie,此html必须由受害者执行并且使用的是与注册网站相同的浏览器,所以相应的应用场景为将修改后的html文件放到钓鱼网站目录,用户访问后会自动执行SSRF,也就是自动创建受害者网站的管理员账户,因为各个平台的发包规则不同,有的平台SSRF PoC可以一直用,有的会对注册信息进行加密,这里只谈无防护的CSRF利用
防御方法
检查Referer字段

Referer 是 HTTP 协议中的一个请求头部,它记录了请求来源的信息(URL 地址)。当用户的浏览器访问一个页面时,请求头会包含 Referer 字段,告诉服务器用户是从哪个网页跳转过来的。这个字段在身份验证、防盗链等应用场景中非常关键。如果是正常创建用户那么Referer肯定是本站,如果是钓鱼网站则不通过
可以通过后端的Referer来判断该数据包
Referer可以分为全部对比额匹配对比,全部对比意思是Referer必须是该网站,逻辑上没有漏洞,条件对比是只有检测到有网站这个字段就可以绕过,可以将源网站作为钓鱼网站后的假目录进行绕过比如
Referer: http://hack.com/8.9.10.11/1.html
一般情况下条件对比也无法利用,因为如果是域名访问的化目标必须是http://xxxx.com/
//无法作为目录所以检测失败
当然有些逻辑错误,即使修改请求头使Referer留空也能正常绕过
检查Referer字段并不是完全有效,攻击者可以通过XSS跨站和上传html文件使其Referer来源来自受害者的网站,直接无视检测
CsrfToken

Token是开发者的防护手段,还拿创建用户为例,创建用户时POST包里不仅包含这账号密码等信息还包含一个Token,它相当于给当前POST包打了一个标签,这个标签相当于一个检测机制,只有Token发送的Token和生成POST包的一摸一样才能CSRF检测通过。
如:_wpnonce_create-user=9726b96c11
但是Token几乎是无时无刻更新的,刷新表单,间隔一定时间,不同用户/浏览器访问都会刷新当前Token,攻击者只能得到当前的Token也就无法通过验证。现在大部分网站都在用这种验证方式,能利用这种漏洞多半是逻辑写的不严谨








