第十一课认识跨站请求伪造
1跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
2跨站请求伪造的原理
跨站请求伪造的原理是利用了Web应用程序对用户请求的验证机制不严格或者没有做验证的情况下,攻击者可以伪造一个请求,让用户在已经认证过的网站
3CSRF 和 XSS 的区别
1、CSRF是跨站请求伪造; XSS是跨域脚本攻击。
2、CSRF需要用户先登录网站A,获取cookie; XSS不需要登录。
3、CSRF是利用网站A本身的漏洞,去请求网站A的api; XSS是向网站A注入JS代码,然后执行JS里的代码,篡改网站A的内容。(XSS利用的是站点内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站。你可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求。
4跨站请求伪造案例
我们打开DVWA 然后选择CSRF
先自己修改一下密码如图1-1

图1-1
首先进入初级页面我们知道这是一个修改密码的,当我们输入密码进行修改后,提示修改成功后,我们会发现这也是一个get型提交。
那我们就试试直接复制下来,在地址栏中粘贴,看能否直接把密码修改成功。如图1-2

图1-2
还要注意的是我们必须使用同一个浏览器,因为在访问页面时通常存在cookie认证,否则即使点击了恶意链接也没用如图1-3

图1-3
接下来我们验证一下是否密码修改成功:如图1-4

图1-4
真实环境下:
我们通常是给受害者发送一个链接,而在正常的情况下人们通常不会点击一个很长的、看起来就不正常的链接,这个就需要利用到社会工程学,学会利用人们的心理来达到我们的目的,诱使他们点击我们构造的链接,这种情况下我们需要把长的链接转化成一个短的链接,而网上正好可以找到很多这种在线的工具
比如:站长工具:短链接生成器(就会自动帮我们生成一个短链接)灵牛短网站(比较推荐)如图1-5

图1-5
就和我们的 127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=1234&password_conf=1234&Change=Change#
一样的效果如图1-6

图1-6
然后回车

图1-7
通过构造一个页面。
修改密码的链接重定向到一个自己写的一个错误页面:如图1-8

图1-8
用户点击之后以为出错了,实际已经执行了恶意代码:如图1-9

图1-9
你的密码就被别人用你的权限修改成他设置的密码了,他那边就可以登录你的账号了。如图2-1

图2-1
3、CSRF的防御策略
在业界目前防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token并验证;在 HTTP 头中自定义属性并验证。
1、验证 HTTP Referer 字段
根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,在后台请求验证其 Referer 值,如果是以自身安全网站开头的域名,则说明该请求是是合法的。如果 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。
2、在请求地址中添加 token 并验证
CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
3.在 HTTP 头中自定义属性并验证
这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。





