CSRF 原理与相关利用(本站用户头像重置漏洞,已修复)
已修复,请勿测试!
CSRF 又叫跨站请求伪造(Cross-site request forgery),主要是伪造用户请求,在用户无感知的情况下利用用户已有身份发起请求。
比如昨天我发了两个帖子,一个是控制特定用户头像替换为指定头像的(比如站长点进去会被替换为我的 logo 图片),一个是让用户头像重置为默认头像。
其原理是利用了 cookie 的同源策略,在请求同一站点时 cookie 会自动附加,所以在用户登录后访问 2libra.com 的所有路径,浏览器都会自动附加 cookie,有了这个特性后就可以利用当前登录用户身份完成某些操作。
本站修改头像使用了 get 请求,且无 CSRF 校验,导致漏洞产生,get 请求不会产生跨域问题,不需要嵌入脚本,只要让用户浏览器发出请求即可,使得攻击难度大大降低。
其次是利用图片自动加载的特性实现请求的发送,本站没有采用白名单机制加载图片,亦未采用图片黑名单机制(比如过滤本站地址,禁止请求 api 路径),所以在添加图片的时候将地址改为头像更新的地址即可实现,比如修改为:https://2libra.com/api/users/update-avatar,MD 语法渲染图片为 img 标签,img 自动载入图片等同于发送 get 请求,实现更新头像的操作。

图片自动加载发出请求
整个流程就是:
发布一个修改了图片地址为头像更新 api 的帖子--用户打开帖子--浏览器自动请求图片(请求 api)--头像被重置。
引申出来还有另一个严重问题,已经反馈给站长完成修复了,这里就不说了,如果站长认为可以说我再说,也是比较经典的案例。
@Jimmy 不能手动选择黑洞节点,你看看有没有问题,有问题就先移走。