网站如何防止CSRF攻击

2021-11-08
915

 CSRF(跨站请求伪造)概述 – Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也称为"one click"攻击。 很多人搞不清楚CSRF的概念,甚至有时候会将其和XSS混淆,更有甚者会将其和越权问题混为一谈,这都是对原理没搞清楚导致的。
CSRF与XSS的区别:CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏。 因此,网站如果要防止CSRF攻击,则需要对敏感信息的操作实施对应的安全措施,防止这些操作出现被伪造的情况,从而导致CSRF。比如: 1. 对敏感信息的操作增加安全的token; 2. 对敏感信息的操作增加安全的验证码; 3. 对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等。

CSRF的实现过程:
image.png

接下来实际在靶场当中实践一下:

CSRF(get)

1.先点一下提示
image.png
找到有哪些用户

2.登录vince
image.png
3.修改个人信息,burp抓包
image.png
4.生成csrf poc
image.png

copy html放到网站目录下(先建txt,粘贴后改后缀为html)
image.png
5.登录kevin用户,然后访问csrf poc
image.png

image.png
访问后点击,发现kevin用户信息已经被更改
image.png

到这就实际体验了文章开头的csrf 流程

顺带提一下渗透测试中两个常见的名词:

POC:全称 ' Proof of Concept ',中文 ' 概念验证 ' ,常指一段漏洞证明的代码。
EXP:全称 ' Exploit ',中文 ' 利用 ',指利用系统漏洞进行攻击的动作。

CSRF(post)

先对比着看一下get和post的数据包区别:
get:
image.png

post:
image.png

可以看到:
GET请求参数是通过URL传递的,多个参数以&连接,POST请求放在request body中。

1.接着上面抓到的post数据包,生成csrf poc
image.png

2.copy html放到网站目录下
image.png

3.登录lili用户
image.png

初始用户信息
image.png

4.不退出用户,直接访问csrf poc
image.png
点击后发现用户信息已被修改
image.png

CSRF(token)

先抓包看看数据包有何不同
image.png

试试csrf能否实现
1.登录lili
image.png
原始用户信息
image.png

2.访问csrf poc
image.png

image.png

image.png

不能实现csrf,增加了token验证机制,无法绕过

总结:

CSRF广义上存在于任何增删改操作中,根据经验常见的有: 
1)冒充身份:订阅/关注/转发/投票操作,删除文件,更改配置等
2)帐户接管:密码修改,邮箱绑定,第三方帐户关联 
3)其他:登录/注册/注销/注册 
4)安全设计原则:CSRF登录后令牌未更新、登出后未注销等

漏洞防御:
1) 验证header字段
常见的是Referer和Origin,Referer容易绕过,且会包含有一些敏感信息,可能会侵犯用户的隐私,而Origin字段代表最初请求,更建议使用。

2) Token令牌机制
当前最成熟的防御机制,但若存在验证逻辑及配置问题则存在绕过风险。Token的生成机制通常和session标识符挂钩,将用户的token与session标识符在服务端进行匹配。当下已经有很多开源库和中间件都可以实现token生成。

3) 验证自定义header
如基于cookie的csrf保护,验证cookie中的某些值和参数必须相等

转载时必须以链接形式注明原始出处及本声明

扫描关注公众号