csrf简介
CSRF 全称为跨站请求伪造( Cross-site request forgery ),是一种网络攻击方式,在 CSRF 的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。也被称为 one-click attack 。
原理
首先,我们来说一下cookie是什么?
所谓“cookie”数据是指某些网站为了辨别用户身份,储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。 通俗来讲就是指缓存数据,包括用户名、密码、注册账户、手机号等公民个人信息。
漏洞危害
常见 CSRF 漏洞危害如下 :
- 篡改目标网站上的用户数据信息,如用户名手机号等
- 盗取用户隐私数据。
- 配合XSS漏洞造成更大危害。
- 传播CSRF蠕虫。
- 总结:简而言之,是利用目标用户的合法身份,以用户的名义执行非法操作。
get型csrf
在 web 应用中,很多接口都是通过 GET 进行数据的请求和存储,如果未对来源进行校验,并且没有 token保护,许多用户在登录一个网站以后,就会产生一个cookie ,去访问别的网站时,一般会利用cookie验证,而不验证来源,攻击者可以直接通过发送含有payload 的链接诱导点击来进行攻击。
post型csrf
post 型与 get 型的差别就是 get 型参数是在 url 中直接显示, post 型需要抓包才能看到参数
所以 post 型 csrf 不能直接伪造恶意链接。而需要伪造一个页面,提交表单。
可以自己编写代码,也可以通过 burp 抓包工具构造 poc。
csrf(token)
- csrf的主要问题是敏感操作容易被伪造,我们可以加入token让每次的请求不容易被伪造。
- 每次请求,都增加一个随机码(需要够随机,不容易被伪造),后台每次对这个随机码进行验证,抓包进行查看
图中的框为token
跟前面比较,这里多了一个 Token ,如果后台对提交的 Token 进行了验证,由于 Token 是随机的,我们就无法伪造URL 了。
防御手段
- 验证HTTP Referer字段
- 限制Cookie生命周期
- 使用一次性token
- 使用验证码或者密码确认方式进行
绕过方法
- Referer 绕过空 referer 绕过: 其他协议( data )或 https 跳 http包含 referer : 若只检查是否包含网址,只需在我们的网站上创建一个文件 / 文件夹即可
- CSRF-token 绕过 :删除令牌 :删除 cookie/ 参数中 token ,免服务器验证令牌共享: 创建两个帐户,替换 token 看是否可以互相共用;篡改令牌值 :有时系统只会检查 CSRF 令牌的长度;解码 CSRF 令牌: 尝试进行 MD5 或 Base64 编码修改请求方法 : post 改为 get窃取 token :重定向、 XSS 、 web 缓存欺骗、 clickjacking 等都可能导致 token 泄露