Part 1

CSRF是什么?

  CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

CSRF可以做什么?

  你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全。

CSRF漏洞现状

  CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度HI……而现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。

CSRF的原理

  下图简单阐述了CSRF攻击的思想:
c_1

从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:

  1. 登录受信任网站A,并在本地生成Cookie。

  2. 在不登出A的情况下,访问危险网站B。

  看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生:

  1. 你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。

  2. 你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了……)

  3. 上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。

CSRF例子

此处我们有一个elgg的例子作为一个实例

  1. 首先我们来假设一个场景:Alice是一个可爱的菇凉,而Boby是一个她的暗恋者,但是由于Alice不愿意加Bob为好友,所以Bob无法看Alice的动态,所以Boby看着社交网站开始思考,如何才可以使Alice加Bob为好友

  2. Bob是个学习信息安全的人开始寻找漏洞,后来他得到了一个惊人的发现,当Boby,添加好友时,那个get的链接,如果另一个好友也使用,那么他们可以添加同一个好友

  3. 那么就有可以让Alice加自己的方法了,只需要我们获得一个加Boby的链接,然后让Alice点击这个链接,这样Boby就成功拥有了Alice好友,就可以看动态了

开始实操:

  1. 首先进入Samy账号,点击添加好友的链接,可以看到添加了Boby好友
    c_4
    c_5

  2. 将链接复制到一个黑页上(注意把实体化的html编码转换一下)

    1
    2
    3
    <html>
    <img src="http://www.csrflabelgg.com/action/friends/add?friend=43&__elgg_ts=1551963961&__elgg_token=z-k2H1FxWD0NFokNtR4jAQ">
    </html>

然后Alice登录自己的账号
c_2

点击黑页后
c_3

成功添加,这就是最典型的CSRF

Part 2

XSS 和 CSRF的区别

这还是真的是一个非常让初学者搞不清楚的东西
通俗的来讲:
XSS: 通过客户端脚本语言(最常见如:JavaScript)
在一个论坛发帖中发布一段恶意的JavaScript代码就是脚本注入,如果这个代码内容有请求外部服务器,那么就叫做XSS!

CSRF:又称XSRF,冒充用户发起请求(在用户不知情的情况下),完成一些违背用户意愿的请求(如恶意发帖,删帖,改密码,发邮件等)。

通常来说CSRF是由XSS实现的,所以CSRF时常也被称为XSRF用XSS的方式实现伪造请求(但实现的方式绝不止一种,还可以直接通过命令行模式(命令行敲命令来发起请求)直接伪造请求只要通过合法验证即可)。
XSS更偏向于代码实现(即写一段拥有跨站请求功能的JavaScript脚本注入到一条帖子里,然后有用户访问了这个帖子,这就算是中了XSS攻击了),CSRF更偏向于一个攻击结果,只要发起了冒牌请求那么就算是CSRF了。

很多时候XSS用来获取自己想要的数据,但是同时CSRF只是想要做这一件这个用户可以做的事情,可能获得信息不是关键的,主要是为了获得身份

参考链接

浅谈CSRF攻击方式
用大白话谈谈XSS与CSRF