一篇文章简述CSRF漏洞

339 阅读3分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第3篇文章,点击查看活动详情

引文:

今天带大家简单了解一下CSRF漏洞:跨站请求伪造(Cross-site request forgery),该漏洞也属于应用范围比较广的一种漏洞,可以窃取用户认证信息来进行一些越权操作。

简介

根据百度百科可以看到介绍:

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

CSRF.PNG

COOKIE

Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息.

SESSION

Session 是存放在服务器端的,类似于Session结构来存放用户数据,当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识这个Session,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的Session。

攻击过程

前置条件:

完成一次CSRF攻击,受害者要完成两步:

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

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

我们通过一个银行转账的操作来模拟一下CSRF攻击:

当我们登录银行网站,在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A。我们进行一个转账操作:

假设转账的URL为:

http://www.bank.com/Transfermoney.php?toBankId=1&money=1000

该操作模拟了一个向id用户为1的人转账1000元的操作,当我们构造一个恶意链接:

http://www.bank.com/Transfermoney.php?toBankId=11&money=1000

当用户访问该链接时会向ID为11的用户转账1000元,因为没有登出网站用户的操作是受网站信任的。

可能大家觉得链接太明显,可以利用一些构造短链接的网址

http://go2ud1.cn/haL4u

可以发现完全看不出是什么了,当然这只是最简单的操作,我们还可以配合xss来进行CSRF+XSS组合拳来攻击。具体可以看下下面的博客:

blog.csdn.net/aiquan9342/…

防范

根据CSRF的利用规则,我们可以通过以下方法去进行防范,包括从服务端和从客户端:

HTTP Referer

判断HTTP请求的referer来源字段,服务器会验证客户端的请求来源,如果本网站请求的则响应,否则不会进行响应,但是该方法可能存在通过一些抓包工具去修改referer头来绕过验证。

验证码

验证码可以有效的防止因为误点恶意链接受到攻击,但只能作为一种辅助手段。

token

服务端生成Token,用户提交请求后, 服务端验证表单中的Token是否与用户Session(或Cookies)中的Token一致,来判断是不是非法操作。但也有一定风险,如果生成token的函数是一个伪随机数,我们可以通过一些手段去找个伪随机数生成规律,token1的值就可能得知了。

结语

今天给大家带来的是CSRF漏洞的简单入门,如果有兴趣的话可以在DWAV靶机上去动手试一试。