您的位置:首页 > 其它

CSRF漏洞

2019-07-04 20:27 417 查看

内容

1.CSRF漏洞的概述
2.CSRF漏洞的原理
3.CSRF漏洞的分类与利用
4.CSRF漏洞的挖掘与防御

背景
CSRF(Cross-Site Request Forgery,跨站请求伪造),它是一种常见的Web攻击方式,很多开发者对它很陌生。它在2007年曾被列为互联网20大安全隐患之一。即使是大名鼎鼎的Gmail,在2007年底也存在CSRF漏洞,从而被黑客造成巨大的损失。

什么是CSRF
攻击者盗用了你在某个网站的身份,以你的名义发送恶意请求。跨站请求伪造(英语:Cross-site request forgery),也被称为one-click attack 或者 session riding,通常缩写为 CSRF 或者XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。

关键字
如何挟制用户?
如何让用户执行非本意的操作?

CSRF能够做的事情
以你的名义:

  • 发邮件
  • 发消息
  • 财产操作比如转账,或者购买商品
  • 修改密码
  • 删除文章

CSRF漏洞原理
简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
比如修改:只知道请求来自用户的浏览器,但是不知道,发起请求的链接是浏览器的哪个标签发出的。
演示分析

演示分析

演示分析

疑问
zhangsan帐户并没有主动点击转账给zsm帐户

  1. 为什么zhangsan520帐户的钱少了1000
  2. 为什么zsm帐户的钱增加了1000

看图看真相


挟持用户
其实我们不能挟持用户,但是我们可以挟持用户的浏览器发送任意的请求。
某些html标签是可以发送HTTP GET类型的请求的。例如img标签

<img src=
"http://www.baidu.com" />

浏览器渲染img标签的时候,并不知道img标签中src属性的值,到底是不是一个图片,浏览器做的就是根据src中的链接,发起一个HTTP GET请求,并且携带上当前浏览器在目标网站上的凭证,也就是cookies,获取返回结果以图片的形式渲染

根据这个特性,可以挟持用户的浏览器携带用户凭证发送任意的请求让用户执行非本意的操作其实用户所有进行的操作,比如发送短消息,转账操作,用户操作的只是浏览器,而浏览器通过发送HTTP请求,才是真正的跟Web应用程序交互的操作。

用户浏览器发送出去的HTTP请求代表了用户的操作可以通过burpsuite抓包获取用户操作背后的HTTP请求,修改HTTP请求的相关参数后,挟持受害者发送修改后的HTTP请求受害者在不知情的情况下完成了发送短消息或者转
账等操作

回放攻击流程

CSRF利用前提条件
从图中可以看到,要完成一次CSRF攻击,受害者必须一次完成两个步骤:

  1. 登录信任网站A,并在本地生成Cookie。
  2. 在不退出的情况下,访问危险网站B。

如果不满足以上两个条件中的一个,就不会受到CSRF的攻击。
以下情况你不能保证不会发生:

  1. 你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外站。
  2. 你不能保证关闭浏览器之后,你的本地Cookie立刻过期,你上次的会话已经结束。
  3. 图中所谓的攻击网站,很有可能是一个存在其他漏洞的可信任的经常被人访问的网站。

CSRF漏洞的分类

GET CSRF
CSRF最初的一个错误观点,认为CSRF只能有GET请求发起,因此一些开发者认为只要把重要的操作改为只允许POST请求就能防止CSRF

对于很多网站来说,即使是一些重要的操作使用POST来提交请求,但是服务端在接受请求的时候未严格的区分GET和POST。攻击者依然可以用GET来请求表单的提交地址。

比如在PHP中,如果使用的是$_REQUEST,而$_REQUEST既可以接受GET请求也可以接受POST请求。

POST CSRF
如果服务端已经区分了GET和POST,只用$_POST来接收请求数据。最简单的方法就是在攻击页面构造好一个form表单,然后用javascript自动提交这个表单。

CSRF漏洞的防御

从漏洞原理来看

  • 关键操作增加验证码(比如说支付密码)
  • 验证referer
  • 使用Token

从漏洞利用前提条件来看

  • 用户需要养成访问完一个网站之后,点击退出帐户的好习惯
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: