一、CSRF介绍
CSRF(Cross-Site Request Forgery,跨站请求伪造),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF .它是一种常见的 Web攻击方式。是一种劫持用户在当前已登录的Web应用程序上执行非本意操作一种攻击。
二、referer同源介绍 (防御csrf攻击)
所谓同源就是指请求的源和对应的响应服务器:协议一致,IP (域名)一致,端口一致。
三、token值校验介绍 (防御csrf攻击)
Token验证是一种更加安全的防御手段。在表单提交时,服务器端可以为每个表单生成一个唯一的Token,并在客户端和服务器端分别保存该Token。当表单提交时,服务器端会验证表单中的Token与服务器端保存的Token是否一致,如果不一致则拒绝请求。由于Token是随机生成的,攻击者无法预测和伪造Token,因此这种方法可以有效防止CSRF攻击。(检验数据包的唯一性)
四、绕过方法
1、(代码逻辑问题)绕过referer利用方法
1)滞空referer(代码逻辑不严谨)以下是测试案例。
2)上图仅有一个admin用户,新建用户抓包
3)生成csrf poc
4)实战中需要放到自己服务器上,这里为测试环境直接本地创建test.html,模拟受害者打开运行,可以看见用户直接创建成功。
5)这里的绕过主要是因为对方代码逻辑出现问题,在浏览器新建页面重新打开此操作页面,是没有来源的。如果检测来源,但是我这里没有来源,按照逻辑这里就被禁止访问了。但是它还是可以访问,因为登录状态打开个页面重新访问某个地址的某个功能本身逻辑就是正常的,所以不会检测来源,有些正常功能是不需要检测来源,恰好导致了漏洞产生。正常代码逻辑应该写清楚哪些功能里面检测来源,哪些功能里面不需要检测来源。
<meta name="referrer" content="no-referrer"> 添加头部 设置为no 即请求时不带来源
2、(代码逻辑问题)绕过token利用方法
绕过0:将Token参数值复用(代码逻辑不严谨)
绕过1:将Token参数删除(代码逻辑不严谨)
绕过2:将Token参数值置空(代码逻辑不严谨)
3、(代码逻辑问题)绕过referer方法 2(条件苛刻)
例如:
http://xx.xx.xx.xx/http://xx.xx.xx.xx /csrf.html请求的是自己的源。然后创建一个目录名字为目标源(由于创建目录不能存在特殊符合,这里介绍的只是一种思路,如果对方接收只要存在目标源的ip就判断为同源的话那么也可以绕过),然后你打开的来源不就是http://自己的源ip/目标源ip 如果是模糊检测只检测是否含有目标源ip 有就可以绕过 那么这种方法就可以实现。
前提条件:
点击过来的(从csrf.html点击过来的会记录这个来源http://xx.xx.xx.xx/http://xx.xx.xx.xx /csrf.html)。
直接访问:来源检测的值是:http://自己的源ip
4、严谨使用同源时绕过方法
绕过1:配合文件上传绕过:上传到对方网站,由于在网站自身访问的,自然符合同源。
绕过2:配合存储XSS绕过:利用xss漏洞存储到网页源代码,受害者点击触发的操作也是他自身访问的,类似于同上,也是符合同源的。
五、利用条件
1、需要请求伪造数据包
2、无过滤防护 有防护且能绕过
3、受害者需要触发(诱导)