CSRF漏洞详细讲解

简介: CSRF(Cross-Site Request Forgery),也被称为 one-click attack 或者 session riding,即跨站请求伪造攻击。



一、认识CSRF漏洞

1、什么是CSRF

CSRF(Cross-Site Request Forgery),也被称为 one-click attack 或者 session riding,即跨站请求伪造攻击。


2、CSRF漏洞的原理


1、用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;


2、在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;


3、用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;


4、网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;


5、浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。


3、CSRF漏洞的危害

CSRF是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。可以简单的理解为:攻击者可以盗用你的登陆信息,以你的身份模拟发送各种请求对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。攻击者只要借助少许的社会工程学的诡计,例如通过 QQ 等聊天软件发送的链接(有些还伪装成短域名,用户无法分辨),攻击者就能迫使 Web 应用的用户去执行攻击者预设的操作。


所以遇到 CSRF 攻击时,将对终端用户的数据和操作指令构成严重的威胁。当受攻击的终端用户具有管理员帐户的时候,CSRF 攻击将危及整个 Web 应用程序。



4、CSRF 攻击的条件

1 . 用户已经登录了站点 A,并在本地记录了 cookie


2 . 在用户没有退出站点 A 的情况时(也就是 cookie 生效的情况下),访问了恶意攻击者提供的恶意链接被引诱到危险站点 B (B 站点要求访问站点A)。


3 . 站点 A 没有做任何 CSRF 防御



二、CSRF的分类

1、站外CSRF

CSRF站外类型的漏洞本质上就是传统意义上的外部提交数据问题。通常程序员会考虑给一些留言或者评论的表单加上水印以防止SPAM问题(这里,SPAM可以简单的理解为垃圾留言、垃圾评论,或者是带有站外链接的恶意回复),但是有时为了提高用户的体验性,可能没有对一些操作做任何限制,所以攻击者可以事先预测并设置请求的参数,在站外的Web页面里编写脚本伪造文件请求,或者和自动提交的表单一起使用来实现GET、POST请求,当用户在会话状态下点击链接访问站外Web页面,客户端就被强迫发起请求。


2、站内CSRF

CSRF站内类型的漏洞在一定程度上是由于程序员滥用$_REQUEST类变量造成的。在一些敏感的操作中(如修改密码、添加用户等),本来要求用户从表单提交发起POST请求传递参数给程序,但是由于使用了 $_REQUEST等变量,程序除支持接收POST请求传递的参数外也支持接收GET请求传递的参数,这样就会为攻击者使用CSRF攻击创造条件。一般攻击者只要把预测的请求参数放在站内一个贴子或者留言的图片链接里,受害者浏览了这样的页面就会被强迫发起这些请求。



三、检测手段

检测CSRF漏洞是一项比较繁琐的工作,最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。



例如burp抓包删除Referer头




侧重点:


1、CSRF的攻击是建立在浏览器与web服务器的会话之中


2、欺骗用户访问URL


四、靶场实操


1、实操准备

本次实操基于phpstudy使用DVWA靶场


2、实操演示


在进行测试前,首先需要将靶场难度调整至low




ps:在这一步,或许有许多小伙伴会遇到修改等级后,还是无法进入low级别,此时的解决方案是,按下F12进入开发者模式,在cookie中删除之前所留下的缓存


这时我们需要进行抓包设置payload


首先在文字栏中添加自己想设置的密码


此时用burp抓取这个发送的包


将GET中的数据复制到host后边,得到payload为


   127.0.0.1/DVWA-master/DVWA-master/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change




将链接发送给正在使用该站点的用户



此时发现,该用户的密码被我们成功修改




五、CSRF的防御

**CSRF漏洞防御主要可以从三个层面进行,即服务端的防御、用户端的防御和安全设备的防御。**

1、 服务端的防御


目前业界服务器端防御CSRF攻击主要有5种策略:验证HTTP

Referer字段,在请求地址中添加token并验证,在HTTP头中自定义属性并验证等。下面分别对5种策略进行简要介绍。


 (1)、验证HTTP Referer字段



根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求必须来自于同一个网站。比如某银行的转账是通过用户访问http://bank.test/test?page=10&userID=1&money=10000页面完成,用户必须先登录bank. test,然后通过点击页面上的按钮来触发转账事件。当用户提交请求时,该转账请求的Referer值就会是转账按钮所在页面的URL(本例中,通常是以bank. test域名开头的地址)。而如果攻击者要对银行网站实施CSRF攻击,他只能在自己的网站构造请求,当用户通过攻击者的网站发送请求到银行时,该请求的Referer是指向攻击者的网站。因此,要防御CSRF攻击,银行网站只需要对于每一个转账请求验证其Referer值,如果是以bank. test开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果Referer是其他网站的话,就有可能是CSRF攻击,则拒绝该请求。


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



CSRF攻击之所以能够成功,是因为攻击者可以伪造用户的请求,该请求中所有的用户验证信息都存在于Cookie中,因此攻击者可以在不知道这些验证信息的情况下直接利用用户自己的Cookie来通过安全验证。由此可知,抵御CSRF攻击的关键在于:在请求中放入攻击者所不能伪造的信息,并且该信息不存在于Cookie之中。鉴于此,系统开发者可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。


 (3)、同源策略


