CSRF跨站请求伪造漏洞 && CSRFTester使用教程
一、漏洞原理
CSRF(Cross-site request forgery,跨站请求伪造)也被称为One Client Attack或者Session Riding,通常缩写为CSRF和XSRF,是一种对网站的恶意利用。是指当受害者访问带有攻击代码的页面时,利用受害者的身份(cookie)想服务器发送恶意请求。与xss不同的是,xss是盗取用户的资料,利用用户进行某种动作,而CSRF没有盗取用户的信息和诱导用户进行操作,只要访问了攻击页面,直接伪造成用户向服务器发出申请。CSRF属于业务逻辑漏洞,利用了服务器对关键操作缺少确认机制
借用一下网上的图来阐释一下CSRF的攻击流程:

由上图可知,CSRF的攻击过程两个条件:
1、目标用户已经登录了网站,能够执行网站的功能。
2、目标用户访问了攻击者构造的URL。
//浏览器关闭一个网站后,本地的Cookie也有可能没有立刻过期,还有存在利用的可能性
二、防护方法
1.同源策略
原理
查看请求的来源,常见方法是查看请求的Referer字段
绕过方法
但这种验证方法很容易被绕过,如果验证只看Referer字段的值中是否包含自家的域名,那么我们可以用将有漏洞的网站的域名注册为自己的子域名即可
例如:存在漏洞网站的域名为:
http://attacker-website.com/csrf-attack?vulnerable-website.com
那么我们可以将该域名注册成自己的子域名,这样就绕过了Referer验证
http://vulnerable-website.com.attacker-website.com/csrf-attack
如果服务器要求的Referer值一定要是增删查改功能点所在的页面的URL,我们也可以通过使用META标签,让浏览器不要发送Referer字段,如果提交给服务端的http请求中并没有Referer字段,那么验证就会直接忽略
<meta name="referrer" content="never">
2.cookie设置token值
原理
当我们访问的网页中含有需要修改数据的地方,后端服务器就会随机发送一个Token值给前端,然后我们修改完数据提交的请求包中,就会有该token字段,后端提取该token验证登录状态。当我们每次访问该网页或者其他修改数据的网页时,服务器端返回的Token值都是不同的,都是随机的、不可预测的,这样可以有效预防CSRF。
//token在POST方法中进行验证,但是在GET方法中却不进行验证
绕过方法
(1)token没有和用户的session绑定
如果服务器是直接弄了个token池,如果用户提交的请求中的token能和token池中的任意一个token对应上,就能认证通过的话,那么我们可以先去该网站登录,获取一个该网站的token值,然后在CSRF攻击请求上将这个token值添加上去,这样也可以绕过验证
(2)CSRF token没有绑定到指定用户的session上
如果服务器没有将token值与用户的session绑定,并且能够让攻击者在受害者机器上设置cookie的功能,那么我们也可以通过,登录自己的账户获得cookie和对应的token值,然后将自己的cookie和token设置到受害者的电脑上,这样就可以绕过token的验证了
3.对关键操作需要进行验证
(1)进行验证码验证
(2)设置安全码验证
(3)设置不可预测的请求参数,执行该操作的请求中包含攻击者不能决定或者猜测出来的值,例:修改密码时,需要输入原来的密码。
三、实例演示
pikachu
(1)CSRF(get)
通过burp抓包获取修改用户信息的get请求

将url复制下了,并且进行修改

将访问该修改后url的代码写入a.html里
当用户访问a.html页面的同时,用户的个人信息也被篡改了
(2)CSRF(post)
这里我们直接用burp自带poc,首先用burp对修改信息进行抓包,再使用CSRF PoC,生成带有攻击代码的html页面

已经生成了html了,可以修改表单里的内容来修改数据。可以直接做一个页面,也可以用Test in browser直接生成一个带有poc的页面

访问burp提供的带有poc的页面,按下按钮后,用户的个人信息也被篡改了

(3)CSRF(token)
这关是防范CSRF的常用方法的一个演示。
espcmsv5.7.13.08.15
易思ESPCMS后台管理页面之前就爆出过CSRF漏洞,笔者在本地搭建了一个5.7.13版本来演示一下
首先,我们来到后台管理,发现该网站的cookie值是没有设置token值的

再来到添加管理员的功能点,看看对请求来源有没有验证
修改数据包的Referer值

成功添加进去了,所以证明对Referer没有验证,添加的过程也没有验证码和安全码。

接下来进行通过CSRFTester捕获到了提交表单数据包,生成带有工具的页面

上传到个人服务器上,然后访问公网上的攻击页面

成功将管理员添加进去了

四、CSRF自动化工具——CSRFTester
(1)设置CSRFTester的代理端口8008

(2)捕获提交表单数据包,点击Generate HTML生成文件

(3)可以在CSRF.html里面修改表单数据
注意:将上下多余的部分(多余的form表单)删除掉,只留下我们想要的捕获提交表单数据包上的form表单,不删掉多余的表单可能会出错


(4)访问CSRF.html后,成功添加bcxc222管理员

五、漏洞挖掘特性
功能点
一般利用的都是可以进行增删查改操作的功能点,例如:修改个人信息、修改表单信息、查看返回的表单信息等等
流程
直接使用工具进行复现:
(1)有->存在漏洞
(2)没有->审计代码:
(1)代码存在缺陷(可绕过)->存在漏洞
(2)代码完整没有缺陷->没有漏洞

浙公网安备 33010602011771号