CSRF漏洞详细解读

一 CSRF介绍

1.什么是CSRF

CSRF(Cross-site request forgery)跨站请求伪造,也被称为"One Click Attack"或者Session
Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
个人理解:也就是说,你和用户端都在用同一个网站上注册了账号,但是这个网站对恶意代码的过滤做的不是那么的干净,可以伪造一些命令,比如说修改账户密码吧,首先我们要知道修改密码是网站对服务器发送请求,服务器响应返回给你,你在自己的电脑上发现修改页码的页面存在漏洞,在网址上输入恶意修改的代码,再将这个恶意网址发给别的用户的时候,当这个用户点击这一串链接,在不知情的情况下,已经把这个的密码修改了,用户却不知道。这样我们就可以获得这个用户的帐号了。那么如果是银行出现这个漏洞,后果可想而知。

在这里插入图片描述


图片来源,点击跳转

2.CSRF漏洞危害

(1)可修改用户信息 (2)丢失用户敏感信息 (3)执行恶意代码 (4)个人财务被盗

二 CSRF的三种漏洞

1.GET类型CSRF

这种类型的CSRF一般是由于程序员安全意识不强造成的。GET类型的CSRF利用非常简单,只需要一个HTTP请求,所以,一般会这样利用:

<img src=http://xxx.cn/csrf.php?xxx=number />

在访问含有这个img的页面后,浏览器会自动向http://xxx.cn/csrf.php?xxx=number发出一次HTTP请求。xxx.cn就会收到包含受害者登录信息的一次跨域请求。所以,如果将该网址替换为存在GET型CSRF的地址,就能完成攻击了。

2.POST类型CSRF

这种类型的CSRF危害没有GET型的大,利用起来通常使用的是一个自动提交的表单。 这里有很多方法构造代码,如:
1.在自己能力很强的情况下,可以选择自己编写
2.也可以通过burp抓包工具poc构造恶意代码

3.Token类型CSRF

Token就很简单了,直接抓包在抓到的包中找到token,在token要传输的命令上进行代码的修改,释放恶意包,如果达到了咱们预计的效果就可以判定是存在token类型的CSRF漏洞

三 靶场演示

这里我准备用pikachu靶场进行演示,piikachu靶场技术友们都应该会搭建吧,如果不会我这里推荐小皮面板,下载后简单配置就可以本地使用靶场,各种靶场。

需要用到的工具:burp、小皮面板
小皮面板下载链接
burp下载链接
burp使用教程

在这里我就不演示了我计划后期要专门出一个比较全面的实战文章。

四 CSRF漏洞修复方法

修复方案

(1)验证http referer字段

根据HTTP协议,在HTTP头中有⼀个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问⼀个安全受限页⾯的请求必
须来⾃于同⼀个⽹站。

(2).在请求地址中添加token并验证

CSRF攻击之所以能够成功,是因为攻击者可以伪造⽤户的请求,该请求中所有的⽤户验证信息都存在于cookie中,因此攻击者可以在不知
道这些验证信息的情况下直接利⽤⽤户⾃⼰的cookie进⾏安全验证。所以,抵御CSRF攻击的关键在于在请求中放⼊攻击者所不能伪造的信
息,并且该信息不存在于cookie中。因此,可以在http请求中以参数的形式加⼊⼀个随机产⽣的token,并在服务器建⽴⼀个拦截器来验证
这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击⽽拒绝该请求。

(3)在http头中⾃定义属性并验证

⾃定义属性的⽅法也是使⽤token并进⾏验证,和前⼀种⽅法的不同的是,不是把token以参数的形式置于http请求中,⽽是把它放在http
头中⾃定义的属性中。通过XMLHttpRequest这个类,可以⼀次性给所有该类请求加上csrftoken这个http头属性,并把token放⼊其中。
这样解决了前⼀种⽅法在请求中加⼊token的不便,同时,通过这个类请求的地址不会被记录到浏览器的地址栏,也不⽤担⼼token会通过

referer泄露⽹站地址。

(4)其他防御⽅法

<1>CSRF攻击是有条件的,当⽤户访问恶意链接时,认证的cookie仍然有效,所以当⽤户关闭页⾯时要及时清除认证cookie,对⽀持tab
模式(新标签打开⽹页)的浏览器尤为重要。
<2>尽量少⽤或不使⽤request()类变量,获取参数指定request.form()还是request.querystring(),这样有利于阻⽌CSRF漏洞攻击,此⽅法只不能完全防御CSRF攻击,只是⼀定程度上增加了攻击难度

这里是大佬总结的,我引用一下,详情点击此处

五 小结

首先,这个漏洞在现实中实现是很有困难的,一般做白盒测试也基本上只是做一些简单的信息修改,看一看效果,其次这个漏洞的危害很大,所以说,基本上开发人员都开始渐渐注意到一些常规漏洞,但是实际上没有绝对的安全,但是技术友们不要因为这个原因就任意渗透,遵守网络安全法

相关文章

文章浏览阅读8.4k次,点赞8次,收藏7次。SourceCodester Onl...
文章浏览阅读3.4k次,点赞46次,收藏51次。本文为大家介绍在...
文章浏览阅读1.1k次。- php是最优秀, 最原生的模板语言, 替代...
文章浏览阅读1.1k次,点赞18次,收藏15次。整理K8s网络相关笔...
文章浏览阅读1.2k次,点赞22次,收藏19次。此网络模型提供了...
文章浏览阅读1.1k次,点赞14次,收藏19次。当我们谈论网络安...