什么是CSRF
(Cross-Site Request Forgery)
跨站请求伪造
- bank.com是合法网站
- porn.com是非法网站
①用户访问bank.com后
②bank.com返回cookie给用户
③用户点击porn.com
④porn.com响应一个含恶意请求的out.html
⑤out.html会调用bank.com并且调用过程会带着用户的cookie。
这样,恶意网站成功获取到用户的cookie,伪造了用户的身份对bank.com进行了访问。
Gmail CSRF漏洞(设置邮件转发)
设置邮件转发:
假如你有很多邮箱:qq邮箱、163邮箱、gmail邮箱。
一般你不会每天都登陆每个邮箱上去看邮件,而是只看一个邮箱。所以我们一般会把qq邮箱、163邮箱等都转到gmail邮箱,这样,在Gmail就能看到所有的邮件了。
攻击者可以收到用户的所有邮件。(真恐怖)
Weibo CSRF漏洞(自动关注账号)
自动关注账号:
第三方网站可以直接让用户关注某个账号
危害
CSRF与XSS区别点
- CSRF涉及到第三方网站,第三方网站带有恶意代码。XSS不涉及第三方网站,只是在合法网站里的参数里面带有恶意脚本。
- CSRF第三方网站不会获取用户明文的cookie,只是冒用了一下用户的身份,并没获取到cookie;XSS使得攻击者可以获得用户明文的cookie,从而可以在漏洞管理网站进行为所欲为。
- 如果需要把恶意脚本注入到攻击的网站,就是XSS
CSRF payload例子
CSRF 漏洞挖掘工具
Burp Suite
- 首先访问合法网站的敏感接口
- 用Burp Suite抓个包
- 右键生成CSRF POC
- 然后把生成的html保存成html
- 直接访问保存出来的html
- 点击Submit request,看看是否对合法网站产生了影响
可以看到余额变少了,成功执行了CSRF
CSRF Tester
和Burp Suite差不多,都是半自动化,需要人来搞。
Bolt
全自动化的CSRF挖掘工具
各种付费的云产品
钞能力才是万能的
CSRF 防御
初级防御(DVWA-Medium)
Referer
记录来源页面
案例:
在页面校验一下referer是否存在当前域名,如果不是,则拦截。
注意!这种方式并不安全。
攻击者可以通过抓包来更改referer字段,从而欺骗合法网站该请求是从前端过来的。
中级防御(DVWA-High)
假如功能为修改密码。
初看起来有点绕。实际很好理解。
- 普通用户A,访问合法网站
- 合法网站返回一个token字段,放在hidden字段。(注意这个token字段只存在返回的html,像下面那样)
也就是说,每次普通用户提交修改代码等请求的时候,都会去将这个藏起来的token提交给服务器。
就算普通用户访问了恶意网站,恶意网站也包含了对合法网站访问的请求链接。
但是这个藏在本来的hidden字段的token只存在于普通用户访问合法网站得到的html。
在其他地方的请求是没有带上这个token的。
这种防御的弱点:
- token可能被泄露
比如如果合法网站同样存在xss漏洞,那么可以直接获取到该token。
高级防御(DVWA-Impossible)
二次验证思想:再次校验!只有再次输入密码,才能更改密码。
案例:
- 验证码
- 二次验证(手机接收验证码)
- 人脸识别
- 人机身份验证
浏览器的保护策略(google)
Referer Policy
strict-origin-when-cross-origin
浏览器如果发现是跨站的请求(垮域名的请求),浏览器会默认把对跨站的请求的参数都删除掉