CSRF跨站点伪造请求攻击之——原理介绍与分类

原理介绍与分类

CSRF 是 Web 应用程序的一种常见漏洞,其攻击特性是危害性大但非常隐蔽,尤其是在大量 Web 2.0
技术的应用背景下,攻击者完全可以在用户毫无察觉的情况下发起 CSRF
攻击。本文将对其基本特性、攻击原理、攻击分类、检测方法及防范手段做一个系统的阐述,并列举攻击实例

CSRF 漏洞简介

CSRF(Cross-Site Request Forgery,跨站点伪造请求)是一种网络攻击方式,该攻击
可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在未授权的 情况下执行在权限保护之下的操作,具有很大的危害性。

具体来讲,可以这样理解 CSRF 攻 击:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的 账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。

CSRF 攻击方式并不为大家所熟知,实际上很多网站都存在 CSRF 的安全漏洞。早在 2000 年,CSRF 这种攻击方式已经由国外的安全人员提出,但在国内,直到 2006 年才开始被关注。 2008 年,国内外多个大型社区和交互网站先后爆出 CSRF 漏洞,如:百度 HI、NYTimes.com (纽约时报)、Metafilter(一个大型的 BLOG 网站)和 YouTube 等。

但直到现在,互联网上 的许多站点仍对此毫无防备,以至于安全业界称 CSRF 为“沉睡的巨人”,其威胁程度由此便可见一斑。

CSRF 攻击原理及实例

当我们打开网站或者登陆某个网站后,就会产生一个会话(这里指用户登陆后),这个会 话可能是 SESSION,Cookie控制,但是这是无关紧要的。
唯一的重点是浏览器与服务器之间是在会话之中,在这个会话没有结束时候,你可以利用你的权限对网站进行操作,如进行发表文章,发邮件,删除文章等操作。当这个会话结束后,你在进行某些操作时候 Web 应用程序通常会来提醒你,您的会话已过期,或者是请重新登陆等提示。

而 CSRF 攻击则是建立会话之上的攻击。比如当你登陆了网上银行,正在进行转账业务,这时你的某个 QQ 好友(攻击者)发来一条消息(URL),这条消息是攻击者精心构造的转账业务代码。而且与你所登录的网站是同一个银行,你可能认为这个网站是安全的,并不是什么钓鱼网站之类的,然后打开了这条
URL,那么你的账户的钱可能就在你的这一次小小点击上全部丢失。

主要是因为你的浏览器正处于与此网站的会话 之中,那么一些操作都是合法的,而入侵者构造的这段代码只不过是正常的转账操作代码而 已

例如

比如说你想给用户 spisec 转账 1000 元,那么点击提交按钮之后,可能会发送以下请求:
http://www.taobao.com/pay.jsp?user=spisec&money=1000
而攻击者仅仅是改变一下 user 参数与 money 参数即可完成一次“合法”的攻击,如:
http://www.taobao.com/pay.jsp?user=hack&money=10000 当你访问了这条 URL 之后,就会自动向 hack 这个账户里面转入 10000 元。而这是你亲手造成的,并没因为有人去破解你的密码或者是 Web服务器被入侵所导致的你的金钱丢失。

流程总览

  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 两个侧重点

		1、CSRF 的攻击建立在浏览器与 Web 服务器的会话之中。(或者是有用户信息,用户登录不用密码)
		2、欺骗用户访问 URL
		也就是说攻击者盗用了用户的身份,用用户合法手段进行自己的操作

CSRF 攻击分类

CSRF 漏洞一般分为站外和站内两种类型
CSRF 站外类型的漏洞本质上就是传统意义上的外部提交数据问题。通常程序员会考虑
给一些留言或者评论的表单加上水印以防止 SPAM 问题(这里,SPAM 可以简单的理解为垃圾
留言、垃圾评论,或者是带有站外链接的恶意回复),但是有时为了提高用户的体验性,可
能没有对一些操作做任何限制,所以攻击者可以事先预测并设置请求的参数,在站外的 Web
页面里编写脚本伪造文件请求,或者和自动提交的表单一起使用来实现 GET、POST 请求,当
用户在会话状态下点击链接访问站外 Web 页面,客户端就被强迫发起请求。

CSRF 站内类型的漏洞在一定程度上是由于程序员滥用$_REQUEST 类变量造成的。在一些
敏感的操作中(如修改密码、添加用户等),本来要求用户从表单提交发起 POST 请求传递参
数给程序,但是由于使用了$_REQUEST 等变量,程序除支持接收 POST 请求传递的参数外也
支持接收 GET 请求传递的参数,这样就会为攻击者使用 CSRF 攻击创造条件。一般攻击者只
要把预测的请求参数放在站内一个贴子或者留言的图片链接里,受害者浏览了这样的页面就
会被强迫发起这些请求。

CSRF 漏洞检测

检测 CSRF 漏洞是一项比较繁琐的工作,最简单的方法就是抓取一个正常请求的数据包,
去掉 Referer 字段后再重新提交,如果该提交还有效,那么基本上可以确定存在 CSRF 漏洞

随着对 CSRF 漏洞研究的不断深入,不断涌现出一些专门针对 CSRF 漏洞进行检测的工具,如
CSRFTester,CSRF Request Builder 等。以 CSRFTester 工具为例,CSRF 漏洞检测工具的测
试原理如下:使用 CSRFTester 进行测试时,首先需要抓取我们在浏览器中访问过的所有链接以及所有的表单等信息,然后通过在CSRFTester 中修改相应的表单等信息,重新提交,这相当于一次伪造客户端请求。如果修改后的测试请求成功被网站服务器接受,则说明存在CSRF 漏洞,当然此款工具也可以被用来进行 CSRF 攻击。

注意

包括很多防御软件,例如防火墙防盗链模块,也是根据refer字段,通过识别refer字段的来源是否在本站,如果不是,则不允许下载资源

发布了117 篇原创文章 · 获赞 11 · 访问量 6468

猜你喜欢

转载自blog.csdn.net/weixin_43079958/article/details/105443005
今日推荐