cdxy.me
Footprints on Cyber Security and Python

攻击点

referrer绕过

  1. 无验证
  2. http: //xxx.weibo.com(.cdxy.me)
  3. (http: //cdxy.me?)http: //xxx.weibo.com

新浪微博CSRF之点我链接发微博(可蠕虫)

捕捉token

如token通过get方法在url中显示时,常见方法是通过referrer偷token


利用

本身来说CSRF漏洞是广泛存在的,一般将其归类为“低危”,但只要利用的姿势够牛,CSRF也会有大作为。

除了常见的“刷粉丝”“发消息”“改信息”“蠕虫”等,还可以配合其他漏洞解锁更多好玩的利用姿势。

账号关联

如果绑定请求未做csrf防护,攻击者可以构造恶意请求让用户绑定了攻击者的账号。这样攻击者登录他自己的账号后就可以得到用户在其他平台的权限。

网易某处点开我的链接就会被盗号

一种蠕虫

ACFUN所有接口未加验证 可实现完美蠕虫

第三方登录

点我的链接我就可能会进入你的果壳账号

XSS+CSRF

使用XSS+AJAX自动触发CSRF,免除了CSRF里“用户打开链接之后才会触发”的利用缺陷。


防护

核心思想

有关CSRF的防御的核心思想可以总结为一句话: 在请求里cookies以外的位置,放入攻击者所不能伪造和复现的信息

三个条件

“信息”需要满足以下三个条件:

  1. 随机性——不可预测
  2. 一次性——每次请求后要更新,不能共用、复用
  3. 保密性——敏感操作使用post,防止参数在url中泄露

针对2 3两条的理解,请参考这个漏洞: 聊着聊着我就上了你……的微信(两处都可以劫持微信登录的漏洞)

防护方法

服务端

  • 检查referrer
  • 验证token
  • 在html头自定义属性并验证

其中第三项原理和token类似,只是位置不同,它在HTTP头中自定义的属性里。

比如:通过XMLHttpRequest这个类,可以一次性给所有该类请求加上csrftoken这个HTTP头属性,并把token值放入其中。这种方式的另一个好处是不必担心参数值在url中泄露

客户端

可使用js做一定程度上的防御,可以提高攻击成本,详细请参考 利用Window.Opener绕过CSRF保护

其他逻辑策略

  • 在执行关键操作时(如修改密码,修改绑定邮箱手机等),除了要做CSRF的token防护之外,还应该要求重新输入当前账号密码,并加入验证码
  • 关键操作只接受post请求只接受https请求