【CSRF攻击分析】

目录

一、什么是CSRF漏洞

二、CSRF漏洞的原理和利用过程 

三、CSRF漏洞的检测方法

四、攻击利用姿势

五、防护手段


一、什么是CSRF漏洞

     CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,可以这样来理解:
     你登录某个网站,攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。 一个经典的csrf例子如下:

【CSRF攻击分析】_第1张图片

二、CSRF漏洞的原理和利用过程 

   一般来说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 的恶意代码被执行。(图片来之网络:)
【CSRF攻击分析】_第2张图片

三、CSRF漏洞的检测方法

1、手动测试:

常用的办法是:寻找站内增删改的地方,抓取一个正常请求的数据包,修改链接或表单的参数,再用验证过的游览器打开链接或提交表单,如果操作可以成功执行就代表存在CSRF漏洞。最简单的方法就是手工抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。(手动测试步骤可在下面的csrf利用姿势中有所体现)

2、使用CSRF检测工具:

手动测试CSRF漏洞比较麻烦,因此可以选择使用工具来进行高效的检测。下面简单介绍下几个常用的CSRF检测工具。常用的CSRF检测工具有CSRFTesterBurpsuiteCSRF Request Builder等。以CSRFTester工具为例,CSRF漏洞检测工具的测试原理如下:使用CSRFTester进行测试时,首先需要抓取我们在浏览器中访问过的所有链接以及所有的表单等信息,然后通过在CSRFTester中修改相应的表单等信息,重新提交,这相当于一次伪造客户端请求。如果修改后的测试请求成功被网站服务器接受,则说明存在CSRF漏洞,当然此款工具也可以被用来进行CSRF攻击。使用CSRFTester pikachu 靶场做响应的测试:

(工具地址:  https://wiki.owasp.org/index.php/File:CSRFTester-1.0.zip))

(工具使用:Web安全:CSRFTester(跨站请求伪造漏洞测试工具)_表单 (sohu.com)

GET方式:

【CSRF攻击分析】_第3张图片 CSRFTester工具面板

【CSRF攻击分析】_第4张图片 抓取get数据

【CSRF攻击分析】_第5张图片 抓取get数据进行修改

【CSRF攻击分析】_第6张图片 成功修改正常用户的信息

 POST方式:

【CSRF攻击分析】_第7张图片 CSRFTester抓取post数据包 【CSRF攻击分析】_第8张图片 修改数据并验证

四、攻击利用姿势

CSRF的攻击过程需要满足以下两个条件:

                 1. 目标用户已经登录了网站,能够执行网站的功能。
                 2. 目标用户访问了攻击者构造的 URL

 一般来说CSRF常见的攻击类型有以下2 种:

                 1. GET型:GET类型的CSRF利用很简单,只需要构造一个HTTP请求就可以完成。

                  2. POST型:POST类型,参数是在请求体中提交的,我们就不能通过伪造URL的方式                      进行攻击了。这种类型的 CSRF 利用起来通常使用的是一个自动提交的表单;攻击                       者可以在自己的公网服务器上搭建一个站点,在站点上做一个表单,诱导受害者点击                    这个链接,当用户点击时,就会自动向存在CSRF的服务器提交POST请求修改个信息。

    GET类型:

【CSRF攻击分析】_第9张图片 get型csrf漏洞的利用步骤(1)

      

【CSRF攻击分析】_第10张图片 get型csrf漏洞的利用步骤(2)

【CSRF攻击分析】_第11张图片 get型csrf漏洞的利用步骤(3)

【CSRF攻击分析】_第12张图片 get型csrf漏洞的利用步骤(4)

【CSRF攻击分析】_第13张图片 get型csrf漏洞的利用步骤(5)

【CSRF攻击分析】_第14张图片 get型csrf漏洞的利用步骤(6)

POS类型:

【CSRF攻击分析】_第15张图片 post型csrf漏洞利用步骤(1) 【CSRF攻击分析】_第16张图片 post型csrf漏洞利用步骤(2)

【CSRF攻击分析】_第17张图片 post型csrf漏洞利用步骤(3)

【CSRF攻击分析】_第18张图片 post型csrf漏洞利用步骤(4)

五、防护手段

1)验证 HTTP Referer 字段

        根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,比如需要访问 http://bank.com/withdraw?account=bob&amount=1000000&for=Mallory,用户必须先登陆 bank.com,然后通过点击页面上的按钮来触发转账事件。这时,该转帐请求的 Referer 值就会是转账按钮所在的页面的 URL,通常是以 bank.com 域名开头的地址。而如果黑客要对银行网站实施 CSRF 攻击,他只能在他自己的网站构造请求,当用户通过黑客的网站发送请求到银行时,该请求的 Referer 是指向黑客自己的网站。因此,要防御 CSRF 攻击,银行网站只需要对于每一个转账请求验证其 Referer 值,如果是以 bank.com开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。然而,这种方法并非万无一失。Referer 的值是由浏览器提供的,虽然 HTTP 协议上有明确的要求,但是每个浏览器对于 Referer 的具体实现可能有差别,不能保证浏览器自身没有漏洞。   【CSRF攻击分析】_第19张图片

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

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

3)在 HTTP 头中自定义属性并验证

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

                                        【CSRF攻击分析】_第20张图片

你可能感兴趣的:(网络安全,csrf,安全,web安全)