同源策略,它是由Netscape提出的一个著名的安全策略。  当一个浏览器的两个tab页中分别打开来 百度和谷歌的页面 当浏览器的百度tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的,  即检查是否同源,只有和百度同源的脚本才会被执行。 如果非同源,那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。同源策略是浏览器的行为,是为了保护本地数据不被JavaScript代码获取回来的数据污染,因此拦截的是客户端发出的请求回来的数据接收,即请求发送了,服务器响应了,但是无法被浏览器接收。



(4)、在HTTP头中自定义属性并验证


自定义属性的方法也是使用token并进行验证,和前一种方法不同的是,这里并不是把token以参数的形式置于HTTP请求之中,而是把它放到HTTP头中自定义的属性里。通过XMLHttpRequest这个类,可以一次性给所有该类请求加上csrftoken这个HTTP头属性,并把token值放入其中。这样解决了前一种方法在请求中加入token的不便,同时,通过这个类请求的地址不会被记录到浏览器的地址栏,也不用担心token会通过Referer泄露到其他网站。


(5)、 在服务端区严格区分好POST与GET的数据请求


如在asp中不要使用Request来直接获取数据。同时建议不要用GET请求来执行持久性操作,如:

http://www.yeeyan.com/space/deleteEvent/16824


(6)、  使用验证码或者密码确认方式进行


  这种方法很有效,但是用户体验就差了些。



2、用户端的防御


养成良好的上网习惯


(1)、不要轻易点击网络论坛、聊天室、即时通讯工具或电子邮件中出现的链接或者图片;


(2)、及时退出长时间不使用的已登录账户,尤其是系统管理员,应尽量在登出系统的情况下点击未知链接和图片


(3)、在连接互联网的计算机上安装合适的安全防护软件,并及时更新软件厂商发布的特征库,以保持安全软件对最新攻击的实时跟踪。


3、安全设备的防御


 

由于从漏洞的发现到补丁的发布需要一定的时间,而且相当比例的厂商对漏洞反应不积极,再加之部分系统管理员对系统补丁的不够重视,这些都给了攻击者可乘之机。鉴于上述各种情况,用户可以借助第三方的专业安全设备加强对CSRF漏洞的防御。

   CSRF攻击的本质是攻击者伪造了合法的身份,对系统进行访问。如果能够识别出访问者的伪造身份,也就能识别CSRF攻击。研究发现,有些厂商的安全产品能基于硬件层面对HTTP头部的Referer字段内容进行检查来快速准确的识别CSRF攻击。


六、小结

CSRF攻击方式并不为大家所熟知,实际上很多网站都存在CSRF的安全漏洞。早在2000年,CSRF这种攻击方式已经由国外的安全人员提出,但在国内,直到2006年才开始被关注。2008年,国内外多个大型社区和交互网站先后爆出CSRF漏洞,如:百度HI、NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站)和YouTube等。但直到现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”,其威胁程度由此“美誉”便可见一斑。


另外警惕大家,网络并非法外之地,大家要谨遵网络安全法,不要做违纪违规的事情!

相关文章
|
6月前
|
安全 数据安全/隐私保护
CSRF漏洞利用工具 -- CSRFTester
CSRF漏洞利用工具 -- CSRFTester
245 0
|
6月前
|
安全 数据安全/隐私保护
31、CSRF漏洞介绍
31、CSRF漏洞介绍
40 0
|
6月前
|
安全 数据安全/隐私保护
小课堂 -- CSRF漏洞介绍
小课堂 -- CSRF漏洞介绍
47 0
|
安全 NoSQL Java
互联网并发与安全系列教程(06) - 常见的Web安全漏洞(CSRF攻击)
互联网并发与安全系列教程(06) - 常见的Web安全漏洞(CSRF攻击)
120 0
|
23天前
|
存储 JSON 安全
2024全网最全面及最新的网络安全技巧 二 之 CSRF+XSS漏洞的各类利用技巧
2024全网最全面及最新的网络安全技巧 二 之 CSRF+XSS漏洞的各类利用技巧
|
4月前
|
存储 安全 JavaScript
Web漏洞挖掘:XSS与CSRF防护策略
【7月更文挑战第11天】XSS和CSRF作为Web应用中常见的安全漏洞,对系统安全构成了严重威胁。通过实施上述防护策略,可以有效减少这些漏洞的风险。然而,Web安全攻防是一个持续不断的过程,开发者需要持续关注应用的安全性,更新和修补安全漏洞,同时加强自身的安全意识和防范技能,以确保Web应用的安全性和稳定性。
|
5月前
|
安全 前端开发 JavaScript
详细解读CSRF漏洞详解
详细解读CSRF漏洞详解
71 0
|
安全 数据安全/隐私保护
CSRF漏洞利用工具 -- CSRFTester
CSRF漏洞利用工具 -- CSRFTester
415 0
CSRF漏洞利用工具 -- CSRFTester
|
6月前
|
安全 前端开发
security CSRF漏洞保护
security CSRF漏洞保护
|
6月前
|
安全 数据安全/隐私保护
第二轮学习笔记:CSRF跨站请求伪造漏洞
第二轮学习笔记:CSRF跨站请求伪造漏洞
47 0