token为什么能防止csrf_CSRF(Crosssite request forgery)

概述

跨站请求伪造是一种攻击,它强制终端用户在当前对其进行身份验证后的web应用程序上执行非本意的操作。

CSRF攻击的着重点在于伪造更改状态的请求,而不是盗取数据,因为攻击者无法查看对伪造请求的响应。

对于大多数站点,浏览器请求自动发送与站点关联的所有凭据。例如用户的会话cookie,ip地址,windows域凭据等。因此,如果用户 当前已对该站点进行了身份验证,则该站点将无法区分受害者发送的合法请求和伪造请求。

受害者角度:用户在当前已登录的web应用程序上执行非本意的操作

攻击者角度:攻击者欺骗浏览器,让其以受害者的名义执行自己想要的操作


CSRF如何触发

 屠龙宝刀,点击就送屠龙宝刀,点击就送

攻击流程流程

1、用户登录web站点

2、用户访问一个恶意的网站

3、恶意网站会有代码载入用户的客户端

4、然后这段恶意的代码在用户端重新向正常的web站点发送非本意的请求。


DVWA的LOW级别下

一、在low级别里,在进行密码修改的同时进行代理拦截,可以得到修改密码的url,代码如下所示

 http://192.168.1.146/dvwa/vulnerabilities/csrf/?password_new=admin&password_conf=admin&Change=Change#

二、使用html对链接进行构造

                                                     

三、把完成构造的html文件放到网站发布器上,然后诱惑受害者去点击这个链接,完成对密码的修改

下面的html是包含了script自动提交。

 这是一段可以显示密码修改输入框的html代码,当我们执行这段代码时。会出现输入框和确认框,不利于我们进行攻击,所以对代码进行一些优化。    New password:        Confirm new password:                 这是优化的代码,删除了一些不必要的字符,然后用type=hidden对输入框、确认框和change按钮进行了隐藏,然后使用document对表单进行自动提交,这样当用户执行了这段代码时也不知道具体发生了什么。                        

DVWA的Medium级别下

一、在Medium级别下,发现我们构造的html无法成功修改密码,通过抓包发现在Medium级别下,服务器对Referer(源请求)做了限制,只允许host为:192.168.1.132的请求通过,其他的一律拒绝。

05ce810cb1388d737eb30a56e5f1301b.png

二、这时候,我们可以通过修改发布网站路径的文件夹名来完成绕过,如下图所示,最后完成对目标的攻击。

3b446a38014dace718fbbfc75635ca0c.png


DVWA的High级别下

当我们修改密码时,服务器会自动给我们分配一个随机的token,csrf token:是一种随机参数,它保证了攻击者无法猜测到所有的参数。如下所示

 http://192.168.1.132/DVWA/vulnerabilities/csrf/?password_new=admin&password_conf=admin&Change=Change&user_token=205d04f1fc424211cae8241963ac2bc4#

所以,我们无法猜到正确的链接,故无法用前面的两种方法对其进行攻击。

要对High级别的csrf进行攻击,我们要结合xss漏洞去获取用户的token值,再进行csrf攻击。


CSRF防御

无效的防御

使用秘密的cookie:即使是密码的cookie,也会随着每一个请求一起提交,无论最终用户是否被欺骗提交请求,都会提交所有的身份验证令牌。

仅接受POST请求:设置网站的提交方式仅为POST请求,误解攻击者无法构造恶意链接,因此无法进行CSRF攻击,其实要进行CSRF攻击,不仅仅只能通过伪造链接,还能伪造POST请求提交的表单,例如可以在要攻击的网站中结合XSS进行托管简单的表单,此表单可以由javascript自动触发。

多步交易:只要攻击者可以预测或者能够推断完成的事务的每一个步骤,就可以实现CSRF。

URL重写:虽然可以有效的防御CSRF漏洞,都是用户的会话ID会在URL中公开,同样这也是一个漏洞,所以不建议通过引入另一个安全漏洞来修复一个安全漏洞。

HTTPS:HTTPS本身无法防御CSRF。但是HTTPS是防御所有漏洞的前提。


有效的防御

验证Referer字段:根据HTTP协议,在HTTP头中有一个字段为Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求必须来自同一网站。例如某银行的转账是通过用户访问链接A页面完成的,用户必须先登录,并且访问银行的登录主页面,然后通过点击主页面上的按钮来触发转账事件。当用户提交请求时,该转账请求的Referer值就会是转账按钮所在页面的URL。

当攻击者对银行的网站实施CSRF攻击时,它只能在自己的网站构造请求,当用户通过攻击者的网站发送请求到银行时,该请求的Referer是指向攻击者的网站,所以,在进行CSRF防御的时候,只需要对每一个转账请求验证其Referer值,如果该Referer是以银行的ip地址或域名进行的请求的,证明其是合法请求,如果它的Referer是其他网站的话,就可能是CSRF攻击。

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

二次验证:二次验证就是在转账等关键操作之前提供当前用户的密码或者验证码,由此可以有效的防御CSRF攻击。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值