前言
本篇将讲解什么是CSRF漏洞,CSRF与XSS的异同点,CSRF漏洞产生的原因,以及如何利用简单的CSRF漏洞。
什么是CSRF漏洞
所谓的CSRF全称为跨站点请求伪造(Cross-site request forgery),如果读者对SSRF(服务端请求伪造)有所了解到地话,相信一听到这个名字就能触类旁通。如果没有也没关系,请听笔者娓娓道来。
跨站点请求伪造顾名思意,就是由某个网站发出的伪造请求。那么问题来了,是什么网站向谁发出的什么样的伪造的请求呢?通俗来讲,就是受攻击者控制的网站假冒有缺陷网站的正常用户向该网站发出的请求(如更改绑定邮箱、修改密码、转账等)。看到这里有一定水平的读者脑子里想必会产生另一个词——XSS吧。
对比CSRF与XSS
简单介绍一点有关XSS的知识。所谓的XSS就是跨站点脚本,其本质就是利用嵌入URL或存储在服务器中的脚本以执行一些恶意操作。在了解了二者的定义后我们来看看二者的异同点。
二者执行的一些恶意操作都是需要用户权限的,简单来讲就是先要冒充用户才能执行这些操作。为了达到这目的就需要用户的cookie。XSS是通过脚本窃取用户cookie然后攻击者修改登录请求中的cookie以达到冒充用户的目的;而CSRF则是诱使用户误操作使其向有缺陷的网站直接发送请求,不需要直接获取用户cookie。
虽然二者的手段不同,但其目的是相同的,都是为了获得正常用户的权限以执行一些敏感操作,以达到攻击者的目的(如提权、恶意攻击、窃取财富等)。
CSRF漏洞产生的原因
在知道了什么是CSRF漏洞后我们再来看看其产生的原因。CSRF漏洞产生的最主要的两个原因是采用单一的cookie处理请求和请求中没有含有攻击者未知的参数(如令牌/tokens)。
如果只用单一的cookie来标识用户并且没有其它手段验证请求或者跟踪会话是极其危险的。因为只要有了cookie就相当于是用户本身,而要直接或间接利用用户的cookie难度并没有那么大。这就相当于保险柜只上了一道锁,而这把锁只要是个小偷就能轻易把它撬开。
第二点道理类似。如果没有未知的参数,攻击者就能轻易伪造请求然后诱使用户误操作以发送给有缺陷的网站。
如何利用CSRF漏洞
利用CSRF漏洞的一般流程为:
- 用户登录有缺陷的网站(浏览器存储cookie);
- 在cookie有效期内访问攻击者搭建的危险网页;
- 诱使用户在危险网页执行一些操作后得以向有缺陷的网站发出伪造的请求;
接下来以一个简单CSRF漏洞为例,讲解如何利用CSRF漏洞。以下是靶场首页:
点击我的账号并进行登录:
发现一个修改邮箱的功能,于是抓取修改邮箱的请求包:
分析发现处理会话时只使用了cookie进行处理,表明存在CSRF漏洞,于是准备构造POC。说到写CSRF的POC,那真的是相当的痛苦。如果有经济条件的读者可以使用burpsuite Pro带有的CSRF POC生成器,生成的POC确实非常精致好用。而且burpsuite Pro还可以作为运行CSRF POC省去了网站托管。笔者使用的为GitHub上的CSRF POC生成器(https://github.com/merttasci/csrf-poc-generator),但生成的POC还是比较简单粗糙的。
将抓到的请求包粘贴在左边,点击生成,右边就会生成一个简单的CSRF POC:
看到这个POC大家应该就明白了攻击者是通过隐藏按钮的方式以诱使用户误操作的了
将其托管到靶场提供的服务器:
查看POC生成的网页:
点击提交按钮后在用户不知情的情况下修改邮箱成功:
总结
CSRF漏洞产生的原因主要是因为处理请求或跟踪会话的方式过于简单导致攻击者有机可乘。在攻击者搭建的危险网站中,攻击者通过以隐藏按钮的方式以诱使用户误操作,从而有缺陷的网站发送伪造的请求。
以上就是本篇的全部内容,我们下篇见。